public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/gcc] snapshot: 16.1.1-1
@ 2026-06-04 14:12 Jakub Jelinek
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Jelinek @ 2026-06-04 14:12 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/gcc
Branch : snapshot
Commit : 63cc611a9c9bddcaf59df0341bc326f9f209a807
Author : Jakub Jelinek <jakub@redhat.com>
Date   : 2026-05-01T17:41:08+02:00
Stats  : +32/-1585 in 9 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/63cc611a9c9bddcaf59df0341bc326f9f209a807?branch=snapshot

Log:
16.1.1-1

---
diff --git a/.gitignore b/.gitignore
index d5f821a..fe65bae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,4 @@
 /gcc-16.0.1-20260321.tar.xz
 /gcc-16.0.1-20260416.tar.xz
 /nvptx-tools-212da2e781ed0f9423824e85eb04819958513f7a.tar.xz
+/gcc-16.1.1-20260501.tar.xz

diff --git a/gcc.spec b/gcc.spec
index c17dfc9..0598c4f 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,13 +1,14 @@
-%global DATE 20260416
-%global gitrev 1ce031bfa84b69736e209fbe7446bf271e2f49d3
-%global gcc_version 16.0.1
+%global DATE 20260501
+%global gitrev f4e68dc3bdc8f1c5d202db92c8c7bcd89c638688
+%global gcc_version 16.1.1
 %global gcc_major 16
 # Note, gcc_release must be integer, if you want to add suffixes to
 # %%{release}, append them after %%{gcc_release} on Release: line.
-%global gcc_release 0
+%global gcc_release 1
 %global nvptx_tools_gitrev 212da2e781ed0f9423824e85eb04819958513f7a
 %global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
 %global _unpackaged_files_terminate_build 0
+%global _find_debuginfo_opts --keep-section .a68_exports
 %if 0%{?fedora:1}
 %global _performance_build 1
 # Hardening slows the compiler way too much.
@@ -158,7 +159,7 @@
 Summary: Various compilers (C, C++, Objective-C, ...)
 Name: gcc
 Version: %{gcc_version}
-Release: %{gcc_release}.11%{?dist}
+Release: %{gcc_release}%{?dist}
 # License notes for some of the less obvious ones:
 #   gcc/doc/cppinternals.texi: Linux-man-pages-copyleft-2-para
 #   isl: MIT, BSD-2-Clause
@@ -322,11 +323,6 @@ Patch9: gcc16-Wno-format-security.patch
 Patch10: gcc16-rh1574936.patch
 Patch11: gcc16-d-shared-libphobos.patch
 Patch12: gcc16-pr119006.patch
-Patch13: gcc16-uglification.patch
-Patch14: gcc16-uglification2.patch
-Patch15: gcc16-module-exports.patch
-Patch16: gcc16-bitint-tests.patch
-Patch17: gcc16-pr124268.patch
 
 Patch50: isl-rh2155127.patch
 
@@ -3977,6 +3973,28 @@ end
 %endif
 
 %changelog
+* Fri May  1 2026 Jakub Jelinek <jakub@redhat.com> 16.1.1-1
+- update from trunk and releases/gcc-16 branch
+  - GCC 16.1.0 release
+  - PRs ada/107391, ada/107392, ada/124918, ada/125044, c/84717, c++/120502,
+	c++/123879, c++/124582, c++/124632, c++/124706, c++/124756,
+	c++/124855, c++/124910, c++/124926, c++/124927, c++/124944,
+	c++/124950, c++/124953, c++/124973, c++/124981, c++/124989,
+	c++/125035, c++/125096, cobol/119818, d/123411, d/124157, d/124922,
+	fortran/63858, fortran/93329, fortran/93463, fortran/108382,
+	fortran/117077, fortran/120431, ipa/120098, libfortran/120431,
+	libstdc++/112490, libstdc++/119714, libstdc++/124410,
+	libstdc++/124540, libstdc++/124890, libstdc++/125024,
+	libstdc++/125112, middle-end/95551, middle-end/122021,
+	middle-end/124900, middle-end/124971, modula2/120189,
+	preprocessor/124930, rtl-optimization/124643, sanitizer/124248,
+	sanitizer/124969, target/103383, target/124133, target/124933,
+	target/124959, target/124984, target/125117, testsuite/124682,
+	testsuite/124939, tree-optimization/116463, tree-optimization/124909,
+	tree-optimization/124941, tree-optimization/124988,
+	tree-optimization/125019, tree-optimization/125039,
+	tree-optimization/125079
+
 * Thu Apr 16 2026 Jakub Jelinek <jakub@redhat.com> 16.0.1-0.11
 - update from trunk
   - PRs ada/77535, ada/87170, ada/95452, ada/105212, ada/124596, ada/124606,

