All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: "Alex Bennée" <alex.bennee@linaro.org>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC PATCH  0/3] tweaks for QEMU's C standard
Date: Mon, 13 Aug 2018 10:18:28 +0100	[thread overview]
Message-ID: <20180813091828.GI22904@redhat.com> (raw)
In-Reply-To: <20180813090705.GH22904@redhat.com>

On Mon, Aug 13, 2018 at 10:07:05AM +0100, Daniel P. Berrangé wrote:
> On Fri, Aug 10, 2018 at 06:10:58PM +0100, Alex Bennée wrote:
> > Hi,
> > 
> > While I was reviewing Richard's SVE series I found Travis choking on
> > some perfectly valid c99. It turns out that Travis default image is
> > old enough that gcc defaults to -std=gnu89 hence the problem. However
> > switching to c99 isn't enough as we use GNUisms and even gnu99 still
> > trips up on qemu-secomp.
> > 
> > Of course we could just jump to C11 already?
> 
> We've always required GCC or a compatible compiler (CLang is only viable
> alternative option really). We use a number of GCC extensions to the C
> standard and I don't see a compelling reason to stop using them.
> 
> From that POV I think we do *NOT* need to care about official C standards
> (c89, c99, c11, etc), only the GNU C standards (gnu89, gnu99, gnu11, etc).
> 
> > This is an RFC because this could descend into a C standards
> > bike-shedding exercise but I thought I'd at least put it out there on
> > a Friday afternoon ;-)
> 
> I did some archeology to inform our plans...
> 
> The default GCC C standards across various versions are:
> 
>   8.2.1: gnu17
>   7.3.1: gnu11
>   6.4.1: gnu11
>   5.3.1: gnu11
>   4.9.1: gnu89
>   4.4.7: gnu89
> 
> Interesting to note that no version of GCC ever defaulted to gnu99. It was
> not fully implemented initially and by the time the standard was fully
> implemented, gnu11 was already good enough to be the default. So GCC jumped
> straight from gnu89 as default to gnu11 as default.
> 
> Across the various distros we aim to support we have:
> 
>       RHEL-7: 4.8.5
>       Debian (Stretch): 6.3.0
>       Debian (Jessie): 4.9.2
>       OpenBSD (Ports): 4.9.4
>       FreeBSD (Ports): 8.2.0
>       OpenSUSE Leap 15: 7.3.1
>       SLE12-SP2:
>       Ubuntu (Xenial): 5.4.0
>       macOS (Homebrew): 8.2.0
> 
> IOW plenty of our plaforms are still on 4.x which defaults to gnu89.
> 
> In GCC 4.x, gnu99 is said to be incomplete (but usable) and gnu11
> are said to be incomplete and experimental (ie don't use it).
> 
> The lowest common denominator supported by all our platforms is thus
> gnu89.
> 
> If we don't mind that gnu99 is not fully complete in 4.x, we could use
> that standard.
> 
> We definitely can't use gnu11 any time soon.
> 
> Given that many modern platforms default to gnu11, I think we should
> set an explicit -std=gnu89, or -std=gnu99, because otherwise we risk
> accidentally introducing code that relies on gnu11 features.

Also, we should ensure the min required GCC version via biuld time
check of some kind. eg something like

#if !(__GNUC_PREREQ(4, 4) || defined(__clang__))
# error "QEMU requires GCC >= 4.4, or CLang"
#endif


We can even check the C standard at build time if desired. eg I see
these symbols defined for various -std=xxx args:

 gnu89: #undef __STDC_VERSION__
 gnu99: #define __STDC_VERSION__ 199901
 gnu11: #define __STDC_VERSION__ 201112L
 gnu17: #define __STDC_VERSION__ 201710L


(See  "gcc -std=XXX  -dM -E - < /dev/null")

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	other threads:[~2018-08-13  9:18 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-10 17:10 [Qemu-devel] [RFC PATCH 0/3] tweaks for QEMU's C standard Alex Bennée
2018-08-10 17:10 ` [Qemu-devel] [RFC PATCH 1/3] HACKING: mention the C GNU extensions we use Alex Bennée
2018-08-10 17:11 ` [Qemu-devel] [RFC PATCH 2/3] qemu-seccomp: manually expand SCMP_A1 Alex Bennée
2018-08-21 12:06   ` Eduardo Otubo
2018-08-10 17:11 ` [Qemu-devel] [RFC PATCH 3/3] .travis.yml: ensure we support C99 on old compilers Alex Bennée
2018-08-10 17:24   ` Philippe Mathieu-Daudé
2018-08-13  9:07 ` [Qemu-devel] [RFC PATCH 0/3] tweaks for QEMU's C standard Daniel P. Berrangé
2018-08-13  9:18   ` Daniel P. Berrangé [this message]
2018-08-13  9:29     ` Peter Maydell
2018-08-13  9:52     ` Alex Bennée
2018-08-13  9:25   ` Thomas Huth
2018-08-13 11:03     ` Daniel P. Berrangé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180813091828.GI22904@redhat.com \
    --to=berrange@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.