qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] configure: Force the C standard to gnu11


From: Daniel P . Berrangé
Subject: Re: [Qemu-devel] [PATCH] configure: Force the C standard to gnu11
Date: Wed, 9 Jan 2019 12:58:54 +0000
User-agent: Mutt/1.10.1 (2018-07-13)

On Wed, Jan 09, 2019 at 01:52:02PM +0100, Thomas Huth wrote:
> On 2019-01-09 12:44, Daniel P. Berrangé wrote:
> > On Wed, Jan 09, 2019 at 12:25:43PM +0100, Thomas Huth wrote:
> >> On 2019-01-09 11:58, Daniel P. Berrangé wrote:
> >>> On Mon, Jan 07, 2019 at 11:45:26AM +0100, Thomas Huth wrote:
> >>>> Different versions of GCC and Clang use different versions of the C 
> >>>> standard.
> >>>> This repeatedly caused problems already, e.g. with duplicated typedefs:
> >>>>
> >>>>  https://lists.gnu.org/archive/html/qemu-devel/2018-11/msg05829.html
> >>>>
> >>>> or with for-loop variable initializers:
> >>>>
> >>>>  https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg00237.html
> >>>>
> >>>> To avoid these problems, we should enforce the C language version to the
> >>>> same level for all compilers. Since our minimum compiler versions are
> >>>> GCC v4.8 and Clang v3.4 now, and both basically support "gnu11" already,
> >>>> this seems to be a good choice.
> >>>
> >>> In 4.x   gnu11 is marked as experimental. I'm not really comfortable
> >>> using experimental features - even if its warning free there's a risk
> >>> it would silently mis-compile something.
> >>>
> >>> gnu99 is ok with 4.x - it is merely "incomplete".
> >>
> >> gnu11 has the big advantage that it also fixes the problem with
> >> duplicated typedefs that are reported by older versions of Clang.
> >>
> >> Are you sure about the experimental character in 4.x? I just looked at
> >> https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/Standards.html and it says:
> >>
> >> "A fourth version of the C standard, known as C11, was published in 2011
> >> as ISO/IEC 9899:2011. GCC has limited incomplete support for parts of
> >> this standard, enabled with -std=c11 or -std=iso9899:2011."
> >>
> >> It does not say anything about "experimental" there. The word
> >> "experimental" is only used for the C++ support, but we hardly have C++
> >> code in QEMU -- if you worry about that, I could simply drop the
> >> "-std=gnu++11" part from my patch?
> > 
> > I was looking at the "info gcc" docs on RHEL7, gcc-4.8.5-16.el7_4.1.x86_64:
> > 
> >   "3.4 Options Controlling C Dialect
> > 
> >        ....snip...
> > 
> >      'gnu11'
> >      'gnu1x'
> >           GNU dialect of ISO C11.  Support is incomplete and
> >           experimental.  The name 'gnu1x' is deprecated."
> 
> Ok. Looks like the "Support is incomplete and experimental" sentence has
> been removed with GCC 4.9.0 here. So GCC 4.8 is likely pretty close
> already. IMHO we could give it a try and enable gnu11 for QEMU with GCC
> v4.8, too. If we later find problems, we could still switch back to
> gnu99 instead. Other opinions?

Our code is already cleanly compiling with gnu99 standard - the problem
is merely that we sometimes introduce regressions due to not enforcing
that standard level. I don't think the features in gnu11 are compelling
enough to justify using something that's declared experimental. As long
as we always have a -std=gnu99 flag set, it will avoid the regressions
we've seen.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



reply via email to

[Prev in Thread] Current Thread [Next in Thread]