Public bug reported:

qemu now breaks in Hirsute (it didn't 23h ago)
Broken:
https://launchpadlibrarian.net/524654684/buildlog_ubuntu-hirsute-amd64.qemu_1%3A5.2+dfsg-6ubuntu1_BUILDING.txt.gz

Good before:
https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/4471/+packages

Error:

../../disas/arm-a64.cc
In file included from /usr/include/glib-2.0/glib/gmacros.h:241,
                 from /usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h:9,
                 from /usr/include/glib-2.0/glib/gtypes.h:32,
                 from /usr/include/glib-2.0/glib/galloca.h:32,
                 from /usr/include/glib-2.0/glib.h:30,
                 from /<<BUILDDIR>>/qemu-5.2+dfsg/include/glib-compat.h:32,
                 from /<<BUILDDIR>>/qemu-5.2+dfsg/include/qemu/osdep.h:126,
                 from ../../disas/arm-a64.cc:21:
/usr/include/c++/10/type_traits:56:3: error: template with C linkage
   56 |   template<typename _Tp, _Tp __v>
      |   ^~~~~~~~
../../disas/arm-a64.cc:20:1: note: ‘extern "C"’ linkage started here
   20 | extern "C" {
      | ^~~~~~~~~~

Also in disas/nanomips.cpp, ...

And indeed disas/arm-a64.cc has:
 20 extern "C" {
 21 #include "qemu/osdep.h"
 22 #include "disas/dis-asm.h"
 23 }

Through the chain of headers as reported above this gets to the templates
in /usr/include/c++/10/type_traits which fails due to that.

So C++ constructs within a C scope which is this bug.

Upstream qemu has not recently changed yet for this.
The code is the same since 2016 via commit e78490c44: "disas/arm-a64.cc:
Include osdep.h first" by Peter Maydell.

But what was different before to break it now?
To find that I was comparing Hirsute vs Hirsute-proposed ...

It is indeed failing in -proposed but working in hirsute-release.

10.2.1-20ubuntu1 : bad

repro in broken build:
$ cd /root/qemu-5.2+dfsg/b/qemu
$ c++ -Ilibcommon.fa.p -I. -I../.. -Iqapi -Itrace -Iui -Iui/shader 
-I/usr/include/pixman-1 -I/usr/include/virgl -I/usr/include/libpng16 
-I/usr/include/spice-server -I/usr/include/spice-1 -I/usr/include/libusb-1.0 
-I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gio-unix-2.0 
-I/usr/include/cacard -I/usr/include/nss -I/usr/include/nspr 
-I/usr/include/PCSC -I/usr/include/slirp -fdiagnostics-color=auto -pipe -Wall 
-Winvalid-pch -Wnon-virtual-dtor -std=gnu++11 -O2 -g -D__STDC_LIMIT_MACROS 
-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -U_FORTIFY_SOURCE -m64 -mcx16 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wundef 
-Wwrite-strings -fno-strict-aliasing -fno-common -fwrapv -g -O2 
-ffile-prefix-map=/root/qemu-5.2+dfsg=. -fstack-protector-strong -Wformat 
-Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wtype-limits 
-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body 
-Wendif-labels -Wexpansion-to-defined -Wno-missing-include-dirs 
-Wno-shift-negative-value -Wno-psabi -fstack-protector-strong -isystem 
/root/qemu-5.2+dfsg/linux-headers -isystem linux-headers -iquote 
/root/qemu-5.2+dfsg/tcg/i386 -iquote . -iquote /root/qemu-5.2+dfsg -iquote 
/root/qemu-5.2+dfsg/accel/tcg -iquote /root/qemu-5.2+dfsg/include -iquote 
/root/qemu-5.2+dfsg/disas/libvixl -pthread -fPIE -DSTRUCT_IOVEC_DEFINED 
-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DNCURSES_WIDECHAR -MD -MQ 
libcommon.fa.p/disas_nanomips.cpp.o -MF libcommon.fa.p/disas_nanomips.cpp.o.d 
-o libcommon.fa.p/disas_nanomips.cpp.o -c ../../disas/nanomips.cpp

With that I have a test env...

Doko asked me to test
https://launchpad.net/ubuntu/+source/gcc-10/10.2.1-19ubuntu1/+build/20995220/+files/g++-10_10.2.1-19ubuntu1_amd64.deb
That fails as well, but also good as well as bad case have 10.10.2.1-20ubuntu1
It must be something else.

The difference were ~340 packages I was upgrading them to spot what broke it.
I eventually found glib 2.66 -> 2.67 to break it.

libglib2.0-0/hirsute-proposed 2.67.4-1 amd64 [upgradable from: 2.66.4-1]
libglib2.0-bin/hirsute-proposed 2.67.4-1 amd64 [upgradable from: 2.66.4-1]
libglib2.0-data/hirsute-proposed 2.67.4-1 all [upgradable from: 2.66.4-1]
libglib2.0-dev-bin/hirsute-proposed 2.67.4-1 amd64 [upgradable from: 2.66.4-1]
libglib2.0-dev/hirsute-proposed 2.67.4-1 amd64 [upgradable from: 2.66.4-1]

Old:
/*
 * We can only use __typeof__ on GCC >= 4.8, and not when compiling C++. Since
 * __typeof__ is used in a few places in GLib, provide a pre-processor symbol
 * to factor the check out from callers.
 *
 * This symbol is private.
 */
#undef g_has_typeof
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 
8)) && !defined(__cplusplus)
#define g_has_typeof
#endif

