janneke pushed a commit to branch core-packages-team
in repository guix.

commit 6b84fad984a573913cd0e6bc686a9cb7d5d0083b
Author: Janneke Nieuwenhuizen <[email protected]>
AuthorDate: Sun Dec 15 22:41:51 2024 +0100

    gnu: gcc: Fix build with gcc-14.
    
    This avoids
    
        libstdc++-v3/src/c++98/compatibility.cc:392:4: error: ‘void 
{anonymous}::_Y_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi(...)’ aliased 
to undefined symbol ‘_ZNSt13basic_istreamIwSt11char_traitsIwEE8ignoreXXEi’
          392 |    _Y##name(...) \
              |    ^~
        ../../../../gcc-11.4.0/libstdc++-v3/src/c++98/compatibility.cc:403:31: 
note: in expansion of macro ‘_GLIBCXX_3_4_5_SYMVER’
          403 | #define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_5_SYMVER
              |                               ^~~~~~~~~~~~~~~~~~~~~
       .../include/x86_64-unknown-linux-gnu/bits/compatibility.h:196:1: note: 
in expansion of macro ‘_GLIBCXX_APPLY_SYMVER’
          196 | 
_GLIBCXX_APPLY_SYMVER(_ZNSt13basic_istreamIwSt11char_traitsIwEE8ignoreXXEi,
              | ^~~~~~~~~~~~~~~
    
    for (at least 5.5 <= gcc  < 14.2
    
    * gnu/packages/patches/gcc-build-with-gcc-14.patch: New file.
    * gnu/local.mk (dist_patch_DATA): Register it.
    * gnu/packages/gcc.scm (gcc-4.8, gcc-4.9, gcc-5, gcc-6, gcc-7, gcc-8, gcc-9,
    gcc-10, gcc-11, gcc-12, gcc-13): Use it.
    (gcc-4.7)[arguments]: In stage "relax-gcc-14s-strictness", make wrapper 
relax
    gcc-14's strictness further, for (at least) 8 < gcc < 14.
    
    Change-Id: I57b0ab94e733ab9eb2ad226b5fcbc951860a48c3
---
 gnu/local.mk                                     |  1 +
 gnu/packages/gcc.scm                             | 39 ++++++++++++------
 gnu/packages/patches/gcc-build-with-gcc-14.patch | 50 ++++++++++++++++++++++++
 3 files changed, 77 insertions(+), 13 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index 55cd6f42c6..d95490ceb3 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1326,6 +1326,7 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/gcc-cross-environment-variables.patch   \
   %D%/packages/patches/gcc-cross-gxx-include-dir.patch          \
   %D%/packages/patches/gcc-fix-texi2pod.patch                  \
+  %D%/packages/patches/gcc-build-with-gcc-14.patch             \
   %D%/packages/patches/gcc-4.8-libsanitizer-fix.patch          \
   %D%/packages/patches/gcc-4.9-inline.patch            \
   %D%/packages/patches/gcc-4.9-libsanitizer-fix.patch          \
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 35e8264822..d1daa4bc36 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -248,7 +248,8 @@ where the OS part is overloaded to denote a specific 
ABI---into GCC
                       (format #t "#! ~a/bin/bash
 exec gcc \"$@\" \
     -Wno-error \
-    -Wno-error=implicit-function-declaration"
+    -Wno-error=implicit-function-declaration
+    -Wno-error=incompatible-pointer-types"
                               bash)))
                   (chmod wrapper #o555)
                   (with-output-to-file stage-wrapper
@@ -256,7 +257,8 @@ exec gcc \"$@\" \
                       (format #t "#! ~a/bin/bash
 exec \"$@\" \
     -Wno-error \
-    -Wno-error=implicit-function-declaration"
+    -Wno-error=implicit-function-declaration
+    -Wno-error=incompatible-pointer-types"
                               bash)))
                   (chmod stage-wrapper #o555)
                   ;; Rather than adding CC to #:configure-flags and
@@ -426,7 +428,8 @@ Go.  It also includes runtime support libraries for these 
languages.")
               (patches (search-patches "gcc-arm-link-spec-fix.patch"
                                        "gcc-4.8-libsanitizer-fix.patch"
                                        "gcc-asan-missing-include.patch"
-                                       "gcc-fix-texi2pod.patch"))
+                                       "gcc-fix-texi2pod.patch"
+                                       "gcc-build-with-gcc-14.patch"))
               (modules '((guix build utils)))
               ;; This is required for building with glibc-2.26.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
@@ -490,7 +493,8 @@ Go.  It also includes runtime support libraries for these 
languages.")
                                        "gcc-arm-bug-71399.patch"
                                        "gcc-asan-missing-include.patch"
                                        "gcc-libvtv-runpath.patch"
-                                       "gcc-fix-texi2pod.patch"))
+                                       "gcc-fix-texi2pod.patch"
+                                       "gcc-build-with-gcc-14.patch"))
               (modules '((guix build utils)))
               ;; This is required for building with glibc-2.26.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
@@ -543,7 +547,8 @@ Go.  It also includes runtime support libraries for these 
languages.")
                                        "gcc-fix-texi2pod.patch"
                                        "gcc-5-hurd.patch"
                                        ;; See 
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86162
-                                       "gcc-5-fix-powerpc64le-build.patch"))
+                                       "gcc-5-fix-powerpc64le-build.patch"
+                                       "gcc-build-with-gcc-14.patch"))
               (modules '((guix build utils)))
               (snippet gcc-canadian-cross-objdump-snippet)))
     (inputs
@@ -567,7 +572,8 @@ Go.  It also includes runtime support libraries for these 
languages.")
                                        "gcc-6-libsanitizer-mode-size.patch"
                                        "gcc-6-source-date-epoch-1.patch"
                                        "gcc-6-source-date-epoch-2.patch"
-                                       "gcc-5.0-libvtv-runpath.patch"))))
+                                       "gcc-5.0-libvtv-runpath.patch"
+                                       "gcc-build-with-gcc-14.patch"))))
 
     ;; GCC 4.9 and 5 has a workaround that is not needed for GCC 6 and later.
     (arguments (package-arguments gcc-4.7))
