Date: Wed, 6 Nov 2013 15:30:41 +1100 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Luigi Rizzo <rizzo@iet.unipi.it> Cc: svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org, Dimitry Andric <dim@FreeBSD.org> Subject: Re: svn commit: r257691 - head/gnu/lib/libgcc Message-ID: <20131106144724.I3234@besplex.bde.org> In-Reply-To: <20131105154519.GD65141@onelab2.iet.unipi.it> References: <201311050737.rA57bZkq059529@svn.freebsd.org> <20131105154519.GD65141@onelab2.iet.unipi.it>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 5 Nov 2013, Luigi Rizzo wrote: > On Tue, Nov 05, 2013 at 07:37:35AM +0000, Dimitry Andric wrote: >> Log: >> Fix libgcc build with gcc after r257645, by using -Wno-static-in-inline >> for clang only. This still just breaks the warning. See my previous reply. (For gcc, it is unclear if the missing warning is due too fewer warnings by default or if it is because gcc's default for plain inline is different from clang's so that the code is correct for gcc.). > I wonder if it is worthwhile adding to the default rules some > compiler-specific CFLAGS, say CFLAGS_CLANG and CFLAGS_GCC > > (there is only a handful of cases now so maybe it is overkill, > and it harms readability; on the other hand, the Makefiles > already make a lot of assumptions on variable names) No, that would further simplify breaking warnings instead of fixing the bugs exposed by warnings. The code should be portable so that it works with any compiler. That is just not so easy for contrib'ed code unless the vendor made it portable. I checked that libgcc is compiled by default with -std=gnu99. This is just the default from bsd.sys.mk. It is obviously wrong for libgcc, since the plain inlines in it require gnu89. gnu99 gives consistenly broken C99 semantic for both gcc and clang. Only clang warned about this, and the warning has been broken. Contribed code could easily depend on either newer or older standards than the one is defaulted. gcc should be more portable than most contribed code, especially in parts required to bootstrap itself. It seems to never use extern inline, but that means that all of its uses of plain inline assume gnu89 and are thus unportable to pre-c99 compilers other than itself and to post-c99 compilers including itself. Maybe its own autoconfigued makefiles avoid this problem by forcing -std=gnu89 or by avoiding -std=c99. Or -Dinline= might work for bootstrapping. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20131106144724.I3234>