Subject: bug#74455: gcc-toolchain and gfortran-toolchain conflict

From: Laurent Gatto <[email-masked]>
Date: Thu, 21 Nov 2024 08:57:55 +0100

Here's a simple C++ chunk

```
$ cat main.cpp
#include <iostream>

int main(void) {
    std::cout << __cplusplus;

    return 0;
}
```

that compiles as expected, with the latest gcc version

```
$ guix shell --container gcc-toolchain
The following derivation will be built:
  /gnu/store/bvgndd1r6171zly7ir7fzlpygb1ka7b3-profile.drv

listing Emacs sub-directories...
building profile with 1 package...
[env]$ g++ main.cpp
[env]$ gcc --version
gcc (GCC) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

I'm using the following generation

```
$ guix describe
Generation 70    Nov 20 2024 00:02:35    (current)
[...]
  guix 1e6d1c3
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: 1e6d1c32117e9f731e50dcd286927a5fa0d17afc
```

This still works if I add gfortran-toolchain *before* gcc-toolchaine

```
$ guix shell --container gfortran-toolchain  gcc-toolchain
The following derivation will be built:
  /gnu/store/48ryz9p3sc2qmv9xv2s4s032g1bdkxgr-profile.drv

listing Emacs sub-directories...
building profile with 2 packages...
[env]$ g++ main.cpp
```

But fails I add gfortran-toolchain *after* gcc-toolchaine

```
$ guix shell --container gcc-toolchain gfortran-toolchain
The following derivation will be built:
  /gnu/store/4ff7am6zjplhi1p9lin09nbqzk30rijn-profile.drv

listing Emacs sub-directories...
building profile with 2 packages...
$ $ g++ main.cpp
In file included from
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/bits/move.h:57,
                 from
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/bits/exception_ptr.h:43,
                 from
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/exception:153,
                 from
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/ios:39,
                 from
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/ostream:38,
                 from
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/iostream:39,
                 from main.cpp:1:
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/type_traits:732:26:
error: expected identifier before '(' token
  732 |     _GLIBCXX20_DEPRECATED("use is_standard_layout &&
is_trivial instead")
      |                          ^
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/type_traits:732:27:
error: expected unqualified-id before string constant
  732 |     _GLIBCXX20_DEPRECATED("use is_standard_layout &&
is_trivial instead")
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/type_traits:732:27:
error: expected ')' before string constant
  732 |     _GLIBCXX20_DEPRECATED("use is_standard_layout &&
is_trivial instead")
      |                          ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                           )
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/type_traits:3154:25:
error: expected unqualified-id before string constant
 3154 |   _GLIBCXX20_DEPRECATED("use is_standard_layout_v &&
is_trivial_v instead")
      |
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/gnu/store/hhzpa2yx8cz92cgm7xjpd2pp6pk74g96-profile/include/c++/type_traits:3154:25:
error: expected ')' before string constant
 3154 |   _GLIBCXX20_DEPRECATED("use is_standard_layout_v &&
is_trivial_v instead")
      |
~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                         )
```

The discussion on help-guix that led to this is available here
[1]. Don't hesitate to get back to me for more details.

Laurent

[1] https://lists.gnu.org/archive/html/help-guix/2024-11/msg00066.html