@@ -692,7 +698,8 @@ Go.  It also includes runtime support libraries for these 
languages.")
               (patches (search-patches "gcc-strmov-store-file-names.patch"
                                        "gcc-7-libsanitizer-mode-size.patch"
                                        
"gcc-7-libsanitizer-fsconfig-command.patch"
-                                       "gcc-5.0-libvtv-runpath.patch"))))
+                                       "gcc-5.0-libvtv-runpath.patch"
+                                       "gcc-build-with-gcc-14.patch"))))
     (description
      "GCC is the GNU Compiler Collection.  It provides compiler front-ends
 for several languages, including C, C++, Objective-C, Fortran, Ada, and Go.
@@ -719,7 +726,8 @@ It also includes runtime support libraries for these 
languages.")
               (patches (search-patches "gcc-8-strmov-store-file-names.patch"
                                        
"gcc-7-libsanitizer-fsconfig-command.patch"
                                        "gcc-5.0-libvtv-runpath.patch"
-                                       "gcc-8-sort-libtool-find-output.patch"))
+                                       "gcc-8-sort-libtool-find-output.patch"
+                                       "gcc-build-with-gcc-14.patch"))
               (modules '((guix build utils)))
               (snippet gcc-canadian-cross-objdump-snippet)))))
 
@@ -739,7 +747,8 @@ It also includes runtime support libraries for these 
languages.")
                                      
"gcc-13.2.0-libstdc++-info-install-fix.patch"
                                      "gcc-9-strmov-store-file-names.patch"
                                      "gcc-9-asan-fix-limits-include.patch"
-                                     "gcc-5.0-libvtv-runpath.patch"))
+                                     "gcc-5.0-libvtv-runpath.patch"
+                                     "gcc-build-with-gcc-14.patch"))
             (modules '((guix build utils)))
             (snippet gcc-canadian-cross-objdump-snippet)))))
 
@@ -756,7 +765,8 @@ It also includes runtime support libraries for these 
languages.")
               "1h87lcfaga0ydsf4pkhwlnjr8mky5ix8npbv6iy3jvzlzm1ra415"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
                                      "gcc-5.0-libvtv-runpath.patch"
