Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 6 Nov 2013 08:55:16 +0100
From:      Dimitry Andric <dim@FreeBSD.org>
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org, Luigi Rizzo <rizzo@iet.unipi.it>
Subject:   Re: svn commit: r257691 - head/gnu/lib/libgcc
Message-ID:  <38BB8918-1311-4C23-8992-43A272250F05@FreeBSD.org>
In-Reply-To: <20131106144724.I3234@besplex.bde.org>
References:  <201311050737.rA57bZkq059529@svn.freebsd.org> <20131105154519.GD65141@onelab2.iet.unipi.it> <20131106144724.I3234@besplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--Apple-Mail=_6BFB7C6F-9464-4F54-83A1-21954AA0A6C1
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii

On 06 Nov 2013, at 05:30, Bruce Evans <brde@optusnet.com.au> wrote:
> 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.).

First of all, gcc only emits this warning when using -pedantic, see
contrib/gcc/c-typeck.c, around line 2123.  However, our copy of gcc also
ships with a faulty C99 test in contrib/gcclibs/include/ansidecl.h,
which has (around line 176):

/* inline requires special treatment; it's in C99, and GCC >=3D2.7 =
supports                                                                 =
                     =20
   it too, but it's not in C89.  */                                      =
                                                                         =
             =20
#undef inline                                                            =
                                                                         =
             =20
#if __STDC_VERSION__ > 199901L                                           =
                                                                         =
             =20
/* it's a keyword */                                                     =
                                                                         =
             =20
#else                                                                    =
                                                                         =
             =20
# if GCC_VERSION >=3D 2007                                               =
                                                                         =
               =20
#  define inline __inline__   /* __inline__ prevents -pedantic warnings =
*/                                                                       =
              =20
# else                                                                   =
                                                                         =
             =20
#  define inline  /* nothing */                                          =
                                                                         =
             =20
# endif                                                                  =
                                                                         =
             =20
#endif                                                                   =
                                                                         =
             =20

Upstream gcc fixed this here:

=
http://gcc.gnu.org/viewcvs/gcc/trunk/include/ansidecl.h?r1=3D155654&r2=3D1=
55653&pathrev=3D155654


>> I wonder if it is worthwhile adding to the default rules some
>> compiler-specific CFLAGS, say CFLAGS_CLANG and CFLAGS_GCC
>>=20
>> (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 agree for this particular case, but there are other places in the tree
where we must pass either clang-specific or gcc-specific flags.
Introducing the variables Luigi suggested makes those Makefiles a little
less ugly, at least.


> I checked that libgcc is compiled by default with -std=3Dgnu99.  This
> is just the default from bsd.sys.mk.  It is obviously wrong for =
libgcc,
> since the plain inlines in it require gnu89.

Yes, I agree.  This can be fixed in libgcc's Makefile, but unfortunately
clang will still emit the warning.


> gnu99 gives consistenly
> broken C99 semantic for both gcc and clang.  Only clang warned about
> this, and the warning has been broken.

Indeed, it always emits the warning, even for -std=3Dgnu89, and even =
when
__inline__ is explicitly used.  This could probably be considered a bug,
but I think upstream has meant this as a general warning towards making
code C99-compliant.  Is it too hard to make a static variable
non-static? :)

-Dimitry


--Apple-Mail=_6BFB7C6F-9464-4F54-83A1-21954AA0A6C1
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename=signature.asc
Content-Type: application/pgp-signature;
	name=signature.asc
Content-Description: Message signed with OpenPGP using GPGMail

-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.22 (Darwin)

iEYEARECAAYFAlJ59egACgkQsF6jCi4glqMJdwCg8LcU1cOJaXrM7CAgmu4Qk2Ug
uvQAnRSn724ttJkCOZOL89vm7i0UQiwm
=VRbA
-----END PGP SIGNATURE-----

--Apple-Mail=_6BFB7C6F-9464-4F54-83A1-21954AA0A6C1--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?38BB8918-1311-4C23-8992-43A272250F05>