From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 104818 invoked by alias); 12 Mar 2019 21:32:28 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 104767 invoked by uid 89); 12 Mar 2019 21:32:28 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-15.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: smtp.polymtl.ca Received: from smtp.polymtl.ca (HELO smtp.polymtl.ca) (132.207.4.11) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 12 Mar 2019 21:32:26 +0000 Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id x2CLWJhx012827 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 12 Mar 2019 17:32:24 -0400 Received: by simark.ca (Postfix, from userid 112) id BFF8B1E78F; Tue, 12 Mar 2019 17:32:19 -0400 (EDT) Received: from simark.ca (localhost [127.0.0.1]) by simark.ca (Postfix) with ESMTP id 262EE1E4A5; Tue, 12 Mar 2019 17:32:18 -0400 (EDT) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Tue, 12 Mar 2019 21:32:00 -0000 From: Simon Marchi To: Pedro Alves Cc: gdb-patches@sourceware.org Subject: Re: [PATCH] For flex: define YY_FATAL_ERROR, rename fprintf -> parser_fprintf In-Reply-To: <20190312182145.21611-1-palves@redhat.com> References: <20190312182145.21611-1-palves@redhat.com> Message-ID: X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.3.6 X-IsSubscribed: yes X-SW-Source: 2019-03/txt/msg00263.txt.bz2 On 2019-03-12 14:21, Pedro Alves wrote: > Switching GDB to make use of gnulib's C++ namespace support mode > revealed these direct uses of fprintf in the Ada lexer: > > In file included from ..../src/gdb/ada-exp.y:731:0: > ada-lex.c: In function ‘void yy_fatal_error(const char*)’: > ada-lex.c:2358:41: error: call to ‘fprintf’ declared with attribute > warning: The symbol ::fprintf refers to the system function. Use > gnulib::fprintf instead. [-Werror] > (void) fprintf( stderr, "%s\n", msg ); > ^ > > The generated yy_fatal_error looks like this with flex 2.5.35: > > static void yy_fatal_error (yyconst char* msg ) > { > (void) fprintf( stderr, "%s\n", msg ); > exit( YY_EXIT_FAILURE ); > } > > We can define YY_FATAL_ERROR to override that default implementation. > > I think it's a good idea to do that and call internal_error instead of > exiting gdb, so this is what this patch does. > > However, the default implementation is still generated and > unconditionally compiled in, so we need to handle that fprintf somehow > too. gnulib's C++ namespace support adds that useful warning shown > above, breaking the build if we don't do anything here. > > So this commit uses sed to replace fprintf calls with parser_fprintf > calls, like we already do to rewire malloc to xmalloc, etc. > > gdb/ChangeLog: > yyyy-mm-dd Pedro Alves > > * Makefile.in (.l.c): Replace fprintf calls with parser_fprintf > calls. > * yy-remap.h (YY_FATAL_ERROR): Define. > --- > gdb/Makefile.in | 28 ++++++++++++++++++++++++---- > gdb/yy-remap.h | 2 ++ > 2 files changed, 26 insertions(+), 4 deletions(-) > > diff --git a/gdb/Makefile.in b/gdb/Makefile.in > index 5614cc3386..aa01c8d38e 100644 > --- a/gdb/Makefile.in > +++ b/gdb/Makefile.in > @@ -2457,10 +2457,28 @@ po/$(PACKAGE).pot: force > # LANG-exp.c is generated in objdir from LANG-exp.y if it doesn't > # exist in srcdir, then compiled in objdir to LANG-exp.o. If we > # said LANG-exp.c rather than ./c-exp.c some makes would > -# sometimes re-write it into $(srcdir)/c-exp.c. Remove bogus > -# decls for malloc/realloc/free which conflict with everything else. > -# Strictly speaking c-exp.c should therefore depend on > -# Makefile.in, but that was a pretty big annoyance. > +# sometimes re-write it into $(srcdir)/c-exp.c. > +# > +# Remove bogus decls for malloc/realloc/free which conflict with > +# everything else. > +# > +# Replace calls to fprintf in order to redirect stderr -> gdb_stderr. > +# > +# We define YY_FATAL_ERROR to hook in our replacement, however, flex > +# still defines the default version anyway, as a static function, > +# leading to -Wunused-function warnings, like: > +# > +# ada-lex.c:2329:13: error: ‘void yy_fatal_error(const char*)’ > defined but not used [-Werror=unused-function] > +# > +# Observed with flex 2.5.35. And then with flex 2.6.1 we have: > +# > +# ada-lex.c:#define yynoreturn __attribute__((__noreturn__)) > +# ada-lex.c:static void yynoreturn yy_fatal_error (yyconst char* > msg ) > +# > +# Fix that by injecting ATTRIBUTE_UNUSED into yy_fatal_error's > prototype. > +# > +# Strictly speaking c-exp.c should therefore depend on Makefile.in, > +# but that was a pretty big annoyance. > > %.c: %.y > $(ECHO_YACC) $(SHELL) $(YLWRAP) $< y.tab.c $@.tmp -- \ > @@ -2489,6 +2507,8 @@ po/$(PACKAGE).pot: force > -e 's/\([ \t;,(]\)free\([ \t]*[&(),]\)/\1xfree\2/g' \ > -e 's/\([ \t;,(]\)free$$/\1xfree/g' \ > -e 's/yy_flex_xrealloc/yyxrealloc/g' \ > + -e 's/\([ \t;,(]\)fprintf/\1parser_fprintf/g' \ > + -e 's/\(static void\) \(yynoreturn \)\?\(yy_fatal_error\)/\1 > ATTRIBUTE_UNUSED \2\3/g' \ > > $@.new && \ > mv $@.new $@ > > diff --git a/gdb/yy-remap.h b/gdb/yy-remap.h > index cdd0aae8c6..ba62adbbfd 100644 > --- a/gdb/yy-remap.h > +++ b/gdb/yy-remap.h > @@ -96,4 +96,6 @@ > # define YYFPRINTF parser_fprintf > #endif > > +#define YY_FATAL_ERROR(msg) internal_error (__FILE__, __LINE__, msg) > + > #endif /* YY_REMAP_H */ This LGTM. Simon