-                                     "gcc-10-libsanitizer-no-crypt.patch"))
+                                     "gcc-10-libsanitizer-no-crypt.patch"
+                                     "gcc-build-with-gcc-14.patch"))
             (modules '((guix build utils)))
             (snippet gcc-canadian-cross-objdump-snippet)))
    (properties
@@ -782,7 +792,8 @@ It also includes runtime support libraries for these 
languages.")
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
                                      "gcc-5.0-libvtv-runpath.patch"
                                      "gcc-10-libsanitizer-no-crypt.patch"
-                                     "gcc-11-libstdc++-hurd-libpthread.patch"))
+                                     "gcc-11-libstdc++-hurd-libpthread.patch"
+                                     "gcc-build-with-gcc-14.patch"))
             (modules '((guix build utils)))
             (snippet gcc-canadian-cross-objdump-snippet)))
    (properties
@@ -808,7 +819,8 @@ It also includes runtime support libraries for these 
languages.")
               (patches (search-patches "gcc-12-strmov-store-file-names.patch"
                                        "gcc-5.0-libvtv-runpath.patch"
                                        "gcc-12-libsanitizer-no-crypt.patch"
-                                       
"gcc-11-libstdc++-hurd-libpthread.patch"))
+                                       "gcc-11-libstdc++-hurd-libpthread.patch"
+                                       "gcc-build-with-gcc-14.patch"))
               (modules '((guix build utils)))
               (snippet gcc-canadian-cross-objdump-snippet)))
    (properties
@@ -833,7 +845,8 @@ It also includes runtime support libraries for these 
languages.")
                 "10y0l1hx1haz4cj4d4g9f2ci5h7z9555i52f90zs2hwm3iifji88"))
               (patches (search-patches "gcc-12-strmov-store-file-names.patch"
                                        "gcc-5.0-libvtv-runpath.patch"
-                                       "gcc-13-libsanitizer-no-crypt.patch"))
+                                       "gcc-13-libsanitizer-no-crypt.patch"
+                                       "gcc-build-with-gcc-14.patch"))
               (modules '((guix build utils)))
               (snippet gcc-canadian-cross-objdump-snippet)))
     (arguments
diff --git a/gnu/packages/patches/gcc-build-with-gcc-14.patch 
b/gnu/packages/patches/gcc-build-with-gcc-14.patch
new file mode 100644
index 0000000000..8c55e4250e
--- /dev/null
+++ b/gnu/packages/patches/gcc-build-with-gcc-14.patch
@@ -0,0 +1,50 @@
+From 5816810bf835a2e404f8ff2836b5cd1202e3e7e1 Mon Sep 17 00:00:00 2001
+From: Janneke Nieuwenhuizen <[email protected]>
+Date: Sun, 15 Dec 2024 19:33:53 +0100
+Subject: [PATCH] Fix build with gcc-14.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This avoids
+
+    libstdc++-v3/src/c++98/compatibility.cc:392:4: error: ‘void 
{anonymous}::_Y_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi(...)’ aliased 
to undefined symbol ‘_ZNSt13basic_istreamIwSt11char_traitsIwEE8ignoreXXEi’
+      392 |    _Y##name(...) \
+          |    ^~
+    ../../../../gcc-11.4.0/libstdc++-v3/src/c++98/compatibility.cc:403:31: 
note: in expansion of macro ‘_GLIBCXX_3_4_5_SYMVER’
+      403 | #define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_5_SYMVER
+          |                               ^~~~~~~~~~~~~~~~~~~~~
+   .../include/x86_64-unknown-linux-gnu/bits/compatibility.h:196:1: note: in 
expansion of macro ‘_GLIBCXX_APPLY_SYMVER’
+      196 | 
_GLIBCXX_APPLY_SYMVER(_ZNSt13basic_istreamIwSt11char_traitsIwEE8ignoreXXEi,
+          | ^~~~~~~~~~~~~~~
+
+* libstdc++-v3/src/c++98/compatibility.cc (_GLIBCXX_APPLY_SYMVER)
+[__GNUC__ >= 14]: Disable.
+---
+ libstdc++-v3/src/c++98/compatibility.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/libstdc++-v3/src/c++98/compatibility.cc 
b/libstdc++-v3/src/c++98/compatibility.cc
+index 5ab8945a474..0e1b226a39f 100644
+--- a/libstdc++-v3/src/c++98/compatibility.cc
++++ b/libstdc++-v3/src/c++98/compatibility.cc
+@@ -380,6 +380,8 @@ _GLIBCXX_END_NAMESPACE_VERSION
+ #define _GLIBCXX_ASM_SYMVER(cur, old, version) \
+    asm (".symver " #cur "," #old "@@" #version);
+ 
++#if 0 // _GLIBCXX_RELEASE < 14 // __GNUC__ < 14 These do not compile with 
gcc-14.2 headers
++// These do not compile with gcc-14.2
+ #define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_SYMVER
+ #include <bits/compatibility.h>
+ #undef _GLIBCXX_APPLY_SYMVER
+@@ -387,6 +389,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
+ #define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_5_SYMVER
+ #include <bits/compatibility.h>
+ #undef _GLIBCXX_APPLY_SYMVER
++#endif
+ 
+ 
+ /* gcc-3.4.0
+-- 
+2.46.0
+

Reply via email to