New:
/*
 * We can only use __typeof__ on GCC >= 4.8, and not when compiling C++. Since
 * __typeof__ is used in a few places in GLib, provide a pre-processor symbol
 * to factor the check out from callers.
 *
 * This symbol is private.
 */
#undef glib_typeof
#if !defined(__cplusplus) && \
     ((defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ 
>= 8))) || \
      defined(__clang__))
#define glib_typeof(t) __typeof__ (t)
#elif defined(__cplusplus) && __cplusplus >= 201103L
/* C++11 decltype() is close enough for our usage */
#include <type_traits>                         <--- THIS IS WHAT BREAKS US
#define glib_typeof(t) typename std::remove_reference<decltype (t)>::type
#define glib_typeof_2_68
#endif

On the glib side this is due to:
https://gitlab.gnome.org/GNOME/glib/-/issues/2331
Also related:
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1935
https://lists.fedoraproject.org/archives/list/de...@lists.fedoraproject.org/thread/J3P4TRHLWNDIKXF76OLYZNAPTABCZ3U5/#7LXFUDBBBIT23FE44QJYWX3I7U4EHW6M

Qemu try to fix/discussion at:
https://lists.gnu.org/archive/html/qemu-devel/2021-02/msg07294.html
This won't be the final solution, but it gets things going for the time being.

glib try to fix (also seems not to be ok for upstream, but would get everything 
going for now). Thanks Laney btw:
https://gitlab.gnome.org/iainl/glib/-/commit/b865b76c01a35fb8dbffb9bc2907acf341a31aba

** Affects: glib2.0 (Ubuntu)
     Importance: Undecided
         Status: New

** Affects: qemu (Ubuntu)
     Importance: Undecided
         Status: Triaged

** Also affects: glib2.0 (Ubuntu)
   Importance: Undecided
       Status: New