diff --git a/gcc16-bitint-tests.patch b/gcc16-bitint-tests.patch
deleted file mode 100644
index 92b60f0..0000000
--- a/gcc16-bitint-tests.patch
+++ /dev/null
@@ -1,238 +0,0 @@
---- gcc/testsuite/gcc.dg/bitintext.h.jj	2026-04-15 17:20:57.301896454 +0200
-+++ gcc/testsuite/gcc.dg/bitintext.h	2026-04-16 19:22:52.303139301 +0200
-@@ -16,7 +16,7 @@ do_copy (void *p, const void *q, __SIZE_
- #define CEIL(x,y) (((x) + (y) - 1) / (y))
- 
- /* Promote a _BitInt type to include its padding bits.  */
--#if defined (__s390x__) || defined(__arm__) || defined(__riscv__)
-+#if defined (__s390x__) || defined(__arm__) || defined(__riscv)
- #define PROMOTED_SIZE(x) sizeof (x)
- #elif defined(__loongarch__)
- #define PROMOTED_SIZE(x) (sizeof (x) > 8 ? CEIL (S (x), 64) * 8 : sizeof (x))
-@@ -25,7 +25,7 @@ do_copy (void *p, const void *q, __SIZE_
- /* Macro to test whether (on targets where psABI requires it) _BitInt
-    with padding bits have those filled with sign or zero extension.  */
- #if defined(__s390x__) || defined(__arm__) || defined(__loongarch__) \
--    || defined(__riscv__)
-+    || defined(__riscv)
- #define BEXTC1(x, uns) \
-   do {							  \
-     uns _BitInt(PROMOTED_SIZE (x) * __CHAR_BIT__) __x;	  \
---- gcc/testsuite/gcc.dg/torture/bitint-86.c.jj	2026-04-15 17:20:57.302099957 +0200
-+++ gcc/testsuite/gcc.dg/torture/bitint-86.c	2026-04-16 18:27:01.228764387 +0200
-@@ -1,6 +1,5 @@
- /* PR middle-end/123635 */
- /* { dg-do run { target bitint } } */
--/* { dg-require-effective-target sync_char_short } */
- /* { dg-options "-std=c23 -pedantic-errors" } */
- /* { dg-skip-if "" { ! run_expensive_tests }  { "*" } { "-O0" "-O2" } } */
- /* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
---- gcc/testsuite/gcc.dg/torture/bitint-87.c.jj	2026-04-15 17:20:57.302186204 +0200
-+++ gcc/testsuite/gcc.dg/torture/bitint-87.c	2026-04-16 18:27:06.213681901 +0200
-@@ -1,6 +1,5 @@
- /* PR middle-end/123635 */
- /* { dg-do run { target bitint } } */
--/* { dg-require-effective-target sync_char_short } */
- /* { dg-options "-std=c23 -pedantic-errors" } */
- /* { dg-skip-if "" { ! run_expensive_tests }  { "*" } { "-O0" "-O2" } } */
- /* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
---- gcc/testsuite/gcc.dg/torture/bitint-88.c.jj	2026-04-16 17:26:24.531981977 +0200
-+++ gcc/testsuite/gcc.dg/torture/bitint-88.c	2026-04-16 18:27:11.196599442 +0200
-@@ -0,0 +1,95 @@
-+/* PR middle-end/123635 */
-+/* { dg-do run { target bitint } } */
-+/* { dg-options "-std=c23 -pedantic-errors" } */
-+/* { dg-skip-if "" { ! run_expensive_tests }  { "*" } { "-O0" "-O2" } } */
-+/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
-+
-+#if __BITINT_MAXWIDTH__ >= 1025
-+unsigned _BitInt(513) a, b, c, d;
-+_BitInt(513) e, f, g, h;
-+unsigned _BitInt(1025) i, j, k, l;
-+_BitInt(1025) m, n, o, p;
-+#endif
-+
-+#include "../bitintext.h"
-+
-+#if __BITINT_MAXWIDTH__ >= 1025
-+[[gnu::noipa]] void
-+f1 (_BitInt(513) q, _BitInt(513) r, _BitInt(513) s,
-+    unsigned _BitInt(513) t, unsigned _BitInt(513) u, unsigned _BitInt(513) v)
-+{
-+  a = q + r;
-+  BEXTC (a);
-+  b = r + s;
-+  BEXTC (b);
-+  c = q - r;
-+  BEXTC (c);
-+  d = q - s;
-+  BEXTC (d);
-+  e = t + u;
-+  BEXTC (e);
-+  f = u + v;
-+  BEXTC (f);
-+  g = t - u;
-+  BEXTC (g);
-+  h = t - v;
-+  BEXTC (h);
-+}
-+
-+[[gnu::noipa]] void
-+f2 (_BitInt(513) q, _BitInt(513) r, _BitInt(513) s,
-+    unsigned _BitInt(513) t, unsigned _BitInt(513) u, unsigned _BitInt(513) v)
-+{
-+  i = q + r;
-+  BEXTC (i);
-+  j = r + s;
-+  BEXTC (j);
-+  k = q - r;
-+  BEXTC (k);
-+  l = q - s;
-+  BEXTC (l);
-+  m = t + u;
-+  BEXTC (m);
-+  n = u + v;
-+  BEXTC (n);
-+  o = t - u;
-+  BEXTC (o);
-+  p = t - v;
-+  BEXTC (p);
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+#if __BITINT_MAXWIDTH__ >= 1025
-+  __builtin_memset (&a, 0x55, sizeof (a));
-+  __builtin_memset (&b, 0xaa, sizeof (b));
-+  __builtin_memset (&c, 0x55, sizeof (c));
-+  __builtin_memset (&d, 0xaa, sizeof (d));
-+  __builtin_memset (&e, 0x55, sizeof (e));
-+  __builtin_memset (&f, 0xaa, sizeof (f));
-+  __builtin_memset (&g, 0x55, sizeof (g));
-+  __builtin_memset (&h, 0xaa, sizeof (h));
-+  f1 (-2639616085193412675089727272130019765984398127278861998378045997173219392866835944828454559654047247059773556852593471531433454810831298259785611283536204wb,
-+      -7234121192495298112713936268702056205915537824658323839255206188456944966709752205781440683757949161649123152428620619997014209098183677328840647884700332wb,
-+      8654283549227219676537451326576929768614001427323560383705131223498505581982738964879437520020436012891649083646965651378407397436785749860023553778646861wb,
-+      15046745594550617619205422464231805109110883864578289024439083517871820578179553927615539526791313634437787081814763432804808038115388367331529035246240655uwb,
-+      20633637828717837096174917874088391607464281656818868213468970773994599068609617673436080725569780340050358299419252926775025136778754971701553110169281151uwb,
-+      513612209045189503622076474995216606086383139671427104179978688982034117764664711277072795083902951564358998498109412142322138933760173628255697435284781uwb);
-+  __builtin_memset (&i, 0x55, sizeof (i));
-+  __builtin_memset (&j, 0xaa, sizeof (j));
-+  __builtin_memset (&k, 0x55, sizeof (k));
-+  __builtin_memset (&l, 0xaa, sizeof (l));
-+  __builtin_memset (&m, 0x55, sizeof (m));
-+  __builtin_memset (&n, 0xaa, sizeof (n));
-+  __builtin_memset (&o, 0x55, sizeof (o));
-+  __builtin_memset (&p, 0xaa, sizeof (p));
-+  f2 (-2639616085193412675089727272130019765984398127278861998378045997173219392866835944828454559654047247059773556852593471531433454810831298259785611283536204wb,
-+      -7234121192495298112713936268702056205915537824658323839255206188456944966709752205781440683757949161649123152428620619997014209098183677328840647884700332wb,
-+      8654283549227219676537451326576929768614001427323560383705131223498505581982738964879437520020436012891649083646965651378407397436785749860023553778646861wb,
-+      15046745594550617619205422464231805109110883864578289024439083517871820578179553927615539526791313634437787081814763432804808038115388367331529035246240655uwb,
-+      20633637828717837096174917874088391607464281656818868213468970773994599068609617673436080725569780340050358299419252926775025136778754971701553110169281151uwb,
-+      513612209045189503622076474995216606086383139671427104179978688982034117764664711277072795083902951564358998498109412142322138933760173628255697435284781uwb);
-+#endif
-+}
---- gcc/testsuite/gcc.dg/torture/bitint-89.c.jj	2026-04-16 17:38:27.367050011 +0200
-+++ gcc/testsuite/gcc.dg/torture/bitint-89.c	2026-04-16 18:27:16.800506707 +0200
-@@ -0,0 +1,99 @@
-+/* PR middle-end/123635 */
-+/* { dg-do run { target bitint } } */
-+/* { dg-options "-std=c23 -pedantic-errors" } */
-+/* { dg-skip-if "" { ! run_expensive_tests }  { "*" } { "-O0" "-O2" } } */
-+/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
-+
-+#if __BITINT_MAXWIDTH__ >= 1025
-+_BitInt(513) a, b, c, d;
-+unsigned _BitInt(513) e, f, g, h;
-+_BitInt(513) i, j, k, l;
-+unsigned _BitInt(513) m, n, o, p;
-+#endif
-+
-+#include "../bitintext.h"
-+
-+#if __BITINT_MAXWIDTH__ >= 1025
-+[[gnu::noipa]] void
-+f1 (_BitInt(513) q, _BitInt(513) r, _BitInt(513) s,
-+    unsigned _BitInt(513) t, unsigned _BitInt(513) u, unsigned _BitInt(513) v,
-+    int z)
-+{
-+  a = q >> 23;
-+  BEXTC (a);
-+  b = r << 23;
-+  BEXTC (b);
-+  c = r >> z;
-+  BEXTC (c);
-+  d = s << z;
-+  BEXTC (d);
-+  e = t >> 23;
-+  BEXTC (e);
-+  f = u << 23;
-+  BEXTC (f);
-+  g = t >> z;
-+  BEXTC (g);
-+  h = v << z;
-+  BEXTC (h);
-+}
-+
-+[[gnu::noipa]] void
-+f2 (_BitInt(513) q, _BitInt(513) r, _BitInt(513) s,
-+    unsigned _BitInt(513) t, unsigned _BitInt(513) u, unsigned _BitInt(513) v,
-+    int z)
-+{
-+  i = q >> 67;
-+  BEXTC (i);
-+  j = r << 67;
-+  BEXTC (j);
-+  k = q >> z;
-+  BEXTC (k);
-+  l = s << z;
-+  BEXTC (l);
-+  m = t >> 67;
-+  BEXTC (m);
-+  n = u << 67;
-+  BEXTC (n);
-+  o = t >> z;
-+  BEXTC (o);
-+  p = v << z;
-+  BEXTC (p);
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+#if __BITINT_MAXWIDTH__ >= 1025
-+  __builtin_memset (&a, 0x55, sizeof (a));
-+  __builtin_memset (&b, 0xaa, sizeof (b));
-+  __builtin_memset (&c, 0x55, sizeof (c));
-+  __builtin_memset (&d, 0xaa, sizeof (d));
-+  __builtin_memset (&e, 0x55, sizeof (e));
-+  __builtin_memset (&f, 0xaa, sizeof (f));
-+  __builtin_memset (&g, 0x55, sizeof (g));
-+  __builtin_memset (&h, 0xaa, sizeof (h));
-+  f1 (-2639616085193412675089727272130019765984398127278861998378045997173219392866835944828454559654047247059773556852593471531433454810831298259785611283536204wb,
-+      -7234121192495298112713936268702056205915537824658323839255206188456944966709752205781440683757949161649123152428620619997014209098183677328840647884700332wb,
-+      8654283549227219676537451326576929768614001427323560383705131223498505581982738964879437520020436012891649083646965651378407397436785749860023553778646861wb,
-+      15046745594550617619205422464231805109110883864578289024439083517871820578179553927615539526791313634437787081814763432804808038115388367331529035246240655uwb,
-+      20633637828717837096174917874088391607464281656818868213468970773994599068609617673436080725569780340050358299419252926775025136778754971701553110169281151uwb,
-+      513612209045189503622076474995216606086383139671427104179978688982034117764664711277072795083902951564358998498109412142322138933760173628255697435284781uwb,
-+      129);
-+  __builtin_memset (&i, 0x55, sizeof (i));
-+  __builtin_memset (&j, 0xaa, sizeof (j));
-+  __builtin_memset (&k, 0x55, sizeof (k));
-+  __builtin_memset (&l, 0xaa, sizeof (l));
-+  __builtin_memset (&m, 0x55, sizeof (m));
-+  __builtin_memset (&n, 0xaa, sizeof (n));
-+  __builtin_memset (&o, 0x55, sizeof (o));
-+  __builtin_memset (&p, 0xaa, sizeof (p));
-+  f2 (2639616085193412675089727272130019765984398127278861998378045997173219392866835944828454559654047247059773556852593471531433454810831298259785611283536204wb,
-+      -7234121192495298112713936268702056205915537824658323839255206188456944966709752205781440683757949161649123152428620619997014209098183677328840647884700332wb,
-+      -8654283549227219676537451326576929768614001427323560383705131223498505581982738964879437520020436012891649083646965651378407397436785749860023553778646861wb,
-+      513612209045189503622076474995216606086383139671427104179978688982034117764664711277072795083902951564358998498109412142322138933760173628255697435284781uwb,
-+      20633637828717837096174917874088391607464281656818868213468970773994599068609617673436080725569780340050358299419252926775025136778754971701553110169281151uwb,
-+      15046745594550617619205422464231805109110883864578289024439083517871820578179553927615539526791313634437787081814763432804808038115388367331529035246240655uwb,
-+      211);
-+#endif
-+}

diff --git a/gcc16-libstdc++-docs.patch b/gcc16-libstdc++-docs.patch
index 7d2d357..f971627 100644
--- a/gcc16-libstdc++-docs.patch
+++ b/gcc16-libstdc++-docs.patch
@@ -4,7 +4,7 @@
        <a class="link" href="https://www.fsf.org" target="_top">FSF
        </a>
      </p><p>
-+      Release 16.0.1
++      Release 16.1.1
 +    </p><p>
        Permission is granted to copy, distribute and/or modify this
        document under the terms of the GNU Free Documentation
@@ -17,7 +17,7 @@
  </p><p>
 -  The API documentation, rendered into HTML, can be viewed online
 +  The API documentation, rendered into HTML, can be viewed locally
-+  <a class="link" href="api/index.html" target="_top">for the 16.0.1 release</a>,
++  <a class="link" href="api/index.html" target="_top">for the 16.1.1 release</a>,
 +  online
    <a class="link" href="https://gcc.gnu.org/onlinedocs/" target="_top">for each GCC release</a>
    and

diff --git a/gcc16-module-exports.patch b/gcc16-module-exports.patch
deleted file mode 100644
index 058c429..0000000
--- a/gcc16-module-exports.patch
+++ /dev/null
@@ -1,312 +0,0 @@
-2026-03-19  Jakub Jelinek  <jakub@redhat.com>
-
-	* g++.dg/plugin/plugin.exp: Set PLUGIN_DEFAULT_REPO.  Add
-	set*module*exports* to plugin_test_list.  Remove *.gcm files
-	at the start and end.
-	* g++.dg/plugin/std_module_exports_plugin.cc: New file.
-	* g++.dg/plugin/std-module-exports-c++20.C: New test.
-	* g++.dg/plugin/std-module-exports-c++23.C: New test.
-	* g++.dg/plugin/std-module-exports-c++26.C: New test.
-
---- gcc/testsuite/g++.dg/plugin/plugin.exp.jj	2026-03-19 16:20:02.379257258 +0100
-+++ gcc/testsuite/g++.dg/plugin/plugin.exp	2026-03-19 16:20:10.993368783 +0100
-@@ -51,6 +51,8 @@ if ![gcc_parallel_test_run_p plugin] {
- }
- gcc_parallel_test_enable 0
- 
-+set PLUGIN_DEFAULT_REPO "gcm.cache"
-+
- # Specify the plugin source file and the associated test files in a list.
- # plugin_test_list={ {plugin1 test1 test2 ...} {plugin2 test1 ...} ... }
- set plugin_test_list [list \
-@@ -87,9 +89,17 @@ set plugin_test_list [list \
-     	  uglification-c++20.C \
-     	  uglification-c++23.C \
-     	  uglification-c++26.C } \
-+    { std_module_exports_plugin.cc \
-+	  std-module-exports-c++20.C \
-+	  std-module-exports-c++23.C \
-+	  std-module-exports-c++26.C } \
-     { comment_plugin.cc comments-1.C } \
- ]
- 
-+foreach file [find $PLUGIN_DEFAULT_REPO *.gcm] {
-+    file_on_host delete $file
-+}
-+
- foreach plugin_test $plugin_test_list {
-     # Replace each source file with its full-path name
-     for {set i 0} {$i < [llength $plugin_test]} {incr i} {
-@@ -105,4 +115,8 @@ foreach plugin_test $plugin_test_list {
-     plugin-test-execute $plugin_src $plugin_input_tests
- }
- 
-+foreach file [find $PLUGIN_DEFAULT_REPO *.gcm] {
-+    file_on_host delete $file
-+}
-+
- gcc_parallel_test_enable 1
---- gcc/testsuite/g++.dg/plugin/std_module_exports_plugin.cc.jj	2026-03-19 16:19:23.694919816 +0100
-+++ gcc/testsuite/g++.dg/plugin/std_module_exports_plugin.cc	2026-03-19 16:45:12.756543979 +0100
-@@ -0,0 +1,219 @@
-+#include "gcc-plugin.h"
-+#include <stdlib.h>
-+#include "config.h"
-+#include "system.h"
-+#include "coretypes.h"
-+#include "tree.h"
-+#include "intl.h"
-+#include "cp/cp-tree.h"
-+#include "cp/name-lookup.h"
-+#include "diagnostic.h"
-+#include "stringpool.h"
-+#include "attribs.h"
-+
-+int plugin_is_GPL_compatible;
-+
-+void plugin_dump_ns (tree, char *, hash_set<tree> **);
-+
-+enum class whitelist_std {
-+  cxx20 = 1 << 0,
-+  cxx23 = 1 << 1,
-+  cxx26 = 1 << 2,
-+  all = (1 << 3) - 1
-+};
-+struct {
-+  const char *name;
-+  whitelist_std enabled_in;
-+} whitelist[] = {
-+  // [zombie.names] in C++20-C++26, supported as an extension.
-+  { "std::result_of", whitelist_std::all },
-+  { "std::result_of_t", whitelist_std::all },
-+  // [zombie.names] in C++20-C++26, supported in C++20 as an extension.
-+  { "std::unexpected_handler", whitelist_std::cxx20 },
-+  // [zombie.names] in C++23-C++26, not exported in C++20.
-+  { "std::declare_no_pointers", whitelist_std::cxx20 },
-+  { "std::declare_reachable", whitelist_std::cxx20 },
-+  { "std::get_pointer_safety", whitelist_std::cxx20 },
-+  { "std::pointer_safety", whitelist_std::cxx20 },
-+  { "std::undeclare_no_pointers", whitelist_std::cxx20 },
-+  { "std::undeclare_reachable", whitelist_std::cxx20 }
-+};
-+
-+void
-+plugin_dump_decl (tree decl, char *scope, hash_set<tree> **exported_usings)
-+{
-+  if (VAR_P (decl) && DECL_ARTIFICIAL (decl))
-+    return;
-+
-+  tree name = DECL_NAME (decl);
-+  if (!name)
-+    return;
-+
-+  if (IDENTIFIER_ANON_P (name))
-+    return;
-+
-+  if (TREE_CODE (decl) == CONST_DECL)
-+    return;
-+
-+  if (TREE_CODE (decl) == NAMESPACE_DECL && DECL_NAMESPACE_INLINE_P (decl))
-+    {
-+      plugin_dump_ns (decl, scope, exported_usings);
-+      return;
-+    }
-+
-+  if (IDENTIFIER_POINTER (name)[0] == '_'
-+      || strchr (IDENTIFIER_POINTER (name), ' '))
-+    return;
-+
-+  if (TREE_CODE (decl) == NAMESPACE_DECL)
-+    {
-+      char *p = strchr (scope, '\0');
-+      strcpy (p, IDENTIFIER_POINTER (name));
-+      strcat (p, "::");
-+      plugin_dump_ns (decl, scope, exported_usings);
-+      *p = '\0';
-+      return;
-+    }
-+
-+  if (DECL_MODULE_EXPORT_P (decl))
-+    return;
-+  if (TREE_DEPRECATED (decl)
-+      || lookup_attribute ("deprecated", DECL_ATTRIBUTES (decl)))
-+    return;
-+  if (TREE_CODE (decl) == TEMPLATE_DECL
-+      && DECL_TEMPLATE_RESULT (decl)
-+      && (TREE_DEPRECATED (DECL_TEMPLATE_RESULT (decl))
-+	  || lookup_attribute ("deprecated",
-+			       DECL_ATTRIBUTES (DECL_TEMPLATE_RESULT (decl)))))
-+    return;
-+  if (*exported_usings
-+      && (*exported_usings)->contains (DECL_NAME (decl)))
-+    return;
-+
-+  size_t scope_len = strlen (scope);
-+  whitelist_std this_std;
-+  if (cxx_dialect == cxx20)
-+    this_std = whitelist_std::cxx20;
-+  else if (cxx_dialect == cxx23)
-+    this_std = whitelist_std::cxx23;
-+  else if (cxx_dialect == cxx26)
-+    this_std = whitelist_std::cxx26;
-+  for (int i = 0; i < ARRAY_SIZE (whitelist); ++i)
-+    if (strncmp (whitelist[i].name, scope, scope_len) == 0
-+	&& strcmp (whitelist[i].name + scope_len,
-+		   IDENTIFIER_POINTER (name)) == 0)
-+      {
-+	if (((int) whitelist[i].enabled_in & (int) this_std) != 0)
-+	  {
-+	    inform (DECL_SOURCE_LOCATION (decl),
-+		    "missing using %s%D; whitelisted", scope, name);
-+	    return;
-+	  }
-+	break;
-+      }
-+
-+  error_at (DECL_SOURCE_LOCATION (decl), "missing using %s%D;", scope, name);
-+}
-+
-+void
-+plugin_dump_binding (tree binding, char *scope,
-+		     hash_set<tree> **exported_usings)
-+{
-+  tree value = NULL_TREE;
-+
-+  if (TREE_CODE (binding) == OVERLOAD)
-+    {
-+      tree ovl = ovl_skip_hidden (binding);
-+      if (ovl && TREE_CODE (ovl) == OVERLOAD && OVL_EXPORT_P (ovl))
-+	return;
-+    }
-+
-+  if (STAT_HACK_P (binding))
-+    {
-+      if (!STAT_TYPE_HIDDEN_P (binding)
-+          && STAT_TYPE (binding))
-+        return plugin_dump_decl (STAT_TYPE (binding), scope, exported_usings);
-+      else if (!STAT_DECL_HIDDEN_P (binding))
-+        value = STAT_DECL (binding);
-+    }
-+  else
-+    value = binding;
-+
-+  value = ovl_skip_hidden (value);
-+  if (value)
-+    {
-+      value = OVL_FIRST (value);
-+      return plugin_dump_decl (value, scope, exported_usings);
-+    }
-+}
-+
-+void
-+plugin_dump_ns (tree ns, char *scope, hash_set<tree> **exported_usings)
-+{
-+  using itert = hash_table<named_decl_hash>::iterator;
-+  itert end (DECL_NAMESPACE_BINDINGS (ns)->end ());
-+  hash_set<tree> *my_exported_usings = NULL;
-+  if (DECL_NAMESPACE_INLINE_P (ns))
-+    {
-+      if (*exported_usings == NULL)
-+	{
-+	  *exported_usings = new hash_set<tree>;
-+	  tree parent = DECL_CONTEXT (ns);
-+	  itert pend (DECL_NAMESPACE_BINDINGS (parent)->end ());
-+	  for (itert iter (DECL_NAMESPACE_BINDINGS (parent)->begin ());
-+	       iter != pend; ++iter)
-+	    {
-+	      tree b = *iter;
-+	      if (TREE_CODE (b) == USING_DECL
-+		  && DECL_MODULE_EXPORT_P (b)
-+		  && DECL_NAME (b))
-+		(*exported_usings)->add (DECL_NAME (b));
-+	      else if (TREE_CODE (b) == OVERLOAD)
-+		{
-+		  tree ovl = ovl_skip_hidden (b);
-+		  if (ovl && TREE_CODE (ovl) == OVERLOAD && OVL_EXPORT_P (ovl))
-+		    {
-+		      b = OVL_FIRST (ovl);
-+		      if (DECL_NAME (b))
-+			(*exported_usings)->add (DECL_NAME (b));
-+		    }
-+		}
-+	    }
-+	}
-+    }
-+  else
-+    exported_usings = &my_exported_usings;
-+  for (itert iter (DECL_NAMESPACE_BINDINGS (ns)->begin ());
-+       iter != end; ++iter)
-+    {
-+      tree b = *iter;
-+      gcc_assert (TREE_CODE (b) != BINDING_VECTOR);
-+      plugin_dump_binding (b, scope, exported_usings);
-+    }
-+  delete my_exported_usings;
-+}
-+
-+void
-+plugin_finish_unit (void *, void *)
-+{
-+  if (!main_input_filename
-+      || strstr (main_input_filename, "/std.cc") == NULL)
-+    return;
-+
-+  char buf[4096];
-+  strcpy (buf, "std::");
-+  hash_set<tree> *exported_usings = NULL;
-+  plugin_dump_ns (std_node, buf, &exported_usings);
-+  delete exported_usings;
-+}
-+
-+int
-+plugin_init (struct plugin_name_args *plugin_info,
-+             struct plugin_gcc_version *version)
-+{
-+  const char *plugin_name = plugin_info->base_name;
-+
-+  register_callback (plugin_name, PLUGIN_FINISH_UNIT,
-+                     plugin_finish_unit, NULL);
-+  return 0;
-+}
---- gcc/testsuite/g++.dg/plugin/std-module-exports-c++20.C.jj	2026-03-19 16:19:23.695035259 +0100
-+++ gcc/testsuite/g++.dg/plugin/std-module-exports-c++20.C	2026-03-19 16:20:10.993688891 +0100
-@@ -0,0 +1,11 @@
-+// Test bits/std.cc exports everything it should.
-+// This is done using a plugin to walk std namespace and
-+// its child namespaces, looking for decls with non-uglified
-+// names which aren't deprecated and are not exported.
-+// { dg-do link }
-+// { dg-options "-O0 -std=c++20 -fmodules -x c++-system-module bits/std.cc -x none" }
-+
-+int
-+main ()
-+{
-+}
---- gcc/testsuite/g++.dg/plugin/std-module-exports-c++23.C.jj	2026-03-19 16:19:23.695116627 +0100
-+++ gcc/testsuite/g++.dg/plugin/std-module-exports-c++23.C	2026-03-19 16:20:10.993788563 +0100
-@@ -0,0 +1,11 @@
-+// Test bits/std.cc exports everything it should.
-+// This is done using a plugin to walk std namespace and
-+// its child namespaces, looking for decls with non-uglified
-+// names which aren't deprecated and are not exported.
-+// { dg-do link }
-+// { dg-options "-O0 -std=c++23 -fmodules -x c++-system-module bits/std.cc -x none" }
-+
-+int
-+main ()
-+{
-+}
---- gcc/testsuite/g++.dg/plugin/std-module-exports-c++26.C.jj	2026-03-19 16:19:23.695194959 +0100
-+++ gcc/testsuite/g++.dg/plugin/std-module-exports-c++26.C	2026-03-19 16:20:10.993904525 +0100
-@@ -0,0 +1,11 @@
-+// Test bits/std.cc exports everything it should.
-+// This is done using a plugin to walk std namespace and
-+// its child namespaces, looking for decls with non-uglified
-+// names which aren't deprecated and are not exported.
-+// { dg-do link }
-+// { dg-options "-O0 -std=c++26 -fmodules -freflection -fcontracts -x c++-system-module bits/std.cc -x none" }
-+
-+int
-+main ()
-+{
-+}

diff --git a/gcc16-pr124268.patch b/gcc16-pr124268.patch
deleted file mode 100644
index 5cdc235..0000000
--- a/gcc16-pr124268.patch
+++ /dev/null
@@ -1,335 +0,0 @@
-This tries to ensure that the module init functions are present in
-libstdc++.so and libstdc++.a, so that users of the std and std.compat
-modules don't need to manually link to std.o and/or std.compat.o in
-addition to compiling the CMIs.
-
-This also adds a clean-local target to remove the generated interface
-units and manifest, and the gcm.cache directory for the CMIs.
-
-This was previously committed and then reverted because it broke
-bootstrap on a few targets. Most of the reasons the module interface
-units failed to compile have (we believe) now been addressed with G++
-changes, although there's still a problem on amdgcn (PR124554). Due to
-that problem, and any not yet known problems, this version of the patch
-tries to avoid breaking bootstrap again by allowing the modules to fail
-to compile. If compiling std.o or std.compat.o fails then an empty
-translation unit will be compiled and added to libstdc++.so instead.
-
-This means that we will only export the module initialization functions
-from the library if the module can be compiled for the target. This
-seems fine because we don't need to initialize anything for a module
-that cannot even be compiled! Fixing PR124554 and removing this kluge
-should be done for GCC 17 in stage 1.
-
-libstdc++-v3/ChangeLog:
-
-	PR libstdc++/124268
-	* config/abi/pre/gnu.ver: Export symbols.
-	* src/Makefile.am: Add libmodulesconvenience.la to libstdc++
-	link.
-	* src/Makefile.in: Regenerate.
-	* src/c++23/Makefile.am: Create libmodulesconvenience.la
-	and populate it with std.o and std.compat.o interface units,
-	with empty fallback objects if compiling the interface units
-	fails. Add clean-local target.
-	* src/c++23/Makefile.in: Regenerate.
----
-
-v2: Replace the module interface units with empty translation units if
-they fail to compile.
-
-Tested x86_64-linux, sparc-solaris, aarch64-linux.
-
-Bootstrapped on xtensa-esp32-elf before Jakub's r16-8703 and this patch
-allows bootstrap to complete even though std.cc fails:
-
-std.cc:4150:14: error: exporting 'typedef __gnuc_va_list va_list' that does not have external linkage
- 4150 |   using std::va_list;
-      |              ^~~~~~~
-<built-in>: note: 'typedef struct __va_list_tag __va_list_tag' declared here with internal linkage
-Cannot compile std module
-Module initialization function will be missing
-
- libstdc++-v3/config/abi/pre/gnu.ver |  4 ++
- libstdc++-v3/src/Makefile.am        |  6 ++-
- libstdc++-v3/src/Makefile.in        |  6 ++-
- libstdc++-v3/src/c++23/Makefile.am  | 45 ++++++++++++++++-
- libstdc++-v3/src/c++23/Makefile.in  | 76 +++++++++++++++++++++++------
- 5 files changed, 117 insertions(+), 20 deletions(-)
-
---- libstdc++-v3/config/abi/pre/gnu.ver
-+++ libstdc++-v3/config/abi/pre/gnu.ver
-@@ -2617,6 +2617,10 @@ GLIBCXX_3.4.35 {
-     _ZSt15__get_once_callv;
- #endif
- 
-+    # Module inititialization symbols for std and std.compat modules.
-+    _ZGIW3std;
-+    _ZGIW3stdW6compat;
-+
- } GLIBCXX_3.4.34;
- 
- # Symbols in the support library (libsupc++) have their own tag.
---- libstdc++-v3/src/Makefile.am
-+++ libstdc++-v3/src/Makefile.am
-@@ -145,7 +145,8 @@ libstdc___la_LIBADD = \
- 	$(top_builddir)/src/c++98/libc++98convenience.la \
- 	$(top_builddir)/src/c++11/libc++11convenience.la \
- 	$(top_builddir)/src/c++17/libc++17convenience.la \
--	$(top_builddir)/src/c++20/libc++20convenience.la
-+	$(top_builddir)/src/c++20/libc++20convenience.la \
-+	$(top_builddir)/src/c++23/libmodulesconvenience.la
- 
- libstdc___la_DEPENDENCIES = \
- 	${version_dep} \
-@@ -153,7 +154,8 @@ libstdc___la_DEPENDENCIES = \
- 	$(top_builddir)/src/c++98/libc++98convenience.la \
- 	$(top_builddir)/src/c++11/libc++11convenience.la \
- 	$(top_builddir)/src/c++17/libc++17convenience.la \
--	$(top_builddir)/src/c++20/libc++20convenience.la
-+	$(top_builddir)/src/c++20/libc++20convenience.la \
-+	$(top_builddir)/src/c++23/libmodulesconvenience.la
- 
- if ENABLE_DARWIN_AT_RPATH
- libstdc___darwin_rpath = -Wc,-nodefaultrpaths
---- libstdc++-v3/src/Makefile.in
-+++ libstdc++-v3/src/Makefile.in
-@@ -555,7 +555,8 @@ libstdc___la_LIBADD = \
- 	$(top_builddir)/src/c++98/libc++98convenience.la \
- 	$(top_builddir)/src/c++11/libc++11convenience.la \
- 	$(top_builddir)/src/c++17/libc++17convenience.la \
--	$(top_builddir)/src/c++20/libc++20convenience.la
-+	$(top_builddir)/src/c++20/libc++20convenience.la \
-+	$(top_builddir)/src/c++23/libmodulesconvenience.la
- 
- libstdc___la_DEPENDENCIES = \
- 	${version_dep} \
-@@ -563,7 +564,8 @@ libstdc___la_DEPENDENCIES = \
- 	$(top_builddir)/src/c++98/libc++98convenience.la \
- 	$(top_builddir)/src/c++11/libc++11convenience.la \
- 	$(top_builddir)/src/c++17/libc++17convenience.la \
--	$(top_builddir)/src/c++20/libc++20convenience.la
-+	$(top_builddir)/src/c++20/libc++20convenience.la \
-+	$(top_builddir)/src/c++23/libmodulesconvenience.la
- 
- @ENABLE_DARWIN_AT_RPATH_TRUE@libstdc___darwin_rpath =  \
- @ENABLE_DARWIN_AT_RPATH_TRUE@	-Wc,-nodefaultrpaths \
---- libstdc++-v3/src/c++23/Makefile.am
-+++ libstdc++-v3/src/c++23/Makefile.am
-@@ -23,10 +23,13 @@
- include $(top_srcdir)/fragment.am
- 
- # Convenience library for C++23 runtime.
--noinst_LTLIBRARIES = libc++23convenience.la
-+# This libc++23convenience.la one isn't linked into libstdc++.la yet,
-+# so build an additional libmodulesconvenience.la which is linked in.
-+noinst_LTLIBRARIES = libc++23convenience.la libmodulesconvenience.la
- 
--# Module std support.  Not compiled for now, only installed.
-+# Module std support.
- # Let's install the interface units in the bits subdirectory.
-+# We also compile them and include them in libmodulesconvenience.la
- toolexeclib_DATA = libstdc++.modules.json
- includebitsdir = $(gxx_include_dir)/bits
- includebits_DATA = std.cc std.compat.cc
-@@ -59,6 +62,9 @@ stamp-modules-bits: $(includebits_DATA)
- 
- all-local: stamp-module-manifest stamp-modules-bits
- 
-+clean-local:
-+	rm -rf stamp* libstdc++.modules.json std.cc std.compat.cc gcm.cache
-+
- headers =
- 
- if ENABLE_EXTERN_TEMPLATE
-@@ -80,12 +86,47 @@ else
- libc__23convenience_la_SOURCES =
- endif
- 
-+libmodulesconvenience_la_SOURCES = std.cc std.compat.cc
-+
- # Use C++26 so that std::filebuf::native_handle() is available.
- print.lo: print.cc
- 	$(LTCXXCOMPILE) -std=gnu++26 -c $<
- print.o: print.cc
- 	$(CXXCOMPILE) -std=gnu++26 -c $<
- 
-+MODULES_FLAGS = -isystem ${glibcxx_srcdir}/include/backward -fmodules \
-+	-Wno-unknown-pragmas
-+
-+# These go into libmodulesconvenience.la and are linked into libstdc++
-+std.lo: std.cc
-+	if ! $(LTCXXCOMPILE) $(MODULES_FLAGS) -c $< ; then \
-+	  echo "Cannot compile std module" >&2; \
-+	  echo "Module initialization function will be missing" >&2; \
-+	  echo > $<.tmp && mv $<.tmp $< && \
-+	  $(LTCXXCOMPILE) $(MODULES_FLAGS) -c $< ; \
-+	fi
-+std.o: std.cc
-+	if ! $(CXXCOMPILE) $(MODULES_FLAGS) -c $< ; then \
-+	  echo "Cannot compile std module" >&2; \
-+	  echo "Module initialization function will be missing" >&2; \
-+	  echo > $<.tmp && mv $<.tmp $< && \
-+	  $(CXXCOMPILE) $(MODULES_FLAGS) -c $< ; \
-+	fi
-+std.compat.lo: std.compat.cc std.lo
-+	if ! $(LTCXXCOMPILE) $(MODULES_FLAGS) -c $< ; then \
-+	  echo "Cannot compile std.compat module" >&2; \
-+	  echo "Module initialization function will be missing" >&2; \
-+	  echo > $<.tmp && mv $<.tmp $< && \
-+	  $(LTCXXCOMPILE) $(MODULES_FLAGS) -c $< ; \
-+	fi
-+std.compat.o: std.compat.cc std.o
-+	if ! $(CXXCOMPILE) $(MODULES_FLAGS) -c $< ; then \
-+	  echo "Cannot compile std.compat module" >&2; \
-+	  echo "Module initialization function will be missing" >&2; \
-+	  echo > $<.tmp && mv $<.tmp $< && \
-+	  $(CXXCOMPILE) $(MODULES_FLAGS) -c $< ; \
-+	fi
-+
- # AM_CXXFLAGS needs to be in each subdirectory so that it can be
- # modified in a per-library or per-sub-library way.  Need to manually
- # set this option because CONFIG_CXXFLAGS has to be after
---- libstdc++-v3/src/c++23/Makefile.in
-+++ libstdc++-v3/src/c++23/Makefile.in
-@@ -133,6 +133,10 @@ AM_V_lt = $(am__v_lt_@AM_V@)
- am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
- am__v_lt_0 = --silent
- am__v_lt_1 = 
-+libmodulesconvenience_la_LIBADD =
-+am_libmodulesconvenience_la_OBJECTS = std.lo std.compat.lo
-+libmodulesconvenience_la_OBJECTS =  \
-+	$(am_libmodulesconvenience_la_OBJECTS)
- AM_V_P = $(am__v_P_@AM_V@)
- am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
- am__v_P_0 = false
-@@ -159,7 +163,8 @@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
- am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
- am__v_CXXLD_0 = @echo "  CXXLD   " $@;
- am__v_CXXLD_1 = 
--SOURCES = $(libc__23convenience_la_SOURCES)
-+SOURCES = $(libc__23convenience_la_SOURCES) \
-+	$(libmodulesconvenience_la_SOURCES)
- am__can_run_installinfo = \
-   case $$AM_UPDATE_INFO_DIR in \
-     n|no|NO) false;; \
-@@ -457,10 +462,13 @@ WARN_CXXFLAGS = \
- AM_CPPFLAGS = $(GLIBCXX_INCLUDES) $(CPPFLAGS)
- 
- # Convenience library for C++23 runtime.
--noinst_LTLIBRARIES = libc++23convenience.la
-+# This libc++23convenience.la one isn't linked into libstdc++.la yet,
-+# so build an additional libmodulesconvenience.la which is linked in.
-+noinst_LTLIBRARIES = libc++23convenience.la libmodulesconvenience.la
- 
--# Module std support.  Not compiled for now, only installed.
-+# Module std support.
- # Let's install the interface units in the bits subdirectory.
-+# We also compile them and include them in libmodulesconvenience.la
- toolexeclib_DATA = libstdc++.modules.json
- includebitsdir = $(gxx_include_dir)/bits
- includebits_DATA = std.cc std.compat.cc
-@@ -473,6 +481,10 @@ headers =
- sources = stacktrace.cc print.cc
- @GLIBCXX_HOSTED_FALSE@libc__23convenience_la_SOURCES = 
- @GLIBCXX_HOSTED_TRUE@libc__23convenience_la_SOURCES = $(sources)  $(inst_sources)
-+libmodulesconvenience_la_SOURCES = std.cc std.compat.cc
-+MODULES_FLAGS = -isystem ${glibcxx_srcdir}/include/backward -fmodules \
-+	-Wno-unknown-pragmas
-+
- 
- # AM_CXXFLAGS needs to be in each subdirectory so that it can be
- # modified in a per-library or per-sub-library way.  Need to manually
-@@ -586,6 +598,9 @@ clean-noinstLTLIBRARIES:
- libc++23convenience.la: $(libc__23convenience_la_OBJECTS) $(libc__23convenience_la_DEPENDENCIES) $(EXTRA_libc__23convenience_la_DEPENDENCIES) 
- 	$(AM_V_CXXLD)$(CXXLINK)  $(libc__23convenience_la_OBJECTS) $(libc__23convenience_la_LIBADD) $(LIBS)
- 
-+libmodulesconvenience.la: $(libmodulesconvenience_la_OBJECTS) $(libmodulesconvenience_la_DEPENDENCIES) $(EXTRA_libmodulesconvenience_la_DEPENDENCIES) 
-+	$(AM_V_CXXLD)$(CXXLINK)  $(libmodulesconvenience_la_OBJECTS) $(libmodulesconvenience_la_LIBADD) $(LIBS)
-+
- mostlyclean-compile:
- 	-rm -f *.$(OBJEXT)
- 
-@@ -739,8 +754,8 @@ maintainer-clean-generic:
- 	@echo "it deletes files that may require special tools to rebuild."
- clean: clean-am
- 
--clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
--	mostlyclean-am
-+clean-am: clean-generic clean-libtool clean-local \
-+	clean-noinstLTLIBRARIES mostlyclean-am
- 
- distclean: distclean-am
- 	-rm -f Makefile
-@@ -809,15 +824,15 @@ uninstall-am: uninstall-includebitsDATA uninstall-toolexeclibDATA
- .MAKE: install-am install-strip
- 
- .PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \
--	clean-generic clean-libtool clean-noinstLTLIBRARIES \
--	cscopelist-am ctags ctags-am distclean distclean-compile \
--	distclean-generic distclean-libtool distclean-tags dvi dvi-am \
--	html html-am info info-am install install-am install-data \
--	install-data-am install-dvi install-dvi-am install-exec \
--	install-exec-am install-html install-html-am \
--	install-includebitsDATA install-info install-info-am \
--	install-man install-pdf install-pdf-am install-ps \
--	install-ps-am install-strip install-toolexeclibDATA \
-+	clean-generic clean-libtool clean-local \
-+	clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
-+	distclean-compile distclean-generic distclean-libtool \
-+	distclean-tags dvi dvi-am html html-am info info-am install \
-+	install-am install-data install-data-am install-dvi \
-+	install-dvi-am install-exec install-exec-am install-html \
-+	install-html-am install-includebitsDATA install-info \
-+	install-info-am install-man install-pdf install-pdf-am \
-+	install-ps install-ps-am install-strip install-toolexeclibDATA \
- 	installcheck installcheck-am installdirs maintainer-clean \
- 	maintainer-clean-generic mostlyclean mostlyclean-compile \
- 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-@@ -855,6 +870,9 @@ stamp-modules-bits: $(includebits_DATA)
- 
- all-local: stamp-module-manifest stamp-modules-bits
- 
-+clean-local:
-+	rm -rf stamp* libstdc++.modules.json std.cc std.compat.cc gcm.cache
-+
- vpath % $(top_srcdir)/src/c++23
- 
- # Use C++26 so that std::filebuf::native_handle() is available.
-@@ -863,6 +881,36 @@ print.lo: print.cc
- print.o: print.cc
- 	$(CXXCOMPILE) -std=gnu++26 -c $<
- 
-+# These go into libmodulesconvenience.la and are linked into libstdc++
-+std.lo: std.cc
-+	if ! $(LTCXXCOMPILE) $(MODULES_FLAGS) -c $< ; then \
-+	  echo "Cannot compile std module" >&2; \
-+	  echo "Module initialization function will be missing" >&2; \
-+	  echo > $<.tmp && mv $<.tmp $< && \
-+	  $(LTCXXCOMPILE) $(MODULES_FLAGS) -c $< ; \
-+	fi
-+std.o: std.cc
-+	if ! $(CXXCOMPILE) $(MODULES_FLAGS) -c $< ; then \
-+	  echo "Cannot compile std module" >&2; \
-+	  echo "Module initialization function will be missing" >&2; \
-+	  echo > $<.tmp && mv $<.tmp $< && \
-+	  $(CXXCOMPILE) $(MODULES_FLAGS) -c $< ; \
-+	fi
-+std.compat.lo: std.compat.cc std.lo
-+	if ! $(LTCXXCOMPILE) $(MODULES_FLAGS) -c $< ; then \
-+	  echo "Cannot compile std.compat module" >&2; \
-+	  echo "Module initialization function will be missing" >&2; \
-+	  echo > $<.tmp && mv $<.tmp $< && \
-+	  $(LTCXXCOMPILE) $(MODULES_FLAGS) -c $< ; \
-+	fi
-+std.compat.o: std.compat.cc std.o
-+	if ! $(CXXCOMPILE) $(MODULES_FLAGS) -c $< ; then \
-+	  echo "Cannot compile std.compat module" >&2; \
-+	  echo "Module initialization function will be missing" >&2; \
-+	  echo > $<.tmp && mv $<.tmp $< && \
-+	  $(CXXCOMPILE) $(MODULES_FLAGS) -c $< ; \
-+	fi
-+
- # Tell versions [3.59,3.63) of GNU make to not export all variables.
- # Otherwise a system limit (for SysV at least) may be exceeded.
- .NOEXPORT:

diff --git a/gcc16-uglification.patch b/gcc16-uglification.patch
deleted file mode 100644
index 1b00e91..0000000
--- a/gcc16-uglification.patch
+++ /dev/null
@@ -1,625 +0,0 @@
-2026-03-19  Jakub Jelinek  <jakub@redhat.com>
-
-	* g++.dg/plugin/plugin.exp (plugin_test_list): Add uglification tests.
-	* g++.dg/plugin/uglification_plugin.cc: New file.
-	* g++.dg/plugin/uglification.C: New test.
-	* g++.dg/plugin/uglification-c++98.C: New test.
-	* g++.dg/plugin/uglification-c++11.C: New test.
-	* g++.dg/plugin/uglification-c++14.C: New test.
-	* g++.dg/plugin/uglification-c++17.C: New test.
-	* g++.dg/plugin/uglification-c++20.C: New test.
-	* g++.dg/plugin/uglification-c++23.C: New test.
-	* g++.dg/plugin/uglification-c++26.C: New test.
-
---- gcc/testsuite/g++.dg/plugin/plugin.exp.jj	2026-03-18 15:40:15.646008934 +0100
-+++ gcc/testsuite/g++.dg/plugin/plugin.exp	2026-03-18 16:48:34.395284889 +0100
-@@ -78,6 +78,15 @@ set plugin_test_list [list \
-     	  show-template-tree-color-no-highlight-colors.C \
-     	  show-template-tree-color-labels.C \
-     	  show-template-tree-color-no-elide-type.C } \
-+    { uglification_plugin.cc \
-+	  uglification.C \
-+    	  uglification-c++98.C \
-+    	  uglification-c++11.C \
-+    	  uglification-c++14.C \
-+    	  uglification-c++17.C \
-+    	  uglification-c++20.C \
-+    	  uglification-c++23.C \
-+    	  uglification-c++26.C } \
-     { comment_plugin.cc comments-1.C } \
- ]
- 
---- gcc/testsuite/g++.dg/plugin/uglification_plugin.cc.jj	2026-03-19 00:04:41.927231734 +0100
-+++ gcc/testsuite/g++.dg/plugin/uglification_plugin.cc	2026-03-19 09:00:06.741433015 +0100
-@@ -0,0 +1,353 @@
-+#include "gcc-plugin.h"
-+#include <stdlib.h>
-+#include "config.h"
-+#include "system.h"
-+#include "coretypes.h"
-+#include "tree.h"
-+#include "intl.h"
-+#include "cp/cp-tree.h"
-+#include "cp/name-lookup.h"
-+#include "diagnostic.h"
-+#include "stringpool.h"
-+
-+int plugin_is_GPL_compatible;
-+
-+void plugin_walk_ns (tree);
-+
-+const char *badnames[] = {
-+  /* See libstdc++-v3/testsuite/17_intro/{,bad}names.cc.  */
-+  "_A", "_B", "_C", "_G", "_L", "_N", "_P", "_S", "_T", "_U", "_X",
-+  "__deref", "__used", "__unused", "__inline", "_Complex",
-+  "__istype", "__maskrune", "__tolower", "__toupper", "__wchar_t",
-+  "__wint_t", "_res", "_res_ext", "_C2", "__lockable", "__null_sentinel",
-+  "__packed", "__weak", "__strong", "_In_", "_Inout_", "_Out_",
-+  "_Reserved_", "__inout", "__in_opt", "__out_opt"
-+};
-+
-+vec<tree> nonugly_names;
-+hash_set<tree> whitelist;
-+bool impl_ns;
-+
-+void
-+plugin_check_decl (tree decl)
-+{
-+  if (decl == NULL_TREE)
-+    return;
-+
-+  if (VAR_OR_FUNCTION_DECL_P (decl)
-+      && DECL_EXTERNAL (decl)
-+      && DECL_CONTEXT (decl)
-+      && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
-+    return;
-+
-+  tree name = DECL_NAME (decl);
-+  if (name == NULL_TREE
-+      || IDENTIFIER_ANON_P (name)
-+      || name == this_identifier
-+      || IDENTIFIER_ANY_OP_P (name))
-+    return;
-+
-+  const char *cname = IDENTIFIER_POINTER (name);
-+  if (memcmp (cname, "auto:", 5) == 0)
-+    return;
-+
-+  if (cname[0] != '_'
-+      || (cname[1] != '_'
-+	  && !ISUPPER (cname[1])
-+	  && cname[1]))
-+    {
-+      nonugly_names.safe_push (decl);
-+      return;
-+    }
-+
-+  bool badname = false;
-+  for (int i = 0; i < ARRAY_SIZE (badnames); ++i)
-+    if (strcmp (badnames[i], cname) == 0)
-+      {
-+	badname = true;
-+	break;
-+      }
-+  if (!badname && cname[1] == 'E' && ISDIGIT (cname[2]))
-+    {
-+      if (cname[2] != '0'
-+	  && (!cname[3] || ((cname[2] == '1' || cname[2] == '2')
-+			    && ISDIGIT (cname[3])
-+			    && !cname[4])))
-+	badname = true;
-+    }
-+  else if (memcmp (cname + 1, "_tg_", 4) == 0)
-+    badname = true;
-+  if (badname)
-+    inform (DECL_SOURCE_LOCATION (decl), "badname %qs", cname);
-+}
-+
-+tree
-+plugin_check_tree (tree *tp, int */*walk_subtrees*/, void */*data*/)
-+{
-+  if (TREE_CODE (*tp) == BIND_EXPR)
-+    for (tree var = BIND_EXPR_VARS (*tp); var; var = DECL_CHAIN (var))
-+      plugin_check_decl (var);
-+  if (TREE_CODE (*tp) == DECL_EXPR)
-+    plugin_check_decl (DECL_EXPR_DECL (*tp));
-+  return NULL_TREE;
-+}
-+
-+void
-+plugin_check_fn (tree decl)
-+{
-+  for (tree arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
-+    plugin_check_decl (arg);
-+
-+  if (DECL_DEFAULTED_FN (decl))
-+    return;
-+  cp_walk_tree_without_duplicates (&DECL_SAVED_TREE (decl), plugin_check_tree,
-+				   NULL);
-+}
-+
-+bool
-+plugin_header_check (tree decl)
-+{
-+  expanded_location eloc = expand_location (DECL_SOURCE_LOCATION (decl));
-+  if (eloc.file == NULL)
-+    return false;
-+  if (strstr (eloc.file, "/libstdc++-v3/include/") == NULL
-+      && strstr (eloc.file, "/libstdc++-v3/libsupc++/") == NULL)
-+    return false;
-+  return true;
-+}
-+
-+void
-+plugin_walk_decl (tree decl)
-+{
-+  if (TREE_CODE (decl) == NAMESPACE_DECL)
-+    {
-+      if (impl_ns
-+	  || (DECL_NAME (decl)
-+	      && IDENTIFIER_POINTER (DECL_NAME (decl))[0] != '_'
-+	      && !IDENTIFIER_ANON_P (DECL_NAME (decl)))
-+	  || DECL_NAMESPACE_INLINE_P (decl))
-+	plugin_walk_ns (decl);
-+      else
-+	{
-+	  impl_ns = true;
-+	  plugin_walk_ns (decl);
-+	  impl_ns = false;
-+	}
-+      return;
-+    }
-+
-+  if (!plugin_header_check (decl))
-+    return;
-+
-+  if (!impl_ns
-+      && DECL_NAME (decl)
-+      && !IDENTIFIER_ANON_P (DECL_NAME (decl))
-+      && !IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
-+      && IDENTIFIER_POINTER (DECL_NAME (decl))[0] != '_')
-+    whitelist.add (DECL_NAME (decl));
-+  else if (impl_ns && DECL_NAME (decl))
-+    plugin_check_decl (decl);
-+
-+  if (TREE_CODE (decl) == TEMPLATE_DECL)
-+    {
-+      tree parms = DECL_INNERMOST_TEMPLATE_PARMS (decl);
-+      for (tree node : tree_vec_range (parms))
-+	plugin_check_decl (TREE_VALUE (node));
-+    }
-+
-+  if (DECL_FUNCTION_TEMPLATE_P (decl))
-+    plugin_check_fn (DECL_TEMPLATE_RESULT (decl));
-+  else if (TREE_CODE (decl) == FUNCTION_DECL
-+	   && DECL_LANG_SPECIFIC (decl)
-+	   && DECL_TEMPLATE_INFO (decl))
-+    plugin_check_fn (decl);
-+
-+  if (DECL_CLASS_TEMPLATE_P (decl))
-+    decl = DECL_TEMPLATE_RESULT (decl);
-+  if (TREE_CODE (decl) == TYPE_DECL
-+      && DECL_IMPLICIT_TYPEDEF_P (decl))
-+    {
-+      bool save_impl_ns = impl_ns;
-+      if (impl_ns
-+	  && DECL_NAME (decl)
-+	  && id_equal (DECL_NAME (decl), "_Promise_erased")
-+	  && DECL_CONTEXT (decl)
-+	  && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
-+	  && DECL_NAME (DECL_CONTEXT (decl))
-+	  && id_equal (DECL_NAME (DECL_CONTEXT (decl)), "__gen"))
-+	/* Workaround: std::generator<R, V, A>::promise_type in
-+	   the standard is actually defined as std::__gen::_Promise_erased,
-+	   but we want to whitelist its members.  Temporarily clear
-+	   impl_ns in that class.  */
-+	impl_ns = false;
-+      if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (decl)))
-+	{
-+	  for (tree fld = TYPE_FIELDS (TREE_TYPE (decl));
-+	       fld; fld = DECL_CHAIN (fld))
-+	    plugin_walk_decl (fld);
-+	  for (tree f = DECL_FRIENDLIST (decl); f; f = TREE_CHAIN (f))
-+	    for (tree l = FRIEND_DECLS (f); l; l = TREE_CHAIN (l))
-+	      plugin_walk_decl (TREE_VALUE (l));
-+	}
-+      else if (TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
-+	for (tree en = TYPE_VALUES (TREE_TYPE (decl));
-+	     en; en = TREE_CHAIN (en))
-+	  plugin_walk_decl (TREE_VALUE (en));
-+      impl_ns = save_impl_ns;
-+    }
-+}
-+
-+void
-+plugin_walk_binding (tree binding)
-+{
-+  tree value = NULL_TREE;
-+
-+  if (STAT_HACK_P (binding))
-+    {
-+      if (!STAT_TYPE_HIDDEN_P (binding)
-+	  && STAT_TYPE (binding))
-+	return plugin_walk_decl (STAT_TYPE (binding));
-+      else if (!STAT_DECL_HIDDEN_P (binding))
-+	value = STAT_DECL (binding);
-+    }
-+  else
-+    value = binding;
-+
-+  value = ovl_skip_hidden (value);
-+  if (value)
-+    {
-+      value = OVL_FIRST (value);
-+      return plugin_walk_decl (value);
-+    }
-+}
-+
-+void
-+plugin_walk_ns (tree ns)
-+{
-+  using itert = hash_table<named_decl_hash>::iterator;
-+  itert end (DECL_NAMESPACE_BINDINGS (ns)->end ());
-+  for (itert iter (DECL_NAMESPACE_BINDINGS (ns)->begin ());
-+       iter != end; ++iter)
-+    {
-+      tree b = *iter;
-+      gcc_assert (TREE_CODE (b) != BINDING_VECTOR);
-+      plugin_walk_binding (b);
-+    }
-+}
-+
-+int
-+plugin_ctx_check (tree decl)
-+{
-+  int ret = 1;
-+  tree ctx = DECL_CONTEXT (decl);
-+  while (ctx)
-+    {
-+      if (ctx == std_node)
-+	return ret;
-+      if (TREE_CODE (ctx) == NAMESPACE_DECL
-+	  && DECL_NAME (ctx)
-+	  && id_equal (DECL_NAME (ctx), "__gnu_cxx")
-+	  && CP_DECL_CONTEXT (ctx) == global_namespace)
-+	return 2;
-+      if (TREE_CODE (ctx) == NAMESPACE_DECL
-+	  && (!DECL_NAME (ctx)
-+	      || IDENTIFIER_POINTER (DECL_NAME (ctx))[0] == '_'
-+	      || IDENTIFIER_ANON_P (DECL_NAME (ctx)))
-+	  && !DECL_NAMESPACE_INLINE_P (ctx))
-+	ret = 2;
-+      if (TYPE_P (ctx))
-+	ctx = TYPE_CONTEXT (ctx);
-+      else
-+	ctx = DECL_CONTEXT (ctx);
-+    }
-+  return 0;
-+}
-+
-+void
-+plugin_finish_parse_function (void *event_data, void *)
-+{
-+  tree decl = (tree) event_data;
-+  if (!plugin_header_check (decl))
-+    return;
-+
-+  /* Only diagnose stuff nested in ::std or ::__gnu_cxx
-+     namespaces.  */
-+  if (!plugin_ctx_check (decl))
-+    return;
-+
-+  /* Templates are handled from plugin_walk_ns.  */
-+  if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
-+    return;
-+  plugin_check_fn (decl);
-+}
-+
-+void
-+plugin_walk_specialization (bool, spec_entry *entry, void *)
-+{
-+  tree info;
-+  if (TYPE_P (entry->spec))
-+    info = TYPE_TEMPLATE_INFO (entry->spec);
-+  else
-+    info = DECL_TEMPLATE_INFO (entry->spec);
-+  if (PRIMARY_TEMPLATE_P (TI_TEMPLATE (info)) && TI_PARTIAL_INFO (info))
-+    info = TI_PARTIAL_INFO (info);
-+  tree decl = TI_TEMPLATE (info);
-+  if (int c = plugin_ctx_check (decl))
-+    {
-+      impl_ns = c == 2;
-+      plugin_walk_decl (decl);
-+    }
-+}
-+
-+void
-+plugin_finish_unit (void *, void *)
-+{
-+  plugin_walk_ns (std_node);
-+  tree gnucxx_ns = lookup_qualified_name (global_namespace, "__gnu_cxx");
-+  if (gnucxx_ns && TREE_CODE (gnucxx_ns) == NAMESPACE_DECL)
-+    plugin_walk_ns (gnucxx_ns);
-+  walk_specializations (false, plugin_walk_specialization, NULL);
-+  walk_specializations (true, plugin_walk_specialization, NULL);
-+  unsigned int i;
-+  tree decl;
-+  FOR_EACH_VEC_ELT (nonugly_names, i, decl)
-+    if (!whitelist.contains (DECL_NAME (decl)))
-+      inform (DECL_SOURCE_LOCATION (decl), "non-uglified name %qs",
-+	      IDENTIFIER_POINTER (DECL_NAME (decl)));
-+    else
-+      inform (DECL_SOURCE_LOCATION (decl), "non-uglified whitelisted name %qs",
-+	      IDENTIFIER_POINTER (DECL_NAME (decl)));
-+}
-+
-+void
-+plugin_ggc_walker (void *)
-+{
-+  unsigned int i;
-+  tree decl;
-+  FOR_EACH_VEC_ELT (nonugly_names, i, decl)
-+    gt_ggc_m_9tree_node (decl);
-+  for (hash_set<tree>::iterator it = whitelist.begin ();
-+       it != whitelist.end (); ++it)
-+    gt_ggc_m_9tree_node (*it);
-+}
-+
-+static const struct ggc_root_tab xtratab[] = {
-+  { (void *) &xtratab, 1, 1, plugin_ggc_walker, NULL },
-+  LAST_GGC_ROOT_TAB
-+};
-+
-+int
-+plugin_init (struct plugin_name_args *plugin_info,
-+	     struct plugin_gcc_version *version)
-+{
-+  const char *plugin_name = plugin_info->base_name;
-+
-+  register_callback (plugin_name, PLUGIN_FINISH_UNIT,
-+		     plugin_finish_unit, NULL);
-+  register_callback (plugin_name, PLUGIN_FINISH_PARSE_FUNCTION,
-+		     plugin_finish_parse_function, NULL);
-+  register_callback (plugin_name, PLUGIN_REGISTER_GGC_ROOTS,
-+		     NULL, (void *) xtratab);
-+
-+  return 0;
-+}
---- gcc/testsuite/g++.dg/plugin/uglification.C.jj	2026-03-18 16:48:34.395594980 +0100
-+++ gcc/testsuite/g++.dg/plugin/uglification.C	2026-03-18 16:59:12.929288908 +0100
-@@ -0,0 +1,151 @@
-+// Test that uglification_plugin.cc works properly.
-+// { dg-options "-O0 -std=c++20" }
-+
-+// Pretend this is in a libstdc++-v3 header.
-+#line 6 "gcc/libstdc++-v3/include/bits/universe.h"
-+
-+// Stuff outside of namespace std not reported.
-+int
-+foo (int a, int b)			// { dg-bogus "note: non-uglified name '\[ab]'" }
-+{
-+  int c = a + b;			// { dg-bogus "note: non-uglified name 'c'" }
-+  return c;
-+}
-+
-+namespace std {
-+  struct foo {
-+    int bar (int d, int __e) {		// { dg-message "note: non-uglified name 'd'" }
-+      int f = d + __e;			// { dg-message "note: non-uglified name 'f'" }
-+      int _E12 = f;			// { dg-message "note: badname '_E12'" }
-+      using g = int;			// { dg-message "note: non-uglified name 'g'" }
-+      return f + _E12;
-+    }
-+    template <typename T>		// { dg-message "note: non-uglified name 'T'" }
-+    int baz (int __h, int __tg_foo) {	// { dg-message "note: badname '__tg_foo'" }
-+      int i = __h;			// { dg-message "note: non-uglified name 'i'" }
-+      using j = int;			// { dg-message "note: non-uglified name 'j'" }
-+      return i;
-+    }
-+    template <double>
-+    int baz (int aa) {			// { dg-message "note: non-uglified name 'aa'" }
-+      int ab = aa;			// { dg-message "note: non-uglified name 'ab'" }
-+      using ac = double;		// { dg-message "note: non-uglified name 'ac'" }
-+      return ab;
-+    }
-+    int zz;				// { dg-bogus "note: non-uglified name 'zz'" }
-+  };
-+  template <typename _T>		// { dg-message "note: badname '_T'" }
-+  struct qux {
-+    int corge (int k, int __l) {	// { dg-message "note: non-uglified name 'k'" }
-+      int __maskrune = k + __l;		// { dg-message "note: badname '__maskrune'" }
-+      typedef std::foo __in_opt;	// { dg-message "note: badname '__in_opt'" }
-+      return __maskrune;
-+    }
-+    template <typename _Tp>
-+    int garply (int m) {		// { dg-message "note: non-uglified name 'm'" }
-+      int n = m;			// { dg-message "note: non-uglified name 'n'" }
-+      struct foo { int baz; } __o;	// { dg-message "note: non-uglified whitelisted name 'foo'" }
-+      __o.baz = n;
-+      return __o.baz;
-+    }
-+  };
-+  template <typename _Tp, typename _Up>
-+  struct S {
-+    S () = delete;
-+    ~S () = delete;
-+  };
-+  template <typename _Tp>
-+  struct S <_Tp, _Tp> {
-+    int grault (int ad) {		// { dg-message "note: non-uglified name 'ad'" }
-+      int ae = ad;			// { dg-message "note: non-uglified name 'ae'" }
-+      return ae;
-+    }
-+    int quux () { return 0; }
-+  };
-+  template <>
-+  struct S <int, long> {
-+    int grault (int af) {		// { dg-message "note: non-uglified name 'af'" }
-+      int ag = af;			// { dg-message "note: non-uglified name 'ag'" }
-+      return ag;
-+    }
-+  };
-+
-+  inline namespace __cxx11 {
-+    enum freddy {
-+      frog, waldo
-+    };
-+    struct fred {
-+      int garply (int p) {		// { dg-message "note: non-uglified name 'p'" }
-+	int _res_ext = p;		// { dg-message "note: non-uglified name '_res_ext'" }
-+	return _res_ext;
-+      }
-+    };
-+  }
-+  namespace __gnu_cxx {
-+    template <typename ...U>		// { dg-message "note: non-uglified name 'U'" }
-+    int foo (U... q) {			// { dg-message "note: non-uglified name 'q'" }
-+      return 0;				// { dg-message "note: non-uglified whitelisted name 'foo'" "" { target *-*-* } .-1 }
-+    }
-+    enum blah {				// { dg-message "note: non-uglified name 'blah'" }
-+      plugh,				// { dg-message "note: non-uglified name 'plugh'" }
-+      thud,				// { dg-message "note: non-uglified name 'thud'" }
-+      _E5,				// { dg-message "note: badname '_E5'" }
-+      garply,				// { dg-message "note: non-uglified whitelisted name 'garply'" }
-+      grault,				// { dg-message "note: non-uglified whitelisted name 'grault'" }
-+      quux,				// { dg-message "note: non-uglified whitelisted name 'quux'" }
-+      lorem,				// { dg-message "note: non-uglified whitelisted name 'lorem'" }
-+      ipsum,				// { dg-message "note: non-uglified whitelisted name 'ipsum'" }
-+      dolor,				// { dg-message "note: non-uglified whitelisted name 'dolor'" }
-+      sit,				// { dg-message "note: non-uglified whitelisted name 'sit'" }
-+      amet,				// { dg-message "note: non-uglified whitelisted name 'amet'" }
-+      consectetur,			// { dg-message "note: non-uglified whitelisted name 'consectetur'" }
-+      adipiscing,			// { dg-message "note: non-uglified whitelisted name 'adipiscing'" }
-+      elit				// { dg-message "note: non-uglified whitelisted name 'elit'" }
-+    };
-+    int waldo (int r) {			// { dg-message "note: non-uglified name 'r'" }
-+      using s = std::foo;		// { dg-message "note: non-uglified name 's'" }
-+      return r;				// { dg-message "note: non-uglified whitelisted name 'waldo'" "" { target *-*-* } .-2 }
-+    }
-+    int xyzzy () { return 0; }		// { dg-message "note: non-uglified whitelisted name 'xyzzy'" }
-+    int barf () { return 0; }		// { dg-message "note: non-uglified name 'barf'" }
-+    int __foobar () { return 0; }
-+    struct V {				// { dg-message "note: non-uglified name 'V'" }
-+      union {
-+	int t;				// { dg-message "note: non-uglified name 't'" }
-+      };
-+      int zz () { return 0; }		// { dg-message "note: non-uglified whitelisted name 'zz'" }
-+      int ww () { return 0; }		// { dg-message "note: non-uglified name 'ww'" }
-+    };
-+  }
-+  int xyzzy (int s) {			// { dg-message "note: non-uglified name 's'" }
-+    return s;
-+  }
-+  template <int _Idx>
-+  struct lorem {
-+    template <int _Idx2>
-+    friend int ipsum (int ah) {		// { dg-message "note: non-uglified name 'ah'" }
-+      int ai = ah;			// { dg-message "note: non-uglified name 'ai'" }
-+      return ai;
-+    }
-+  };
-+  template <int _Idx>
-+  struct dolor {
-+    friend int sit (int aj) {		// { dg-message "note: non-uglified name 'aj'" }
-+      int ak = aj;			// { dg-message "note: non-uglified name 'ak'" }
-+      return ak;
-+    }
-+  };
-+  struct amet {
-+    template <int _Idx>
-+    friend int consectetur (int al) {	// { dg-message "note: non-uglified name 'al'" }
-+      int am = al;			// { dg-message "note: non-uglified name 'am'" }
-+      return am;
-+    }
-+  };
-+  struct adipiscing {
-+    friend int elit (int an) {		// { dg-message "note: non-uglified name 'an'" }
-+      int ao = an;			// { dg-message "note: non-uglified name 'ao'" }
-+      return ao;
-+    }
-+  };
-+}
---- gcc/testsuite/g++.dg/plugin/uglification-c++98.C.jj	2026-03-18 16:48:34.395699755 +0100
-+++ gcc/testsuite/g++.dg/plugin/uglification-c++98.C	2026-03-18 16:48:34.395699755 +0100
-@@ -0,0 +1,9 @@
-+// Verify template parameter names, names of arguments and block scope decls
-+// in functions and function templates are uglified and don't contain
-+// badnames.
-+// { dg-options "-O0 -std=c++98" }
-+
-+#include <bits/stdc++.h>
-+
-+// { dg-bogus "note: non-uglified name" "" { target *-*-* } 0 }
-+// { dg-bogus "note: badname" "" { target *-*-* } 0 }
---- gcc/testsuite/g++.dg/plugin/uglification-c++11.C.jj	2026-03-18 16:48:34.395778236 +0100
-+++ gcc/testsuite/g++.dg/plugin/uglification-c++11.C	2026-03-18 16:48:34.395778236 +0100
-@@ -0,0 +1,9 @@
-+// Verify template parameter names, names of arguments and block scope decls
-+// in functions and function templates are uglified and don't contain
-+// badnames.
-+// { dg-options "-O0 -std=c++11" }
-+
-+#include <bits/stdc++.h>
-+
-+// { dg-bogus "note: non-uglified name" "" { target *-*-* } 0 }
-+// { dg-bogus "note: badname" "" { target *-*-* } 0 }
---- gcc/testsuite/g++.dg/plugin/uglification-c++14.C.jj	2026-03-18 16:48:34.395852292 +0100
-+++ gcc/testsuite/g++.dg/plugin/uglification-c++14.C	2026-03-18 16:48:34.395852292 +0100
-@@ -0,0 +1,9 @@
-+// Verify template parameter names, names of arguments and block scope decls
-+// in functions and function templates are uglified and don't contain
-+// badnames.
-+// { dg-options "-O0 -std=c++14" }
-+
-+#include <bits/stdc++.h>
-+
-+// { dg-bogus "note: non-uglified name" "" { target *-*-* } 0 }
-+// { dg-bogus "note: badname" "" { target *-*-* } 0 }
---- gcc/testsuite/g++.dg/plugin/uglification-c++17.C.jj	2026-03-18 16:48:34.395946403 +0100
-+++ gcc/testsuite/g++.dg/plugin/uglification-c++17.C	2026-03-18 16:48:34.395946403 +0100
-@@ -0,0 +1,9 @@
-+// Verify template parameter names, names of arguments and block scope decls
-+// in functions and function templates are uglified and don't contain
-+// badnames.
-+// { dg-options "-O0 -std=c++17" }
-+
-+#include <bits/stdc++.h>
-+
-+// { dg-bogus "note: non-uglified name" "" { target *-*-* } 0 }
-+// { dg-bogus "note: badname" "" { target *-*-* } 0 }
---- gcc/testsuite/g++.dg/plugin/uglification-c++20.C.jj	2026-03-18 16:48:34.396022165 +0100
-+++ gcc/testsuite/g++.dg/plugin/uglification-c++20.C	2026-03-18 16:48:34.396022165 +0100
-@@ -0,0 +1,9 @@
-+// Verify template parameter names, names of arguments and block scope decls
-+// in functions and function templates are uglified and don't contain
-+// badnames.
-+// { dg-options "-O0 -std=c++20" }
-+
-+#include <bits/stdc++.h>
-+
-+// { dg-bogus "note: non-uglified name" "" { target *-*-* } 0 }
-+// { dg-bogus "note: badname" "" { target *-*-* } 0 }
---- gcc/testsuite/g++.dg/plugin/uglification-c++23.C.jj	2026-03-18 16:48:34.396096554 +0100
-+++ gcc/testsuite/g++.dg/plugin/uglification-c++23.C	2026-03-18 16:48:34.396096554 +0100
-@@ -0,0 +1,9 @@
-+// Verify template parameter names, names of arguments and block scope decls
-+// in functions and function templates are uglified and don't contain
-+// badnames.
-+// { dg-options "-O0 -std=c++23" }
-+
-+#include <bits/stdc++.h>
-+
-+// { dg-bogus "note: non-uglified name" "" { target *-*-* } 0 }
-+// { dg-bogus "note: badname" "" { target *-*-* } 0 }
---- gcc/testsuite/g++.dg/plugin/uglification-c++26.C.jj	2026-03-18 16:48:34.396169901 +0100
-+++ gcc/testsuite/g++.dg/plugin/uglification-c++26.C	2026-03-18 16:48:34.396169901 +0100
-@@ -0,0 +1,9 @@
-+// Verify template parameter names, names of arguments and block scope decls
-+// in functions and function templates are uglified and don't contain
-+// badnames.
-+// { dg-options "-O0 -std=c++26 -freflection -fcontracts" }
-+
-+#include <bits/stdc++.h>
-+
-+// { dg-bogus "note: non-uglified name" "" { target *-*-* } 0 }
-+// { dg-bogus "note: badname" "" { target *-*-* } 0 }

diff --git a/gcc16-uglification2.patch b/gcc16-uglification2.patch
deleted file mode 100644
index e53ed27..0000000
--- a/gcc16-uglification2.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-2026-04-09  Jakub Jelinek  <jakub@redhat.com>
-
-	* g++.dg/plugin/uglification_plugin.cc (plugin_check_tree): Walk
-	REQUIRES_EXPR_PARMS of REQUIRES_EXPR.
-	(plugin_walk_decl): Walk TEMPLATE_PARMS_CONSTRAINTS using
-	plugin_check_tree.  Walk DECL_INITIAL of CONCEPT_DECL as well.
-	* g++.dg/plugin/uglification.C: Add tests for non-uglified names
-	in lambda parameters, lambda captures and requires expressions.
-
---- gcc/testsuite/g++.dg/plugin/uglification_plugin.cc.jj	2026-04-09 12:23:44.001071999 +0200
-+++ gcc/testsuite/g++.dg/plugin/uglification_plugin.cc	2026-04-09 13:31:41.924617700 +0200
-@@ -89,6 +89,9 @@ plugin_check_tree (tree *tp, int */*walk
-       plugin_check_decl (var);
-   if (TREE_CODE (*tp) == DECL_EXPR)
-     plugin_check_decl (DECL_EXPR_DECL (*tp));
-+  if (TREE_CODE (*tp) == REQUIRES_EXPR)
-+    for (tree parm = REQUIRES_EXPR_PARMS (*tp); parm; parm = DECL_CHAIN (parm))
-+      plugin_check_decl (parm);
-   return NULL_TREE;
- }
- 
-@@ -153,6 +156,10 @@ plugin_walk_decl (tree decl)
-       tree parms = DECL_INNERMOST_TEMPLATE_PARMS (decl);
-       for (tree node : tree_vec_range (parms))
- 	plugin_check_decl (TREE_VALUE (node));
-+      if (tree constr
-+	  = TEMPLATE_PARMS_CONSTRAINTS (DECL_TEMPLATE_PARMS (decl)))
-+        cp_walk_tree_without_duplicates (&constr, plugin_check_tree,
-+					 NULL);
-     }
- 
-   if (DECL_FUNCTION_TEMPLATE_P (decl))
-@@ -162,6 +169,10 @@ plugin_walk_decl (tree decl)
- 	   && DECL_TEMPLATE_INFO (decl))
-     plugin_check_fn (decl);
- 
-+  if (TREE_CODE (STRIP_TEMPLATE (decl)) == CONCEPT_DECL)
-+    cp_walk_tree_without_duplicates (&DECL_INITIAL (STRIP_TEMPLATE (decl)),
-+				     plugin_check_tree, NULL);
-+
-   if (DECL_CLASS_TEMPLATE_P (decl))
-     decl = DECL_TEMPLATE_RESULT (decl);
-   if (TREE_CODE (decl) == TYPE_DECL
---- gcc/testsuite/g++.dg/plugin/uglification.C.jj	2026-04-09 12:23:44.001236292 +0200
-+++ gcc/testsuite/g++.dg/plugin/uglification.C	2026-04-09 12:56:06.267164891 +0200
-@@ -148,4 +148,16 @@ namespace std {
-       return ao;
-     }
-   };
-+  void sed (int __ap) {
-+    auto __aq = [] (int ar) {};		// { dg-message "note: non-uglified name 'ar'" }
-+    auto __as = [at = __ap] () {};	// { dg-message "note: non-uglified name 'at'" }
-+  }
-+  template <typename _Tp>
-+  concept eiusmod = requires (_Tp au) {	// { dg-message "note: non-uglified name 'au'" }
-+    au++;
-+  };
-+  template <typename ..._Tp>
-+  requires ((requires (const _Tp av) {	// { dg-message "note: non-uglified name 'av'" }
-+    av++; }) && ...)
-+  void tempor (_Tp ...aw) {}		// { dg-message "note: non-uglified name 'aw'" }
- }

diff --git a/sources b/sources
index ed009f9..bc3f25f 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-16.0.1-20260416.tar.xz) = 89f42610012f59eca9be12686533f9cf9bac388d581dd52aab6394555a3705fa1784a5534c5a1cf57935671139849021fb42f7af0261af29c1904676a799a93f
+SHA512 (gcc-16.1.1-20260501.tar.xz) = 92019d45dd135a1642c8e8ef2b8e71153c4be2ff59994c28c22eae97ac74ddded4f2aa7d9729af9fb3b7de8401e497e2bc984a28ab7eebf8443ce5b99665bf27
 SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
 SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
 SHA512 (nvptx-tools-212da2e781ed0f9423824e85eb04819958513f7a.tar.xz) = 5a5509b0513843254ee2be277e0b8d4733f643b74b98c739e82872181a2c366b9b43de9e5fb505aa1e9967a382da59cab015f63011cbcb5972971f2160870f00

^ permalink raw reply related	[flat|nested] 2+ messages in thread
* [rpms/gcc] snapshot: 16.1.1-1
@ 2026-06-04 14:12 Jakub Jelinek
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Jelinek @ 2026-06-04 14:12 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/gcc
Branch : snapshot
Commit : 665ab38c17c4c20a5e73cfc705cd519a27be052b
Author : Jakub Jelinek <jakub@redhat.com>
Date   : 2026-05-01T21:59:16+02:00
Stats  : +33/-0 in 2 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/665ab38c17c4c20a5e73cfc705cd519a27be052b?branch=snapshot

Log:
16.1.1-1

---
diff --git a/gcc.spec b/gcc.spec
index 0598c4f..7e158fd 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -323,6 +323,7 @@ Patch9: gcc16-Wno-format-security.patch
 Patch10: gcc16-rh1574936.patch
 Patch11: gcc16-d-shared-libphobos.patch
 Patch12: gcc16-pr119006.patch
+Patch13: gcc16-pr125079.patch
 
 Patch50: isl-rh2155127.patch
 

diff --git a/gcc16-pr125079.patch b/gcc16-pr125079.patch
new file mode 100644
index 0000000..7cb2ce6
--- /dev/null
+++ b/gcc16-pr125079.patch
@@ -0,0 +1,32 @@
+2026-05-01  Jakub Jelinek  <jakub@redhat.com>
+
+	PR tree-optimization/125079
+	* tree-ssa-strlen.cc (get_string_length): Don't overwrite
+	lenstmt variable with another stmt.
+
+--- gcc/tree-ssa-strlen.cc.jj	2026-05-01 14:56:28.322882547 +0200
++++ gcc/tree-ssa-strlen.cc	2026-05-01 21:53:56.978672178 +0200
+@@ -848,7 +848,7 @@ get_string_length (strinfo *si)
+      attempt to compute the length from the call statement.  */
+   if (si->stmt)
+     {
+-      gimple *stmt = si->stmt, *lenstmt = NULL;
++      gimple *stmt = si->stmt, *lenstmt = NULL, *g;
+       tree callee, lhs, fn, tem;
+       location_t loc;
+       gimple_stmt_iterator gsi;
+@@ -883,11 +883,11 @@ get_string_length (strinfo *si)
+               lhs = force_gimple_operand_gsi (&gsi, lhs, true, NULL_TREE,
+                                               true, GSI_SAME_STMT);
+             }
+-	  lenstmt = gimple_build_assign
++	  g = gimple_build_assign
+ 			(make_ssa_name (TREE_TYPE (gimple_call_arg (stmt, 0))),
+ 			 POINTER_PLUS_EXPR,tem, lhs);
+-	  gsi_insert_before (&gsi, lenstmt, GSI_SAME_STMT);
+-	  gimple_call_set_arg (stmt, 0, gimple_assign_lhs (lenstmt));
++	  gsi_insert_before (&gsi, g, GSI_SAME_STMT);
++	  gimple_call_set_arg (stmt, 0, gimple_assign_lhs (g));
+ 	  lhs = NULL_TREE;
+ 	  /* FALLTHRU */
+ 	case BUILT_IN_STRCPY:

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-06-04 14:12 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-04 14:12 [rpms/gcc] snapshot: 16.1.1-1 Jakub Jelinek
  -- strict thread matches above, loose matches on Subject: below --
2026-06-04 14:12 Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox