qemu-devel
[Top][All Lists]
Advanced

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

Re: Moving to C11? (was Re: Redefinition of typedefs (C11 feature))


From: Eduardo Habkost
Subject: Re: Moving to C11? (was Re: Redefinition of typedefs (C11 feature))
Date: Mon, 14 Sep 2020 09:46:36 -0400

On Mon, Sep 14, 2020 at 07:39:09AM +0200, Thomas Huth wrote:
> On 13/09/2020 04.51, Eduardo Habkost wrote:
> > On Sat, Sep 12, 2020 at 08:45:19AM +0200, Thomas Huth wrote:
> >> On 11/09/2020 22.06, Eduardo Habkost wrote:
> >>> On Fri, Sep 11, 2020 at 08:06:10PM +0100, Peter Maydell wrote:
> >>>> On Fri, 11 Sep 2020 at 19:49, Eduardo Habkost <ehabkost@redhat.com> 
> >>>> wrote:
> >>>>>
> >>>>> I'm wondering: do our supported build host platforms all include
> >>>>> compilers that are new enough to let us redefine typedefs?
> >>>>>
> >>>>> The ability to redefine typedefs is a C11 feature which would be
> >>>>> very useful for simplifying our QOM boilerplate code.  The
> >>>>> feature is supported by GCC since 2011 (v4.6.0)[1], and by clang
> >>>>> since 2012 (v3.1)[2].
> >>>>
> >>>> In configure we mandate either GCC v4.8 or better, or
> >>>> clang v3.4 or better, or XCode Clang v5.1 or better
> >>>> (Apple uses a different version numbering setup to upstream).
> >>>> So you should probably double-check that that xcode clang has
> >>>> what you want, but it looks like we're good to go otherwise.
> >>>
> >>> Can anybody confirm if the following is accurate?
> >>>
> >>> https://gist.github.com/yamaya/2924292#file-xcode-clang-vers-L67
> >>> # Xcode 5.1 (5B130a)
> >>> Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
> >>> Target: x86_64-apple-darwin13.1.0
> >>> Thread model: posix
> >>>
> >>> If we know we have GCC 4.8+ or clang 3.4+, can we move to C11 and
> >>> start using -std=gnu11?
> >>
> >> You don't have to switch to gnu11, redefintions of typedefs are already
> >> fine in gnu99, they are a gnu extension there to the c99 standard.
> >>
> >> See also:
> >> https://git.qemu.org/?p=qemu.git;a=commitdiff;h=7be41675f7cb16b
> >>
> >> https://www.mail-archive.com/qemu-devel@nongnu.org/msg585581.html
> > 
> > They still trigger a warning with gnu99 on clang:
> > 
> > $ clang --version
> > clang version 10.0.0 (Fedora 10.0.0-2.fc32)
> > Target: x86_64-unknown-linux-gnu
> > Thread model: posix
> > InstalledDir: /usr/bin
> > $ cat test.c
> > typedef struct A A;
> > typedef struct A A;
> > $ clang -std=gnu11 -c test.c
> > $ clang -std=gnu99 -c test.c
> > test.c:2:18: warning: redefinition of typedef 'A' is a C11 feature 
> > [-Wtypedef-redefinition]
> > typedef struct A A;
> 
> Ah, right, I forgot about that ... so for clang, we silence that warning
> via CFLAGS in the configure script. See commit e6e90feedb706b1.

Nice, I hadn't seen that.  This means we don't need C11 for
supporting redefinition of typedefs.

Now, do we have other reasons for not moving to C11?  It would be
nice to make QEMU_GENERIC unnecessary and just use _Generic, for
example.

-- 
Eduardo




reply via email to

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