** Description changed:

  qemu now breaks in Hirsute (it didn't 23h ago)
  Broken:
  
https://launchpadlibrarian.net/524654684/buildlog_ubuntu-hirsute-amd64.qemu_1%3A5.2+dfsg-6ubuntu1_BUILDING.txt.gz
  
  Good before:
  https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/4471/+packages
  
  Error:
  
  ../../disas/arm-a64.cc
  In file included from /usr/include/glib-2.0/glib/gmacros.h:241,
-                  from 
/usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h:9,
-                  from /usr/include/glib-2.0/glib/gtypes.h:32,
-                  from /usr/include/glib-2.0/glib/galloca.h:32,
-                  from /usr/include/glib-2.0/glib.h:30,
-                  from /<<BUILDDIR>>/qemu-5.2+dfsg/include/glib-compat.h:32,
-                  from /<<BUILDDIR>>/qemu-5.2+dfsg/include/qemu/osdep.h:126,
-                  from ../../disas/arm-a64.cc:21:
+                  from 
/usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h:9,
+                  from /usr/include/glib-2.0/glib/gtypes.h:32,
+                  from /usr/include/glib-2.0/glib/galloca.h:32,
+                  from /usr/include/glib-2.0/glib.h:30,
+                  from /<<BUILDDIR>>/qemu-5.2+dfsg/include/glib-compat.h:32,
+                  from /<<BUILDDIR>>/qemu-5.2+dfsg/include/qemu/osdep.h:126,
+                  from ../../disas/arm-a64.cc:21:
  /usr/include/c++/10/type_traits:56:3: error: template with C linkage
-    56 |   template<typename _Tp, _Tp __v>
-       |   ^~~~~~~~
+    56 |   template<typename _Tp, _Tp __v>
+       |   ^~~~~~~~
  ../../disas/arm-a64.cc:20:1: note: ‘extern "C"’ linkage started here
-    20 | extern "C" {
-       | ^~~~~~~~~~
+    20 | extern "C" {
+       | ^~~~~~~~~~
  
  Also in disas/nanomips.cpp, ...
  
- 
  And indeed disas/arm-a64.cc has:
-  20 extern "C" {
-  21 #include "qemu/osdep.h"
-  22 #include "disas/dis-asm.h"
-  23 }
+  20 extern "C" {
+  21 #include "qemu/osdep.h"
+  22 #include "disas/dis-asm.h"
+  23 }
  
  Through the chain of headers as reported above this gets to the templates
  in /usr/include/c++/10/type_traits which fails due to that.
  
  So C++ constructs within a C scope which is this bug.
  
  Upstream qemu has not recently changed yet for this.
  The code is the same since 2016 via commit e78490c44: "disas/arm-a64.cc:
  Include osdep.h first" by Peter Maydell.
  
  But what was different before to break it now?
  To find that I was comparing Hirsute vs Hirsute-proposed ...
  
  It is indeed failing in -proposed but working in hirsute-release.
  
  10.2.1-20ubuntu1 : bad
  
  repro in broken build:
  $ cd /root/qemu-5.2+dfsg/b/qemu
  $ c++ -Ilibcommon.fa.p -I. -I../.. -Iqapi -Itrace -Iui -Iui/shader 
-I/usr/include/pixman-1 -I/usr/include/virgl -I/usr/include/libpng16 
-I/usr/include/spice-server -I/usr/include/spice-1 -I/usr/include/libusb-1.0 
-I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gio-unix-2.0 
-I/usr/include/cacard -I/usr/include/nss -I/usr/include/nspr 
-I/usr/include/PCSC -I/usr/include/slirp -fdiagnostics-color=auto -pipe -Wall 
-Winvalid-pch -Wnon-virtual-dtor -std=gnu++11 -O2 -g -D__STDC_LIMIT_MACROS 
-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -U_FORTIFY_SOURCE -m64 -mcx16 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wundef 
-Wwrite-strings -fno-strict-aliasing -fno-common -fwrapv -g -O2 
-ffile-prefix-map=/root/qemu-5.2+dfsg=. -fstack-protector-strong -Wformat 
-Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wtype-limits 
-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body 
-Wendif-labels -Wexpansion-to-defined -Wno-missing-include-dirs 
-Wno-shift-negative-value -Wno-psabi -fstack-protector-strong -isystem 
/root/qemu-5.2+dfsg/linux-headers -isystem linux-headers -iquote 
/root/qemu-5.2+dfsg/tcg/i386 -iquote . -iquote /root/qemu-5.2+dfsg -iquote 
/root/qemu-5.2+dfsg/accel/tcg -iquote /root/qemu-5.2+dfsg/include -iquote 
/root/qemu-5.2+dfsg/disas/libvixl -pthread -fPIE -DSTRUCT_IOVEC_DEFINED 
-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DNCURSES_WIDECHAR -MD -MQ 
libcommon.fa.p/disas_nanomips.cpp.o -MF libcommon.fa.p/disas_nanomips.cpp.o.d 
-o libcommon.fa.p/disas_nanomips.cpp.o -c ../../disas/nanomips.cpp
  
  With that I have a test env...
  
  Doko asked me to test
  
https://launchpad.net/ubuntu/+source/gcc-10/10.2.1-19ubuntu1/+build/20995220/+files/g++-10_10.2.1-19ubuntu1_amd64.deb
  That fails as well, but also good as well as bad case have 10.10.2.1-20ubuntu1
  It must be something else.
  
  The difference were ~340 packages I was upgrading them to spot what broke it.
  I eventually found glib 2.66 -> 2.67 to break it.
  
  libglib2.0-0/hirsute-proposed 2.67.4-1 amd64 [upgradable from: 2.66.4-1]
  libglib2.0-bin/hirsute-proposed 2.67.4-1 amd64 [upgradable from: 2.66.4-1]
  libglib2.0-data/hirsute-proposed 2.67.4-1 all [upgradable from: 2.66.4-1]
  libglib2.0-dev-bin/hirsute-proposed 2.67.4-1 amd64 [upgradable from: 2.66.4-1]
  libglib2.0-dev/hirsute-proposed 2.67.4-1 amd64 [upgradable from: 2.66.4-1]
  
  Old:
  /*
-  * We can only use __typeof__ on GCC >= 4.8, and not when compiling C++. Since
-  * __typeof__ is used in a few places in GLib, provide a pre-processor symbol
-  * to factor the check out from callers.
-  *
-  * This symbol is private.
-  */
+  * We can only use __typeof__ on GCC >= 4.8, and not when compiling C++. Since
+  * __typeof__ is used in a few places in GLib, provide a pre-processor symbol
+  * to factor the check out from callers.
+  *
+  * This symbol is private.
+  */
  #undef g_has_typeof
  #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 
8)) && !defined(__cplusplus)
  #define g_has_typeof
  #endif
  
- 
  New:
  /*
-  * We can only use __typeof__ on GCC >= 4.8, and not when compiling C++. Since
-  * __typeof__ is used in a few places in GLib, provide a pre-processor symbol
-  * to factor the check out from callers.
-  *
-  * This symbol is private.
-  */
+  * We can only use __typeof__ on GCC >= 4.8, and not when compiling C++. Since
+  * __typeof__ is used in a few places in GLib, provide a pre-processor symbol
+  * to factor the check out from callers.
+  *
+  * This symbol is private.
+  */
  #undef glib_typeof
  #if !defined(__cplusplus) && \
-      ((defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ 
>= 8))) || \
-       defined(__clang__))
+      ((defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ 
>= 8))) || \
+       defined(__clang__))
  #define glib_typeof(t) __typeof__ (t)
  #elif defined(__cplusplus) && __cplusplus >= 201103L
  /* C++11 decltype() is close enough for our usage */
  #include <type_traits>                         <--- THIS IS WHAT BREAKS US
  #define glib_typeof(t) typename std::remove_reference<decltype (t)>::type
  #define glib_typeof_2_68
  #endif
  
  On the glib side this is due to:
  https://gitlab.gnome.org/GNOME/glib/-/issues/2331
  Also related:
  https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1935
  
https://lists.fedoraproject.org/archives/list/de...@lists.fedoraproject.org/thread/J3P4TRHLWNDIKXF76OLYZNAPTABCZ3U5/#7LXFUDBBBIT23FE44QJYWX3I7U4EHW6M
  
  Qemu try to fix/discussion at:
  https://lists.gnu.org/archive/html/qemu-devel/2021-02/msg07294.html
  This won't be the final solution, but it gets things going for the time being.
+ 
+ glib try to fix (also seems not to be ok for upstream, but would get 
everything going for now). Thanks Laney btw:
+ 
https://gitlab.gnome.org/iainl/glib/-/commit/b865b76c01a35fb8dbffb9bc2907acf341a31aba

** Changed in: qemu (Ubuntu)
       Status: New => Triaged

-- 
You received this bug notification because you are a member of Ubuntu
Desktop Bugs, which is subscribed to glib2.0 in Ubuntu.
https://bugs.launchpad.net/bugs/1916705

Title:
  glib2.0 >=2.67.3 breaks include from an extern C context

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/glib2.0/+bug/1916705/+subscriptions

-- 
desktop-bugs mailing list
desktop-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/desktop-bugs

Reply via email to