diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index fc1c508b38..c4b50ec2c4 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -2259,13 +2259,13 @@ (define libstdc++-boot0
              ((or "i686-linux" "x86_64-linux")
               (substitute-keyword-arguments (package-arguments lib)
                 ((#:phases phases)
-                 `(modify-phases ,phases
-                    (add-after 'unpack 'workaround-wrapper-bug
-                      ;; XXX: The crude gcc-cross-wrapper causes "g++ -v" to
-                      ;; fail, which in turn confuses the configure script.
-                      (lambda _
-                        (substitute* "libstdc++-v3/configure"
-                          (("g\\+\\+ -v") "true"))))))))
+                 #~(modify-phases #$phases
+                     (add-after 'unpack 'workaround-wrapper-bug
+                       ;; XXX: The crude gcc-cross-wrapper causes "g++ -v" to
+                       ;; fail, which in turn confuses the configure script.
+                       (lambda _
+                         (substitute* "libstdc++-v3/configure"
+                           (("g\\+\\+ -v") "true"))))))))
              (_ (package-arguments lib)))
 
          ;; Explicitly add #:modules so MAKE-LIBSTDC++ can be changed
@@ -2292,28 +2292,28 @@ (define libstdc++-boot0-gcc7
 
          ,@(substitute-keyword-arguments (package-arguments lib)
              ((#:phases phases)
-              `(modify-phases ,phases
-                 (add-after 'unpack 'unpack-gmp&co
-                   (lambda* (#:key inputs #:allow-other-keys)
-                     (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
-                           (mpfr (assoc-ref %build-inputs "mpfr-source"))
-                           (mpc  (assoc-ref %build-inputs "mpc-source")))
-
-                       ;; To reduce the set of pre-built bootstrap inputs, build
-                       ;; GMP & co. from GCC.
-                       (for-each (lambda (source)
-                                   (invoke "tar" "xvf" source))
-                                 (list gmp mpfr mpc))
-
-                       ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
-                       ,@(map (lambda (lib)
-                                ;; Drop trailing letters, as gmp-6.0.0a unpacks
-                                ;; into gmp-6.0.0.
-                                `(symlink ,(string-trim-right
-                                            (package-full-name lib "-")
-                                            char-set:letter)
-                                          ,(package-name lib)))
-                              (list gmp-6.0 mpfr mpc))))))))))
+              #~(modify-phases #$phases
+                  (add-after 'unpack 'unpack-gmp&co
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
+                            (mpfr (assoc-ref %build-inputs "mpfr-source"))
+                            (mpc  (assoc-ref %build-inputs "mpc-source")))
+
+                        ;; To reduce the set of pre-built bootstrap inputs, build
+                        ;; GMP & co. from GCC.
+                        (for-each (lambda (source)
+                                    (invoke "tar" "xvf" source))
+                                  (list gmp mpfr mpc))
+
+                        ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+                        #$@(map (lambda (lib)
+                                  ;; Drop trailing letters, as gmp-6.0.0a unpacks
+                                  ;; into gmp-6.0.0.
+                                  #~(symlink #$(string-trim-right
+                                                (package-full-name lib "-")
+                                                char-set:letter)
+                                             #$(package-name lib)))
+                                (list gmp-6.0 mpfr mpc))))))))))
       (inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
                 ("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
                 ("mpc-source" ,(bootstrap-origin (package-source mpc)))
@@ -2338,81 +2338,82 @@ (define gcc-boot0
              (system* #$(file-append coreutils-boot0 "/bin/rm") "-rf"
                       "gcc/testsuite/go.test/test/fixedbugs/issue27836.dir"))))))
     (arguments
-     `(#:guile ,%bootstrap-guile
-       #:implicit-inputs? #f
-       #:modules ((guix build gnu-build-system)
+     (cons*
+      #:guile %bootstrap-guile
+      #:implicit-inputs? #f
+      #:modules '((guix build gnu-build-system)
                   (guix build utils)
                   (ice-9 regex)
                   (srfi srfi-1)
                   (srfi srfi-26))
-       ,@(substitute-keyword-arguments (package-arguments gcc)
-           ((#:configure-flags flags)
-            `(append (list ,(string-append "--target=" (boot-triplet))
-
-                           ;; No libc yet.
-                           "--without-headers"
-
-                           ;; Disable features not needed at this stage.
-                           "--disable-shared"
-                           "--enable-languages=c,c++"
-
-                           ;; libstdc++ cannot be built at this stage
-                           ;; ("Link tests are not allowed after
-                           ;; GCC_NO_EXECUTABLES.").
-                           "--disable-libstdc++-v3"
-
-                           "--disable-threads"
-                           "--disable-libmudflap"
-                           "--disable-libatomic"
-                           "--disable-libsanitizer"
-                           "--disable-libitm"
-                           "--disable-libgomp"
-                           "--disable-libmpx"
-                           "--disable-libcilkrts"
-                           "--disable-libvtv"
-                           "--disable-libssp"
-                           "--disable-libquadmath"
-                           "--disable-decimal-float")
-                     (remove (cut string-match
-                               "--(with-system-zlib|enable-languages.*)" <>)
-                             ,flags)))
-           ((#:make-flags flags)
-            `(let* ((libc        (assoc-ref %build-inputs "libc"))
-                    (libc-native (or (assoc-ref %build-inputs "libc-native")
-                                     libc)))
-               `(,(string-append "LDFLAGS="
-                                 "-Wl,-rpath=" libc-native "/lib "
-                                 "-Wl,-dynamic-linker "
-                                 "-Wl," libc-native ,(glibc-dynamic-linker
-                                                      (match (%current-system)
-                                                        ("x86_64-linux" "i686-linux")
-                                                        (_ (%current-system))))))))
-           ((#:phases phases)
-            `(modify-phases ,phases
-               (add-after 'unpack 'unpack-gmp&co
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
-                         (mpfr (assoc-ref %build-inputs "mpfr-source"))
-                         (mpc  (assoc-ref %build-inputs "mpc-source")))
-
-                     ;; To reduce the set of pre-built bootstrap inputs, build
-                     ;; GMP & co. from GCC.
-                     (for-each (lambda (source)
-                                 (invoke "tar" "xvf" source))
-                               (list gmp mpfr mpc))
-
-                     ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
-                     ,@(map (lambda (lib)
-                              ;; Drop trailing letters, as gmp-6.0.0a unpacks
-                              ;; into gmp-6.0.0.
-                              `(symlink ,(string-trim-right
-                                          (package-full-name lib "-")
-                                          char-set:letter)
-                                        ,(package-name lib)))
-                            (list gmp-6.0 mpfr mpc)))))
-               ,(match (%current-system)
-                  ((or "i686-linux" "x86_64-linux")
-                   '(add-before 'configure 'fix-libcc1
+      (substitute-keyword-arguments (package-arguments gcc)
+        ((#:configure-flags flags)
+         #~(append (list #$(string-append "--target=" (boot-triplet))
+
+                         ;; No libc yet.
+                         "--without-headers"
+
+                         ;; Disable features not needed at this stage.
+                         "--disable-shared"
+                         "--enable-languages=c,c++"
+
+                         ;; libstdc++ cannot be built at this stage
+                         ;; ("Link tests are not allowed after
+                         ;; GCC_NO_EXECUTABLES.").
+                         "--disable-libstdc++-v3"
+
+                         "--disable-threads"
+                         "--disable-libmudflap"
+                         "--disable-libatomic"
+                         "--disable-libsanitizer"
+                         "--disable-libitm"
+                         "--disable-libgomp"
+                         "--disable-libmpx"
+                         "--disable-libcilkrts"
+                         "--disable-libvtv"
+                         "--disable-libssp"
+                         "--disable-libquadmath"
+                         "--disable-decimal-float")
+                   (remove (cut string-match
+                                "--(with-system-zlib|enable-languages.*)" <>)
+                           #$flags)))
+        ((#:make-flags flags)
+         `(let* ((libc        (assoc-ref %build-inputs "libc"))
+                 (libc-native (or (assoc-ref %build-inputs "libc-native")
+                                  libc)))
+            `(,(string-append "LDFLAGS="
+                              "-Wl,-rpath=" libc-native "/lib "
+                              "-Wl,-dynamic-linker "
+                              "-Wl," libc-native ,(glibc-dynamic-linker
+                                                   (match (%current-system)
+                                                     ("x86_64-linux" "i686-linux")
+                                                     (_ (%current-system))))))))
+        ((#:phases phases)
+         #~(modify-phases #$phases
+             (add-after 'unpack 'unpack-gmp&co
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
+                       (mpfr (assoc-ref %build-inputs "mpfr-source"))
+                       (mpc  (assoc-ref %build-inputs "mpc-source")))
+
+                   ;; To reduce the set of pre-built bootstrap inputs, build
+                   ;; GMP & co. from GCC.
+                   (for-each (lambda (source)
+                               (invoke "tar" "xvf" source))
+                             (list gmp mpfr mpc))
+
+                   ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+                   #$@(map (lambda (lib)
+                             ;; Drop trailing letters, as gmp-6.0.0a unpacks
+                             ;; into gmp-6.0.0.
+                             #~(symlink #$(string-trim-right
+                                           (package-full-name lib "-")
+                                           char-set:letter)
+                                        #$(package-name lib)))
+                           (list gmp-6.0 mpfr mpc)))))
+             #$(match (%current-system)
+                 ((or "i686-linux" "x86_64-linux")
+                  #~(add-before 'configure 'fix-libcc1
                       (lambda* (#:key inputs #:allow-other-keys)
                         ;; libcc1.so NEEDs libgcc_s.so, so provide one here
                         ;; to placate the 'validate-runpath' phase.
@@ -2423,18 +2424,18 @@ (define gcc-boot0
                         ;; XXX: "g++ -v" is broken (see also libstdc++ above).
                         (substitute* "libcc1/configure"
                           (("g\\+\\+ -v") "true")))))
-                  (_ '(add-before 'configure 'return-true
+                 (_ #~(add-before 'configure 'return-true
                         (lambda _ #t))))
-               (add-after 'install 'symlink-libgcc_eh
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   (let ((out (assoc-ref outputs "lib")))
-                     ;; Glibc wants to link against libgcc_eh, so provide
-                     ;; it.
-                     (with-directory-excursion
-                         (string-append out "/lib/gcc/"
-                                        ,(boot-triplet)
-                                        "/" ,(package-version gcc))
-                       (symlink "libgcc.a" "libgcc_eh.a"))))))))))
+             (add-after 'install 'symlink-libgcc_eh
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "lib")))
+                   ;; Glibc wants to link against libgcc_eh, so provide
+                   ;; it.
+                   (with-directory-excursion
+                       (string-append out "/lib/gcc/"
+                                      #$(boot-triplet)
+                                      "/" #$(package-version gcc))
+                     (symlink "libgcc.a" "libgcc_eh.a"))))))))))
 
     (inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
               ("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
@@ -2888,41 +2889,42 @@ (define (cross-gcc-wrapper gcc binutils glibc bash)
     (build-system trivial-build-system)
     (outputs '("out"))
     (arguments
-     `(#:guile ,%bootstrap-guile
-       #:modules ((guix build utils))
-       #:builder (begin
-                   (use-modules (guix build utils))
-
-                   (let* ((binutils (assoc-ref %build-inputs "binutils"))
-                          (gcc      (assoc-ref %build-inputs "gcc"))
-                          (libc     (assoc-ref %build-inputs "libc"))
-                          (bash     (assoc-ref %build-inputs "bash"))
-                          (out      (assoc-ref %outputs "out"))
-                          (bindir   (string-append out "/bin"))
-                          (triplet  ,(boot-triplet)))
-                     (define (wrap-program program)
-                       ;; GCC-BOOT0 is a libc-less cross-compiler, so it
-                       ;; needs to be told where to find the crt files and
-                       ;; the dynamic linker.
-                       (call-with-output-file program
-                         (lambda (p)
-                           (format p "#!~a/bin/bash
+     (list
+      #:guile %bootstrap-guile
+      #:modules '((guix build utils))
+      #:builder #~(begin
+                    (use-modules (guix build utils))
+
+                    (let* ((binutils (assoc-ref %build-inputs "binutils"))
+                           (gcc      (assoc-ref %build-inputs "gcc"))
+                           (libc     (assoc-ref %build-inputs "libc"))
+                           (bash     (assoc-ref %build-inputs "bash"))
+                           (out      (assoc-ref %outputs "out"))
+                           (bindir   (string-append out "/bin"))
+                           (triplet  #$(boot-triplet)))
+                      (define (wrap-program program)
+                        ;; GCC-BOOT0 is a libc-less cross-compiler, so it
+                        ;; needs to be told where to find the crt files and
+                        ;; the dynamic linker.
+                        (call-with-output-file program
+                          (lambda (p)
+                            (format p "#!~a/bin/bash
 exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
-                                   bash
-                                   gcc triplet program
-                                   libc libc
-                                   ,(glibc-dynamic-linker))))
-
-                       (chmod program #o555))
-
-                     (mkdir-p bindir)
-                     (with-directory-excursion bindir
-                       (for-each (lambda (tool)
-                                   (symlink (string-append binutils "/bin/"
-                                                           triplet "-" tool)
-                                            tool))
-                                 '("ar" "ranlib"))
-                       (for-each wrap-program '("gcc" "g++")))))))
+                                    bash
+                                    gcc triplet program
+                                    libc libc
+                                    #$(glibc-dynamic-linker))))
+
+                        (chmod program #o555))
+
+                      (mkdir-p bindir)
+                      (with-directory-excursion bindir
+                        (for-each (lambda (tool)
+                                    (symlink (string-append binutils "/bin/"
+                                                            triplet "-" tool)
+                                             tool))
+                                  '("ar" "ranlib"))
+                        (for-each wrap-program '("gcc" "g++")))))))
     (native-inputs
      `(("binutils" ,binutils)
        ("gcc" ,gcc)
@@ -3122,79 +3124,80 @@ (define gcc-final
     (outputs (delete "debug" (package-outputs gcc-boot0)))
 
     (arguments
-     `(#:guile ,%bootstrap-guile
-       #:implicit-inputs? #f
+     (cons*
+      #:guile %bootstrap-guile
+      #:implicit-inputs? #f
 
-       #:allowed-references ("out" "lib" ,zlib-final
+      #:allowed-references `("out" "lib" ,zlib-final
                              ,glibc-final ,static-bash-for-glibc)
 
-       ;; Things like libasan.so and libstdc++.so NEED ld.so for some
-       ;; reason, but it is not in their RUNPATH.  This is a false
-       ;; positive, so turn it off.
-       #:validate-runpath? #f
+      ;; Things like libasan.so and libstdc++.so NEED ld.so for some
+      ;; reason, but it is not in their RUNPATH.  This is a false
+      ;; positive, so turn it off.
+      #:validate-runpath? #f
 
-       ;; Additional modules for the libstdc++ phase below.
-       #:modules ((srfi srfi-1)
+      ;; Additional modules for the libstdc++ phase below.
+      #:modules `((srfi srfi-1)
                   (srfi srfi-26)
                   ,@%gnu-build-system-modules)
 
-       ,@(substitute-keyword-arguments (package-arguments gcc)
-           ((#:make-flags flags)
-            ;; Since $LIBRARY_PATH is not honored, add the relevant flags.
-            `(let ((zlib (assoc-ref %build-inputs "zlib")))
-               (map (lambda (flag)
-                      (if (string-prefix? "LDFLAGS=" flag)
-                          (string-append flag " -L"
-                                         (assoc-ref %build-inputs "libstdc++")
-                                         "/lib -L" zlib "/lib -Wl,-rpath="
-                                         zlib "/lib")
-                          flag))
-                    ,flags)))
-           ;; Build again GMP & co. within GCC's build process, because it's hard
-           ;; to do outside (because GCC-BOOT0 is a cross-compiler, and thus
-           ;; doesn't honor $LIBRARY_PATH, which breaks `gnu-build-system'.)
-           ((#:phases phases)
-            `(modify-phases ,phases
-                (add-after 'unpack 'unpack-gmp&co
-                  (lambda* (#:key inputs #:allow-other-keys)
-                    (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
-                          (mpfr (assoc-ref %build-inputs "mpfr-source"))
-                          (mpc  (assoc-ref %build-inputs "mpc-source")))
-
-                      ;; To reduce the set of pre-built bootstrap inputs, build
-                      ;; GMP & co. from GCC.
-                      (for-each (lambda (source)
-                                  (invoke "tar" "xvf" source))
-                                (list gmp mpfr mpc))
-
-                      ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
-                      ,@(map (lambda (lib)
-                               ;; Drop trailing letters, as gmp-6.0.0a unpacks
-                               ;; into gmp-6.0.0.
-                               `(symlink ,(string-trim-right
+      (substitute-keyword-arguments (package-arguments gcc)
+        ((#:make-flags flags)
+         ;; Since $LIBRARY_PATH is not honored, add the relevant flags.
+         #~(let ((zlib (assoc-ref %build-inputs "zlib")))
+             (map (lambda (flag)
+                    (if (string-prefix? "LDFLAGS=" flag)
+                        (string-append flag " -L"
+                                       (assoc-ref %build-inputs "libstdc++")
+                                       "/lib -L" zlib "/lib -Wl,-rpath="
+                                       zlib "/lib")
+                        flag))
+                  #$flags)))
+        ;; Build again GMP & co. within GCC's build process, because it's hard
+        ;; to do outside (because GCC-BOOT0 is a cross-compiler, and thus
+        ;; doesn't honor $LIBRARY_PATH, which breaks `gnu-build-system'.)
+        ((#:phases phases)
+         #~(modify-phases #$phases
+             (add-after 'unpack 'unpack-gmp&co
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
+                       (mpfr (assoc-ref %build-inputs "mpfr-source"))
+                       (mpc  (assoc-ref %build-inputs "mpc-source")))
+
+                   ;; To reduce the set of pre-built bootstrap inputs, build
+                   ;; GMP & co. from GCC.
+                   (for-each (lambda (source)
+                               (invoke "tar" "xvf" source))
+                             (list gmp mpfr mpc))
+
+                   ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+                   #$@(map (lambda (lib)
+                             ;; Drop trailing letters, as gmp-6.0.0a unpacks
+                             ;; into gmp-6.0.0.
+                             #~(symlink #$(string-trim-right
                                            (package-full-name lib "-")
                                            char-set:letter)
-                                         ,(package-name lib)))
-                             (list gmp-6.0 mpfr mpc)))))
-                (add-after 'unpack 'fix-build-with-external-libstdc++
-                  (lambda* (#:key inputs #:allow-other-keys)
-                    (let ((libstdc++ (assoc-ref inputs "libstdc++")))
-                      ;; Fix a regression in GCC 11 where the libstc++ input
-                      ;; shadows glibc headers when building libstdc++.  An
-                      ;; upstream fix was added in GCC 11.3.0, but it only
-                      ;; hides system include directories, not those on
-                      ;; CPLUS_INCLUDE_PATH.  See discussion at
-                      ;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100017>.
-                      (substitute* "libstdc++-v3/src/c++17/Makefile.in"
-                        (("AM_CXXFLAGS = ")
-                         (string-append "CPLUS_INCLUDE_PATH = "
-                                        (string-join
-                                         (remove (cut string-prefix? libstdc++ <>)
-                                                 (string-split
-                                                  (getenv "CPLUS_INCLUDE_PATH")
-                                                  #\:))
-                                         ":")
-                                        "\nAM_CXXFLAGS = ")))))))))))
+                                        #$(package-name lib)))
+                           (list gmp-6.0 mpfr mpc)))))
+             (add-after 'unpack 'fix-build-with-external-libstdc++
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let ((libstdc++ (assoc-ref inputs "libstdc++")))
+                   ;; Fix a regression in GCC 11 where the libstc++ input
+                   ;; shadows glibc headers when building libstdc++.  An
+                   ;; upstream fix was added in GCC 11.3.0, but it only
+                   ;; hides system include directories, not those on
+                   ;; CPLUS_INCLUDE_PATH.  See discussion at
+                   ;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100017>.
+                   (substitute* "libstdc++-v3/src/c++17/Makefile.in"
+                     (("AM_CXXFLAGS = ")
+                      (string-append "CPLUS_INCLUDE_PATH = "
+                                     (string-join
+                                      (remove (cut string-prefix? libstdc++ <>)
+                                              (string-split
+                                               (getenv "CPLUS_INCLUDE_PATH")
+                                               #\:))
+                                      ":")
+                                     "\nAM_CXXFLAGS = ")))))))))))
 
     ;; This time we want Texinfo, so we get the manual.  Add
     ;; STATIC-BASH-FOR-GLIBC so that it's used in the final shebangs of
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index fade5bb64b..d1c79b8dc2 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -864,62 +864,63 @@ (define-public (make-libstdc++ gcc)
     (inherit gcc)
     (name "libstdc++")
     (arguments
-     `(#:out-of-source? #t
-       #:modules ((srfi srfi-1)
+     (list
+      #:out-of-source? #t
+      #:modules `((srfi srfi-1)
                   (srfi srfi-26)
                   ,@%gnu-build-system-modules)
-       #:phases
-       (modify-phases %standard-phases
-         ,@(if (version>=? (package-version gcc) "11")
-               `((add-after 'unpack 'hide-gcc-headers
-                   (lambda* (#:key native-inputs inputs #:allow-other-keys)
-                     (let ((gcc (assoc-ref (or native-inputs inputs)
-                                           ,(if (%current-target-system)
-                                                "cross-gcc"
-                                                "gcc"))))
-                       ;; Fix a regression in GCC 11 where the GCC headers
-                       ;; shadows glibc headers when building libstdc++.  An
-                       ;; upstream fix was added in GCC 11.3.0, but it only
-                       ;; hides system include directories, not those on
-                       ;; CPLUS_INCLUDE_PATH.  See discussion at
-                       ;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100017>
-                       ;; and the similar adjustment in GCC-FINAL.
-                       (substitute* "libstdc++-v3/src/c++17/Makefile.in"
-                         (("AM_CXXFLAGS = ")
-                          (string-append ,(if (%current-target-system)
-                                              "CROSS_CPLUS_INCLUDE_PATH = "
-                                              "CPLUS_INCLUDE_PATH = ")
-                                         (string-join
-                                          (remove (cut string-prefix? gcc <>)
-                                                  (string-split
-                                                   (getenv
-                                                    ,(if (%current-target-system)
-                                                         "CROSS_CPLUS_INCLUDE_PATH"
-                                                         "CPLUS_INCLUDE_PATH"))
-                                                   #\:))
-                                          ":")
-                                         "\nAM_CXXFLAGS = ")))))))
-               '())
-         ,@(let ((version (package-version gcc)))
-                (if (and (target-ppc64le?)
-                    (version>=? version "11")
-                    (not (version>=? version "12")))
-               `((add-after 'unpack 'patch-powerpc
-                   (lambda* (#:key inputs #:allow-other-keys)
-                     (invoke "patch" "--force" "-p1" "-i"
-                             (assoc-ref inputs "powerpc64le-patch")))))
-               '()))
-         ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
-         (add-before 'chdir 'fix-rs6000-libdir
-           (lambda _
-             (when (file-exists? "gcc/config/rs6000")
-               (substitute* (find-files "gcc/config/rs6000")
-                 (("/lib64") "/lib")))))
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "libstdc++-v3"))))
-
-       #:configure-flags `("--disable-libstdcxx-pch"
+      #:phases
+      #~(modify-phases %standard-phases
+          #$@(if (version>=? (package-version gcc) "11")
+                 #~((add-after 'unpack 'hide-gcc-headers
+                      (lambda* (#:key native-inputs inputs #:allow-other-keys)
+                        (let ((gcc (assoc-ref (or native-inputs inputs)
+                                              #$(if (%current-target-system)
+                                                    "cross-gcc"
+                                                    "gcc"))))
+                          ;; Fix a regression in GCC 11 where the GCC headers
+                          ;; shadows glibc headers when building libstdc++.  An
+                          ;; upstream fix was added in GCC 11.3.0, but it only
+                          ;; hides system include directories, not those on
+                          ;; CPLUS_INCLUDE_PATH.  See discussion at
+                          ;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100017>
+                          ;; and the similar adjustment in GCC-FINAL.
+                          (substitute* "libstdc++-v3/src/c++17/Makefile.in"
+                            (("AM_CXXFLAGS = ")
+                             (string-append #$(if (%current-target-system)
+                                                  "CROSS_CPLUS_INCLUDE_PATH = "
+                                                  "CPLUS_INCLUDE_PATH = ")
+                                            (string-join
+                                             (remove (cut string-prefix? gcc <>)
+                                                     (string-split
+                                                      (getenv
+                                                       #$(if (%current-target-system)
+                                                             "CROSS_CPLUS_INCLUDE_PATH"
+                                                             "CPLUS_INCLUDE_PATH"))
+                                                      #\:))
+                                             ":")
+                                            "\nAM_CXXFLAGS = ")))))))
+                 '())
+          #$@(let ((version (package-version gcc)))
+               (if (and (target-ppc64le?)
+                       (version>=? version "11")
+                       (not (version>=? version "12")))
+                   #~((add-after 'unpack 'patch-powerpc
+                        (lambda* (#:key inputs #:allow-other-keys)
+                          (invoke "patch" "--force" "-p1" "-i"
+                                  (assoc-ref inputs "powerpc64le-patch")))))
+                   '()))
+          ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
+          (add-before 'chdir 'fix-rs6000-libdir
+            (lambda _
+              (when (file-exists? "gcc/config/rs6000")
+                (substitute* (find-files "gcc/config/rs6000")
+                  (("/lib64") "/lib")))))
+          (add-before 'configure 'chdir
+            (lambda _
+              (chdir "libstdc++-v3"))))
+
+      #:configure-flags '`("--disable-libstdcxx-pch"
                            ,(string-append "--with-gxx-include-dir="
                                            (assoc-ref %outputs "out")
                                            "/include"))))
