Subject: bug#49600: [core-updates] gcc-11 fails to cross-compile from x86_64-linux

From: Thiago Jung Bauermann <[email-masked]>
Date: Fri, 16 Jul 2021 21:04:24 -0300

Hello,

On core-updates (at least as of commit 8456581375cf), the gcc package fails 
to cross-compile. This can be seen in the following CI jobs:

• https://ci.guix.gnu.org/build/667365/details
  gcc-11.1.0, arm-linux-gnueabihf.gcc.x86_64-linux
• https://ci.guix.gnu.org/build/667394/details
  gcc-11.1.0, aarch64-linux-gnu.gcc.x86_64-linux
• https://ci.guix.gnu.org/build/667452/details
  gcc-11.1.0, powerpc64le-linux-gnu.gcc.x86_64-linux
• https://ci.guix.gnu.org/build/667481/details
  gcc-11.1.0, riscv64-linux-gnu.gcc.x86_64-linux
• https://ci.guix.gnu.org/build/667336/details
  gcc-11.1.0, mips64el-linux-gnu.gcc.x86_64-linux
• https://ci.guix.gnu.org/build/667423/details
  gcc-11.1.0, powerpc-linux-gnu.gcc.x86_64-linux

They all fail with a similar error:

--8<---------------cut here---------------start------------->8---
    ⋮
In file included from /tmp/guix-build-gcc-11.1.0.drv-0/build/arm-linux-gnueabihf/libstdc++-v3/include/bits/move.h:57,
                 from /tmp/guix-build-gcc-11.1.0.drv-0/build/arm-linux-gnueabihf/libstdc++-v3/include/bits/nested_exception.h:40,
                 from ../../../../gcc-11.1.0/libstdc++-v3/libsupc++/exception:148,
                 from ../../../../gcc-11.1.0/libstdc++-v3/libsupc++/eh_exception.cc:26:
/tmp/guix-build-gcc-11.1.0.drv-0/build/arm-linux-gnueabihf/libstdc++-v3/include/type_traits:971:25: error: there are no arguments to ?__is_nothrow_constructible? that depend on a template parameter, so a declaration of ?__is_nothrow_constructible? must be available [-fpermissive]
  971 |       = __bool_constant<__is_nothrow_constructible(_Tp, _Args...)>;
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~
/tmp/guix-build-gcc-11.1.0.drv-0/build/arm-linux-gnueabihf/libstdc++-v3/include/type_traits:971:25: note: (if you use ?-fpermissive?, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/tmp/guix-build-gcc-11.1.0.drv-0/build/arm-linux-gnueabihf/libstdc++-v3/include/type_traits:971:66: error: template argument 1 is invalid
  971 |       = __bool_constant<__is_nothrow_constructible(_Tp, _Args...)>;
      |                                                                  ^
/tmp/guix-build-gcc-11.1.0.drv-0/build/arm-linux-gnueabihf/libstdc++-v3/include/type_traits:976:45: error: expected template-name before ?<? token
  976 |     : public __is_nothrow_constructible_impl<_Tp, _Args...>::type
      |                                             ^
/tmp/guix-build-gcc-11.1.0.drv-0/build/arm-linux-gnueabihf/libstdc++-v3/include/type_traits:976:45: error: expected ?{? before ?<? token
    ⋮
--8<---------------cut here---------------end--------------->8---

In addition to that, arm-linux-gnueabihf.gcc.x86_64-linux has the following
error which doesn’t appear on the other arches:

no include path in which to search for stdc-predef.h

As a side note, gcc-11.1.0 also fails to build on
i586-pc-gnu.gcc.x86_64-linux¹, but with a very different error message,
so it appears to be an unrelated problem.

gcc-8.5.0 also fails to cross-compile on several arches, but with a
different error message as well, so it also appears to be a separate
problem.

-- 
Thanks,
Thiago

¹ https://ci.guix.gnu.org/build/667510/details