From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([209.51.188.92]:51351) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ghDtd-000704-0A for qemu-devel@nongnu.org; Wed, 09 Jan 2019 08:27:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ghDta-0004XU-Qo for qemu-devel@nongnu.org; Wed, 09 Jan 2019 08:27:48 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53370) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ghDta-0004Vz-IY for qemu-devel@nongnu.org; Wed, 09 Jan 2019 08:27:46 -0500 Date: Wed, 9 Jan 2019 13:27:29 +0000 From: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= Message-ID: <20190109132729.GN3998@redhat.com> Reply-To: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= References: <1546857926-5958-1-git-send-email-thuth@redhat.com> <20190109105818.GG3998@redhat.com> <20190109114459.GK3998@redhat.com> <89b89818-00b8-44b5-04db-4e2571533e84@redhat.com> <20190109125854.GM3998@redhat.com> <860317b6-6489-9c18-bdf8-95a70fbec9b3@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <860317b6-6489-9c18-bdf8-95a70fbec9b3@redhat.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] configure: Force the C standard to gnu11 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Thomas Huth Cc: qemu-devel@nongnu.org, Richard Henderson , pbonzini@redhat.com, peter.maydell@linaro.org On Wed, Jan 09, 2019 at 02:20:02PM +0100, Thomas Huth wrote: > On 2019-01-09 13:58, Daniel P. Berrang=C3=A9 wrote: > > On Wed, Jan 09, 2019 at 01:52:02PM +0100, Thomas Huth wrote: > >> On 2019-01-09 12:44, Daniel P. Berrang=C3=A9 wrote: > >>> On Wed, Jan 09, 2019 at 12:25:43PM +0100, Thomas Huth wrote: > >>>> On 2019-01-09 11:58, Daniel P. Berrang=C3=A9 wrote: > >>>>> On Mon, Jan 07, 2019 at 11:45:26AM +0100, Thomas Huth wrote: > >>>>>> Different versions of GCC and Clang use different versions of th= e C standard. > >>>>>> This repeatedly caused problems already, e.g. with duplicated ty= pedefs: > >>>>>> > >>>>>> 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 versio= n to the > >>>>>> same level for all compilers. Since our minimum compiler version= s 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 comforta= ble > >>>>> 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 looke= d 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 i= n 2011 > >>>> as ISO/IEC 9899:2011. GCC has limited incomplete support for parts= of > >>>> this standard, enabled with -std=3Dc11 or -std=3Diso9899:2011." > >>>> > >>>> It does not say anything about "experimental" there. The word > >>>> "experimental" is only used for the C++ support, but we hardly hav= e C++ > >>>> code in QEMU -- if you worry about that, I could simply drop the > >>>> "-std=3Dgnu++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? > >=20 > > Our code is already cleanly compiling with gnu99 standard - the probl= em > > is merely that we sometimes introduce regressions due to not enforcin= g > > that standard level. I don't think the features in gnu11 are compelli= ng > > enough to justify using something that's declared experimental. > What about the duplicated typedef problem? See: >=20 > https://lists.gnu.org/archive/html/qemu-devel/2018-11/msg05829.html >=20 > That one occured with Clang, but I think we've had plenty of these in > the past with GCC, too... IIUC, That's only a problem because we don't pass any -std flag, and so get the compilers default, which may be gnu11. If we explicitly set -std=3Dgnu99, that problem will be reported by patchew, travis and maintainers own build tests, and thus won't get anywhere near git master. Regards, Daniel --=20 |: https://berrange.com -o- https://www.flickr.com/photos/dberran= ge :| |: https://libvirt.org -o- https://fstop138.berrange.c= om :| |: https://entangle-photo.org -o- https://www.instagram.com/dberran= ge :|