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