From d021080ea76b57941380df631582f8109f8ede6f Mon Sep 17 00:00:00 2001
From: Siddhesh Poyarekar
Date: Tue, 24 Sep 2024 22:02:48 -0400
Subject: [PATCH 01/71] Default tuning to power 10 for RHEL10 and later
---
gcc.spec | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index 8b0d09d..f6cf2ec 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -4,7 +4,7 @@
%global gcc_major 14
# 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 3
+%global gcc_release 4
%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
%global newlib_cygwin_gitrev d45261f62a15f8abd94a1031020b9a9f455e4eed
%global _unpackaged_files_terminate_build 0
@@ -1190,7 +1190,11 @@ CONFIGURE_OPTS="\
%endif
%ifarch ppc64le
%if 0%{?rhel} >= 9
+%if 0%{?rhel} >= 10
+ --with-cpu-32=power9 --with-tune-32=power10 --with-cpu-64=power9 --with-tune-64=power10 \
+%else
--with-cpu-32=power9 --with-tune-32=power9 --with-cpu-64=power9 --with-tune-64=power9 \
+%endif
%else
--with-cpu-32=power8 --with-tune-32=power8 --with-cpu-64=power8 --with-tune-64=power8 \
%endif
@@ -3618,6 +3622,9 @@ end
%endif
%changelog
+* Wed Sep 25 2024 Siddhesh Poyarekar 14.2.1-4
+- Default tuning to power 10 for RHEL10 and later.
+
* Thu Sep 12 2024 Jakub Jelinek 14.2.1-3
- update from releases/gcc-14 branch
- PRs c++/116276, c++/116320, c++/116449, c++/116567, c++/116606,
From a706a6fd254c547da3492deb3b80a3855fc6dd5c Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Mon, 30 Sep 2024 18:28:17 +0200
Subject: [PATCH 02/71] Use https:// instead of git:// in git URLs.
---
gcc.spec | 2 +-
update-gcc.sh | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/gcc.spec b/gcc.spec
index f6cf2ec..15a2c71 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -171,7 +171,7 @@ Source0: gcc-%{version}-%{DATE}.tar.xz
Source1: nvptx-tools-%{nvptx_tools_gitrev}.tar.xz
# The source for nvptx-newlib package was pulled from upstream's vcs. Use the
# following commands to generate the tarball:
-# git clone git://sourceware.org/git/newlib-cygwin.git newlib-cygwin-dir.tmp
+# git clone https://sourceware.org/git/newlib-cygwin.git newlib-cygwin-dir.tmp
# git --git-dir=newlib-cygwin-dir.tmp/.git archive --prefix=newlib-cygwin-%%{newlib_cygwin_gitrev}/ %%{newlib_cygwin_gitrev} ":(exclude)newlib/libc/sys/linux/include/rpc/*.[hx]" | xz -9e > newlib-cygwin-%%{newlib_cygwin_gitrev}.tar.xz
# rm -rf newlib-cygwin-dir.tmp
Source2: newlib-cygwin-%{newlib_cygwin_gitrev}.tar.xz
diff --git a/update-gcc.sh b/update-gcc.sh
index 93160c9..47d7d70 100755
--- a/update-gcc.sh
+++ b/update-gcc.sh
@@ -10,9 +10,9 @@ v=`sed -n 's/^%global gcc_version //p' gcc.spec`
p=`sed -n 's/^%global gitrev //p' gcc.spec`
h=$1
if [ "$#" -ge 2 ]; then
- git clone --dissociate --reference $2 git://gcc.gnu.org/git/gcc.git gcc-dir.tmp
+ git clone --dissociate --reference $2 https://gcc.gnu.org/git/gcc.git gcc-dir.tmp
else
- git clone git://gcc.gnu.org/git/gcc.git gcc-dir.tmp
+ git clone https://gcc.gnu.org/git/gcc.git gcc-dir.tmp
fi
git --git-dir=gcc-dir.tmp/.git fetch origin $h
d=`date --iso | sed 's/-//g'`
From 8cd5593dfc446499c94c4385edd31bda436e7d9c Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Fri, 25 Oct 2024 17:45:57 +0200
Subject: [PATCH 03/71] 14.2.1-5
---
.gitignore | 1 +
gcc.spec | 36 ++++++++++++++++++++++++++++++++----
sources | 2 +-
3 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/.gitignore b/.gitignore
index e67d87e..457da17 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,4 @@
/gcc-14.2.1-20240801.tar.xz
/gcc-14.2.1-20240905.tar.xz
/gcc-14.2.1-20240912.tar.xz
+/gcc-14.2.1-20241025.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 15a2c71..185f371 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20240912
-%global gitrev c7a1c1a4bf73b3cb4943c428085fe5cbb433cde4
+%global DATE 20241025
+%global gitrev 3f6cf880bdadb4404d5540bad605ceec58261359
%global gcc_version 14.2.1
%global gcc_major 14
# 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 4
+%global gcc_release 5
%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
%global newlib_cygwin_gitrev d45261f62a15f8abd94a1031020b9a9f455e4eed
%global _unpackaged_files_terminate_build 0
@@ -3622,8 +3622,36 @@ end
%endif
%changelog
+* Fri Oct 25 2024 Jakub Jelinek 14.2.1-5
+- update from releases/gcc-14 branch
+ - PRs ada/114593, ada/114636, ada/114640, ada/115535, ada/116190,
+ ada/116430, ada/116551, c/116726, c/117230, c++/96097, c++/115361,
+ c++/115987, c++/116369, c++/116418, c++/116424, c++/116476,
+ c++/116492, c++/116534, c++/116676, c++/116678, c++/116929,
+ c++/117054, c++/117107, c++/117259, c++/117274, fortran/84868,
+ fortran/100273, ipa/109985, ipa/115815, libstdc++/37475,
+ libstdc++/108619, libstdc++/116529, libstdc++/116754,
+ libstdc++/116755, libstdc++/116777, libstdc++/116857,
+ libstdc++/117085, libstdc++/117094, libstdc++/117135,
+ middle-end/115110, middle-end/115426, middle-end/115641,
+ middle-end/116258, middle-end/116259, middle-end/116454,
+ middle-end/116891, middle-end/116898, middle-end/116899,
+ middle-end/117086, middle-end/117249, sanitizer/117209, target/115860,
+ target/116237, target/116627, target/116738, target/116839,
+ target/116883, target/116921, target/116953, target/116962,
+ target/117116, target/117159, target/117240, testsuite/116238,
+ tree-optimization/116166, tree-optimization/116258,
+ tree-optimization/116274, tree-optimization/116290,
+ tree-optimization/116380, tree-optimization/116460,
+ tree-optimization/116481, tree-optimization/116585,
+ tree-optimization/116610, tree-optimization/116768,
+ tree-optimization/116850, tree-optimization/116879,
+ tree-optimization/116907, tree-optimization/116982,
+ tree-optimization/116990, tree-optimization/117041,
+ tree-optimization/117104
+
* Wed Sep 25 2024 Siddhesh Poyarekar 14.2.1-4
-- Default tuning to power 10 for RHEL10 and later.
+- default tuning to power 10 for RHEL10 and later
* Thu Sep 12 2024 Jakub Jelinek 14.2.1-3
- update from releases/gcc-14 branch
diff --git a/sources b/sources
index 0010d99..27042d2 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-14.2.1-20240912.tar.xz) = 9a36fd5c2211f348bf18e887861c9123745bfa40837a5f92b1cd0ee0820edb7ef59094caac06870f00ef0d0305f674a5c23cc5aec940132cf581cd18c0368bb2
+SHA512 (gcc-14.2.1-20241025.tar.xz) = 1729619d7c0ebdb6801f692f213ccdd2f393d28d2c2acc3cedc897992c0996d45d760e9f4bd4d6f3ef16c7343a1e24c21c45989fa6c08ba1556fa8c9a5662d5f
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d45261f62a15f8abd94a1031020b9a9f455e4eed.tar.xz) = 31bfc19429797236e268e22b752c5abeabb9c0f39b1058634af8dab329b4f028fc72a35888193c9575f6cee5cf2c069669d79fcb4d4e3a4318f57413452f707d
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 3c526fa26bef8d41eeeef476e14bb5fa2c421aa4 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Fri, 25 Oct 2024 17:59:54 +0200
Subject: [PATCH 04/71] 14.2.1-5
---
gcc.spec | 2 -
gcc14-pr116621.patch | 100 -------------------------------------------
2 files changed, 102 deletions(-)
delete mode 100644 gcc14-pr116621.patch
diff --git a/gcc.spec b/gcc.spec
index 185f371..6b499c8 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -305,7 +305,6 @@ Patch9: gcc14-Wno-format-security.patch
Patch10: gcc14-rh1574936.patch
Patch11: gcc14-d-shared-libphobos.patch
Patch12: gcc14-pr101523.patch
-Patch13: gcc14-pr116621.patch
Patch50: isl-rh2155127.patch
@@ -907,7 +906,6 @@ so that there cannot be any synchronization problems.
%endif
%patch -P11 -p0 -b .d-shared-libphobos~
%patch -P12 -p1 -b .pr101523~
-%patch -P13 -p0 -b .pr116621~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
diff --git a/gcc14-pr116621.patch b/gcc14-pr116621.patch
deleted file mode 100644
index caa9e63..0000000
--- a/gcc14-pr116621.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-Author: H.J. Lu
-Date: Fri Sep 6 05:24:07 2024 -0700
-
-x86-64: Don't use temp for argument in a TImode register
-
-Don't use temp for a PARALLEL BLKmode argument of an EXPR_LIST expression
-in a TImode register. Otherwise, the TImode variable will be put in
-the GPR save area which guarantees only 8-byte alignment.
-
- PR target/116621
- * config/i386/i386.cc (ix86_gimplify_va_arg): Don't use temp for
- a PARALLEL BLKmode container of an EXPR_LIST expression in a
- TImode register.
-
- * gcc.target/i386/pr116621.c: New test.
-
-Signed-off-by: H.J. Lu
-
---- gcc/config/i386/i386.cc
-+++ gcc/config/i386/i386.cc
-@@ -4908,13 +4908,31 @@ ix86_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p,
-
- examine_argument (nat_mode, type, 0, &needed_intregs, &needed_sseregs);
-
-- need_temp = (!REG_P (container)
-+ bool container_in_reg = false;
-+ if (REG_P (container))
-+ container_in_reg = true;
-+ else if (GET_CODE (container) == PARALLEL
-+ && GET_MODE (container) == BLKmode
-+ && XVECLEN (container, 0) == 1)
-+ {
-+ /* Check if it is a PARALLEL BLKmode container of an EXPR_LIST
-+ expression in a TImode register. In this case, temp isn't
-+ needed. Otherwise, the TImode variable will be put in the
-+ GPR save area which guarantees only 8-byte alignment. */
-+ rtx x = XVECEXP (container, 0, 0);
-+ if (GET_CODE (x) == EXPR_LIST
-+ && REG_P (XEXP (x, 0))
-+ && XEXP (x, 1) == const0_rtx)
-+ container_in_reg = true;
-+ }
-+
-+ need_temp = (!container_in_reg
- && ((needed_intregs && TYPE_ALIGN (type) > 64)
- || TYPE_ALIGN (type) > 128));
-
- /* In case we are passing structure, verify that it is consecutive block
- on the register save area. If not we need to do moves. */
-- if (!need_temp && !REG_P (container))
-+ if (!need_temp && !container_in_reg)
- {
- /* Verify that all registers are strictly consecutive */
- if (SSE_REGNO_P (REGNO (XEXP (XVECEXP (container, 0, 0), 0))))
---- gcc/testsuite/gcc.target/i386/pr116621.c
-+++ gcc/testsuite/gcc.target/i386/pr116621.c
-@@ -0,0 +1,43 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+
-+#include
-+#include
-+
-+union S8302
-+{
-+ union
-+ {
-+ double b;
-+ int c;
-+ } a;
-+ long double d;
-+ unsigned short int f[5];
-+};
-+
-+union S8302 s8302;
-+extern void check8302va (int i, ...);
-+
-+int
-+main (void)
-+{
-+ memset (&s8302, '\0', sizeof (s8302));
-+ s8302.a.b = -221438.250000;
-+ check8302va (1, s8302);
-+ return 0;
-+}
-+
-+__attribute__((noinline, noclone))
-+void
-+check8302va (int z, ...)
-+{
-+ union S8302 arg, *p;
-+ va_list ap;
-+
-+ __builtin_va_start (ap, z);
-+ p = &s8302;
-+ arg = __builtin_va_arg (ap, union S8302);
-+ if (p->a.b != arg.a.b)
-+ __builtin_abort ();
-+ __builtin_va_end (ap);
-+}
From 02c34dfa3627ef05d676d30e152a66e77b58529b Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Mon, 4 Nov 2024 16:02:03 +0100
Subject: [PATCH 05/71] 14.2.1-6
---
.gitignore | 1 +
gcc.spec | 13 ++++++++++---
sources | 2 +-
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/.gitignore b/.gitignore
index 457da17..a0bbeb8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,4 @@
/gcc-14.2.1-20240905.tar.xz
/gcc-14.2.1-20240912.tar.xz
/gcc-14.2.1-20241025.tar.xz
+/gcc-14.2.1-20241104.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 6b499c8..e74627b 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20241025
-%global gitrev 3f6cf880bdadb4404d5540bad605ceec58261359
+%global DATE 20241104
+%global gitrev b84ce6a258e01f6559a1855b5f1d1ba4e69a927b
%global gcc_version 14.2.1
%global gcc_major 14
# 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 5
+%global gcc_release 6
%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
%global newlib_cygwin_gitrev d45261f62a15f8abd94a1031020b9a9f455e4eed
%global _unpackaged_files_terminate_build 0
@@ -3620,6 +3620,13 @@ end
%endif
%changelog
+* Mon Nov 4 2024 Jakub Jelinek 14.2.1-6
+- update from releases/gcc-14 branch
+ - PRs fortran/79685, jit/117275, libstdc++/117321, libstdc++/117406,
+ middle-end/117354, rtl-optimization/116783, rtl-optimization/117327,
+ target/116415, target/117296, target/117318, tree-optimization/107467,
+ tree-optimization/117287
+
* Fri Oct 25 2024 Jakub Jelinek 14.2.1-5
- update from releases/gcc-14 branch
- PRs ada/114593, ada/114636, ada/114640, ada/115535, ada/116190,
diff --git a/sources b/sources
index 27042d2..df7802d 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-14.2.1-20241025.tar.xz) = 1729619d7c0ebdb6801f692f213ccdd2f393d28d2c2acc3cedc897992c0996d45d760e9f4bd4d6f3ef16c7343a1e24c21c45989fa6c08ba1556fa8c9a5662d5f
+SHA512 (gcc-14.2.1-20241104.tar.xz) = 4a453e1b7e2712fd2a12d28cf2aaf8e76c789f7e747218cdf867eaca84e381305bf119c7db873c5c3f0981657dbefcded77ad74a0960034b95232d906e4b02d0
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d45261f62a15f8abd94a1031020b9a9f455e4eed.tar.xz) = 31bfc19429797236e268e22b752c5abeabb9c0f39b1058634af8dab329b4f028fc72a35888193c9575f6cee5cf2c069669d79fcb4d4e3a4318f57413452f707d
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 806e75093dd637270102e8d2896b9c6c40015166 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 5 Dec 2024 20:07:10 +0100
Subject: [PATCH 06/71] Fix up #2330362
---
gcc.spec | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index e74627b..56d6445 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -931,7 +931,7 @@ LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi
sed -i -e '/ldp_fusion/s/Init(1)/Init(0)/' gcc/config/aarch64/aarch64.opt
sed -i -e 's/Common Driver Var(flag_report_bug)/& Init(1)/' gcc/common.opt
-sed -i -e 's/context->report_bug = false;/context->report_bug = true;/' gcc/diagnostic.cc
+sed -i -e 's/m_report_bug = false;/m_report_bug = true;/' gcc/diagnostic.cc
%ifarch ppc
if [ -d libstdc++-v3/config/abi/post/powerpc64-linux-gnu ]; then
@@ -3620,6 +3620,8 @@ end
%endif
%changelog
+- fix up -freport-bug default (#2330362)
+
* Mon Nov 4 2024 Jakub Jelinek 14.2.1-6
- update from releases/gcc-14 branch
- PRs fortran/79685, jit/117275, libstdc++/117321, libstdc++/117406,
From 82653994cffc3120d34d3f49c6e3b01ff824f8c1 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 5 Dec 2024 20:15:14 +0100
Subject: [PATCH 07/71] Also revert -mearly-ldp-fusion and -mlate-ldp-fusion
default hack
---
gcc.spec | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/gcc.spec b/gcc.spec
index 56d6445..52dd90a 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -928,8 +928,6 @@ cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h
LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi
-sed -i -e '/ldp_fusion/s/Init(1)/Init(0)/' gcc/config/aarch64/aarch64.opt
-
sed -i -e 's/Common Driver Var(flag_report_bug)/& Init(1)/' gcc/common.opt
sed -i -e 's/m_report_bug = false;/m_report_bug = true;/' gcc/diagnostic.cc
@@ -3621,6 +3619,8 @@ end
%changelog
- fix up -freport-bug default (#2330362)
+- revert -mearly-ldp-fusion and -mlate-ldp-fusion default to enabled on
+ aarch64 to match upstream
* Mon Nov 4 2024 Jakub Jelinek 14.2.1-6
- update from releases/gcc-14 branch
From e48becc49a47cc974fdae2dec9c325c4286b93b5 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 9 Jan 2025 09:20:53 +0100
Subject: [PATCH 08/71] gcc-15.0.0-0.3
---
.gitignore | 29 +-
gcc.spec | 651 +++---------------
gcc14-pr101523.patch | 76 --
...y.patch => gcc15-Wno-format-security.patch | 18 +-
...os.patch => gcc15-d-shared-libphobos.patch | 0
...tch => gcc15-fortran-fdec-duplicates.patch | 0
gcc14-hack.patch => gcc15-hack.patch | 88 ++-
gcc14-isl-dl.patch => gcc15-isl-dl.patch | 8 +-
gcc14-isl-dl2.patch => gcc15-isl-dl2.patch | 8 +-
...atch => gcc15-libgomp-omp_h-multilib.patch | 0
...+-docs.patch => gcc15-libstdc++-docs.patch | 10 +-
...path.patch => gcc15-libtool-no-rpath.patch | 0
...-needed.patch => gcc15-no-add-needed.patch | 0
gcc15-pr118206.patch | 581 ++++++++++++++++
gcc15-pr118362.patch | 17 +
...4-rh1574936.patch => gcc15-rh1574936.patch | 0
...atch => gcc15-sparc-config-detection.patch | 0
sources | 4 +-
18 files changed, 805 insertions(+), 685 deletions(-)
delete mode 100644 gcc14-pr101523.patch
rename gcc14-Wno-format-security.patch => gcc15-Wno-format-security.patch (80%)
rename gcc14-d-shared-libphobos.patch => gcc15-d-shared-libphobos.patch (100%)
rename gcc14-fortran-fdec-duplicates.patch => gcc15-fortran-fdec-duplicates.patch (100%)
rename gcc14-hack.patch => gcc15-hack.patch (57%)
rename gcc14-isl-dl.patch => gcc15-isl-dl.patch (99%)
rename gcc14-isl-dl2.patch => gcc15-isl-dl2.patch (89%)
rename gcc14-libgomp-omp_h-multilib.patch => gcc15-libgomp-omp_h-multilib.patch (100%)
rename gcc14-libstdc++-docs.patch => gcc15-libstdc++-docs.patch (74%)
rename gcc14-libtool-no-rpath.patch => gcc15-libtool-no-rpath.patch (100%)
rename gcc14-no-add-needed.patch => gcc15-no-add-needed.patch (100%)
create mode 100644 gcc15-pr118206.patch
create mode 100644 gcc15-pr118362.patch
rename gcc14-rh1574936.patch => gcc15-rh1574936.patch (100%)
rename gcc14-sparc-config-detection.patch => gcc15-sparc-config-detection.patch (100%)
diff --git a/.gitignore b/.gitignore
index a0bbeb8..b074da3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,29 +1,4 @@
-/gcc-14.0.1-20240113.tar.xz
/isl-0.24.tar.bz2
-/newlib-cygwin-5f15d7c5817b07a6b18cbab17342c95cb7b42be4.tar.xz
-/nvptx-tools-c5ad8ada3e86d96b10a9d352b7a764f801478ba6.tar.xz
-/gcc-14.0.1-20240118.tar.xz
-/newlib-cygwin-d45261f62a15f8abd94a1031020b9a9f455e4eed.tar.xz
-/gcc-14.0.1-20240125.tar.xz
-/gcc-14.0.1-20240127.tar.xz
-/gcc-14.0.1-20240207.tar.xz
-/gcc-14.0.1-20240208.tar.xz
-/gcc-14.0.1-20240217.tar.xz
-/gcc-14.0.1-20240228.tar.xz
-/gcc-14.0.1-20240316.tar.xz
-/gcc-14.0.1-20240328.tar.xz
-/gcc-14.0.1-20240410.tar.xz
-/gcc-14.0.1-20240411.tar.xz
-/gcc-14.0.1-20240430.tar.xz
-/nvptx-tools-9962793f41e016318dc5eca07ae602041cf526ff.tar.xz
-/gcc-14.1.1-20240508.tar.xz
-/gcc-14.1.1-20240522.tar.xz
-/gcc-14.1.1-20240607.tar.xz
/nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz
-/gcc-14.1.1-20240620.tar.xz
-/gcc-14.1.1-20240701.tar.xz
-/gcc-14.2.1-20240801.tar.xz
-/gcc-14.2.1-20240905.tar.xz
-/gcc-14.2.1-20240912.tar.xz
-/gcc-14.2.1-20241025.tar.xz
-/gcc-14.2.1-20241104.tar.xz
+/gcc-15.0.0-20250109.tar.xz
+/newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 52dd90a..8656fd3 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,12 +1,12 @@
-%global DATE 20241104
-%global gitrev b84ce6a258e01f6559a1855b5f1d1ba4e69a927b
-%global gcc_version 14.2.1
-%global gcc_major 14
+%global DATE 20250109
+%global gitrev f890bd2c90be240213d8f1023aed4ad9647a293c
+%global gcc_version 15.0.0
+%global gcc_major 15
# 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 6
+%global gcc_release 0
%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
-%global newlib_cygwin_gitrev d45261f62a15f8abd94a1031020b9a9f455e4eed
+%global newlib_cygwin_gitrev 2e4db338ac125579d555aeee516e48588a628a16
%global _unpackaged_files_terminate_build 0
%if 0%{?fedora:1}
%global _performance_build 1
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}%{?dist}
+Release: %{gcc_release}.3%{?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
@@ -191,11 +191,8 @@ URL: http://gcc.gnu.org
# Need binutils which support -plugin
# Need binutils which support .loc view >= 2.30
# Need binutils which support --generate-missing-build-notes=yes >= 2.31
-%if 0%{?fedora} >= 29 || 0%{?rhel} > 7
-BuildRequires: binutils >= 2.31
-%else
-BuildRequires: binutils >= 2.24
-%endif
+# Need binutils which support .base64 >= 2.43
+BuildRequires: binutils >= 2.43
# While gcc doesn't include statically linked binaries, during testing
# -static is used several times.
BuildRequires: glibc-static
@@ -262,11 +259,8 @@ Requires: cpp = %{version}-%{release}
# Need binutils that support -plugin
# Need binutils that support .loc view >= 2.30
# Need binutils which support --generate-missing-build-notes=yes >= 2.31
-%if 0%{?fedora} >= 29 || 0%{?rhel} > 7
-Requires: binutils >= 2.31
-%else
-Requires: binutils >= 2.24
-%endif
+# Need binutils that support .base64 >= 2.43
+Requires: binutils >= 2.43
# Make sure gdb will understand DW_FORM_strp
Conflicts: gdb < 5.1-2
Requires: glibc-devel >= 2.2.90-12
@@ -293,22 +287,23 @@ Provides: bundled(libbacktrace)
Provides: bundled(libffi)
Provides: gcc(major) = %{gcc_major}
-Patch0: gcc14-hack.patch
-Patch2: gcc14-sparc-config-detection.patch
-Patch3: gcc14-libgomp-omp_h-multilib.patch
-Patch4: gcc14-libtool-no-rpath.patch
-Patch5: gcc14-isl-dl.patch
-Patch6: gcc14-isl-dl2.patch
-Patch7: gcc14-libstdc++-docs.patch
-Patch8: gcc14-no-add-needed.patch
-Patch9: gcc14-Wno-format-security.patch
-Patch10: gcc14-rh1574936.patch
-Patch11: gcc14-d-shared-libphobos.patch
-Patch12: gcc14-pr101523.patch
+Patch0: gcc15-hack.patch
+Patch2: gcc15-sparc-config-detection.patch
+Patch3: gcc15-libgomp-omp_h-multilib.patch
+Patch4: gcc15-libtool-no-rpath.patch
+Patch5: gcc15-isl-dl.patch
+Patch6: gcc15-isl-dl2.patch
+Patch7: gcc15-libstdc++-docs.patch
+Patch8: gcc15-no-add-needed.patch
+Patch9: gcc15-Wno-format-security.patch
+Patch10: gcc15-rh1574936.patch
+Patch11: gcc15-d-shared-libphobos.patch
+Patch12: gcc15-pr118206.patch
+Patch13: gcc15-pr118362.patch
Patch50: isl-rh2155127.patch
-Patch100: gcc14-fortran-fdec-duplicates.patch
+Patch100: gcc15-fortran-fdec-duplicates.patch
# On ARM EABI systems, we do want -gnueabi to be part of the
# target triple.
@@ -606,6 +601,20 @@ Requires: libgccjit = %{version}-%{release}
%description -n libgccjit-devel
This package contains header files and documentation for GCC JIT front-end.
+%package -n libgdiagnostics
+Summary: Library for emitting diagnostics
+
+%description -n libgdiagnostics
+This package contains libgdiagnostics shared library and sarif-replay program.
+
+%package -n libgdiagnostics-devel
+Summary: Support for emitting diagnostics
+Requires: libgdiagnostics = %{version}-%{release}
+
+%description -n libgdiagnostics-devel
+This package contains header files and documentation for the libgdiagnostics
+library.
+
%package -n libquadmath
Summary: GCC __float128 shared support library
@@ -905,7 +914,8 @@ so that there cannot be any synchronization problems.
%patch -P10 -p0 -b .rh1574936~
%endif
%patch -P11 -p0 -b .d-shared-libphobos~
-%patch -P12 -p1 -b .pr101523~
+%patch -P12 -p0 -b .pr118206~
+%patch -P13 -p0 -b .pr118362~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
@@ -1304,7 +1314,7 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
| sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \
XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
../../configure --disable-bootstrap --enable-host-shared \
- --enable-languages=jit $CONFIGURE_OPTS
+ --enable-languages=jit --enable-libgdiagnostics $CONFIGURE_OPTS
make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" all-gcc
cp -a gcc/libgccjit.so* ../gcc/
cd ../gcc/
@@ -1339,7 +1349,7 @@ cd ../..
# Copy various doc files here and there
cd ..
-mkdir -p rpm.doc/{gfortran,objc,gdc,libphobos,gm2,libgm2}
+mkdir -p rpm.doc/{gfortran,objc,gdc,libphobos,gm2,libgm2,libgdiagnostics-devel}
mkdir -p rpm.doc/go rpm.doc/libgo rpm.doc/libquadmath rpm.doc/libitm
mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/ada,gcc/jit,libstdc++-v3,libobjc,libgomp,libcc1,libatomic,libsanitizer}
@@ -1393,6 +1403,8 @@ done)
cp -p $i ../rpm.doc/libgo/$i.libgo
done)
%endif
+(cd gcc/doc/libgdiagnostics; make html; \
+mv _build/html ../../../rpm.doc/libgdiagnostics-devel/html )
rm -f rpm.doc/changelogs/gcc/ChangeLog.[1-9]
find rpm.doc -name \*ChangeLog\* | xargs bzip2 -9
@@ -1445,6 +1457,7 @@ cd obj-offload-nvptx-none
make prefix=%{buildroot}%{_prefix} mandir=%{buildroot}%{_mandir} \
infodir=%{buildroot}%{_infodir} install
rm -rf %{buildroot}%{_prefix}/libexec/gcc/nvptx-none/%{gcc_major}/install-tools
+rm -rf %{buildroot}%{_prefix}/libexec/gcc/nvptx-none/%{gcc_major}/g++-mapper-server
rm -rf %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/{install-tools,plugin,cc1,cc1plus,f951}
rm -rf %{buildroot}%{_infodir} %{buildroot}%{_mandir}/man7 %{buildroot}%{_prefix}/share/locale
rm -rf %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/{install-tools,plugin}
@@ -1482,6 +1495,7 @@ cd obj-offload-amdgcn-amdhsa
make prefix=%{buildroot}%{_prefix} mandir=%{buildroot}%{_mandir} \
infodir=%{buildroot}%{_infodir} install
rm -rf %{buildroot}%{_prefix}/libexec/gcc/amdgcn-amdhsa/%{gcc_major}/install-tools
+rm -rf %{buildroot}%{_prefix}/libexec/gcc/amdgcn-amdhsa/%{gcc_major}/g++-mapper-server
rm -rf %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/accel/amdgcn-amdhsa/{install-tools,plugin,cc1,cc1plus,f951}
rm -rf %{buildroot}%{_infodir} %{buildroot}%{_mandir}/man7 %{buildroot}%{_prefix}/share/locale
rm -rf %{buildroot}%{_prefix}/lib/gcc/amdgcn-amdhsa/%{gcc_major}/{install-tools,plugin}
@@ -1693,6 +1707,15 @@ cp -a ../gcc/jit/libgccjit*.h %{buildroot}%{_prefix}/include/
/usr/bin/install -c -m 644 objlibgccjit/gcc/doc/libgccjit.info %{buildroot}/%{_infodir}/
gzip -9 %{buildroot}/%{_infodir}/libgccjit.info
+rm -f $FULLEPATH/libgdiagnostics.so
+cp -a objlibgccjit/gcc/libgdiagnostics.so* %{buildroot}%{_prefix}/%{_lib}/
+cp -a ../gcc/libgdiagnostics*.h %{buildroot}%{_prefix}/include/
+cp -a objlibgccjit/gcc/sarif-replay %{buildroot}%{_prefix}/bin/
+
+sed -e 's,\.\./include/,../../../../include,' \
+ %{buildroot}%{_prefix}/%{_lib}/libstdc++.modules.json \
+ > $FULLPATH/libstdc++.modules.json
+
pushd $FULLPATH
if [ "%{_lib}" = "lib" ]; then
%if %{build_objc}
@@ -1713,7 +1736,7 @@ ln -sf ../../../libgphobos.so.5.* libgphobos.so
%endif
%if %{build_m2}
for i in cor iso log min pim; do
- ln -sf ../../../libm2$i.so.19.* libm2$i.so
+ ln -sf ../../../libm2$i.so.20.* libm2$i.so
done
%endif
%if %{build_libitm}
@@ -1748,7 +1771,7 @@ ln -sf ../../../../%{_lib}/libgphobos.so.5.* libgphobos.so
%endif
%if %{build_m2}
for i in cor iso log min pim; do
- ln -sf ../../../../%{_lib}/libm2$i.so.19.* libm2$i.so
+ ln -sf ../../../../%{_lib}/libm2$i.so.20.* libm2$i.so
done
%endif
%if %{build_libitm}
@@ -1897,8 +1920,8 @@ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgphobos.so.5.* | sed 's
%if %{build_m2}
for i in cor iso log min pim; do
rm -f libm2$i.so
- echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libm2$i.so.19.* | sed 's,^.*libm,libm,'`' )' > libm2$i.so
- echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libm2$i.so.19.* | sed 's,^.*libm,libm,'`' )' > 64/libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libm2$i.so.20.* | sed 's,^.*libm,libm,'`' )' > libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libm2$i.so.20.* | sed 's,^.*libm,libm,'`' )' > 64/libm2$i.so
rm -f 64/m2/m2$i/*.{a,la}
ln -sf ../../libm2$i.so 64/m2/m2$i/
ln -sf ../../libm2$i.a 64/m2/m2$i/
@@ -2014,8 +2037,8 @@ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgphobos.so.5.* | sed 's
%if %{build_m2}
for i in cor iso log min pim; do
rm -f libm2$i.so
- echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libm2$i.so.19.* | sed 's,^.*libm,libm,'`' )' > libm2$i.so
- echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libm2$i.so.19.* | sed 's,^.*libm,libm,'`' )' > 32/libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libm2$i.so.20.* | sed 's,^.*libm,libm,'`' )' > libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libm2$i.so.20.* | sed 's,^.*libm,libm,'`' )' > 32/libm2$i.so
rm -f 32/m2/m2$i/*.{a,la}
ln -sf ../../libm2$i.so 32/m2/m2$i/
ln -sf ../../libm2$i.a 32/m2/m2$i/
@@ -2191,7 +2214,7 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgphobos.so.5.*
%endif
%if %{build_m2}
for i in cor iso log min pim; do
- chmod 755 %{buildroot}%{_prefix}/%{_lib}/libm2$i.so.19.*
+ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libm2$i.so.20.*
done
%endif
%if %{build_libitm}
@@ -2310,7 +2333,13 @@ rm -rf %{buildroot}%{_prefix}/lib64/go/%{gcc_major}/%{gcc_target_platform}
%endif
%endif
-rm -f %{buildroot}%{mandir}/man3/ffi*
+%if %{build_offload_nvptx}
+rm -f %{buildroot}%{_mandir}/man1/*-accel-*nvptx*
+%endif
+%if %{build_offload_amdgcn}
+rm -f %{buildroot}%{_mandir}/man1/*-accel-*amdgcn*
+%endif
+rm -f %{buildroot}%{_mandir}/man7/{gpl,gfdl,fsf-funding}.7*
# Help plugins find out nvra.
echo gcc-%{version}-%{release}.%{_arch} > $FULLPATH/rpmver
@@ -2436,6 +2465,8 @@ end
%ldconfig_scriptlets -n libgccjit
+%ldconfig_scriptlets -n libgdiagnostics
+
%ldconfig_scriptlets -n libquadmath
%ldconfig_scriptlets -n libitm
@@ -2548,9 +2579,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/xsaveintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/xsaveoptintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx512cdintrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx512erintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx512fintrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx512pfintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/shaintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/mm_malloc.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/mm3dnow.h
@@ -2572,8 +2601,6 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/xsavesintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/clzerointrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/pkuintrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx5124fmapsintrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx5124vnniwintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx512vpopcntdqintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/sgxintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/gfniintrin.h
@@ -2624,6 +2651,24 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/sm3intrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/sm4intrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/usermsrintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/amxavx512intrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/amxfp8intrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/amxmovrsintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/amxtf32intrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/amxtransposeintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2-512bf16intrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2-512convertintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2-512mediaintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2-512minmaxintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2-512satcvtintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2bf16intrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2convertintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2copyintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2mediaintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2minmaxintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2roundingintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2satcvtintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/movrsintrin.h
%endif
%ifarch ia64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/ia64intrin.h
@@ -2668,6 +2713,10 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/arm_fp16.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/arm_bf16.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/arm_sve.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/arm_sme.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/arm_neon_sve_bridge.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/arm_private_fp8.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/arm_private_neon_types.h
%endif
%ifarch sparc sparcv9 sparc64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/visintrin.h
@@ -2683,6 +2732,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_crypto.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_bitmanip.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_th_vector.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_cmo.h
%endif
%if %{build_libasan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/sanitizer
@@ -2814,7 +2864,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/liblsan_preinit.o
%endif
%{_prefix}/libexec/getconf/default
-%doc gcc/README* rpm.doc/changelogs/gcc/ChangeLog*
+%doc gcc/README* rpm.doc/changelogs/gcc/ChangeLog*
%{!?_licensedir:%global license %%doc}
%license gcc/COPYING* COPYING.RUNTIME
@@ -2899,6 +2949,7 @@ end
%ifnarch sparcv9 ppc %{multilib_64_archs}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libstdc++.so
%endif
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libstdc++.modules.json
%ifarch sparcv9 ppc
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32/libstdc++fs.a
@@ -3110,6 +3161,7 @@ end
%files gm2
%{_prefix}/bin/gm2
%{_mandir}/man1/gm2.1*
+%{_infodir}/m2*
%dir %{_prefix}/lib/gcc
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}
@@ -3139,7 +3191,7 @@ end
%doc rpm.doc/gm2/*
%files -n libgm2
-%{_prefix}/%{_lib}/libm2*.so.19*
+%{_prefix}/%{_lib}/libm2*.so.20*
%doc rpm.doc/libgm2/*
%files -n libgm2-static
@@ -3536,6 +3588,15 @@ end
%doc rpm.doc/libgccjit-devel/*
%doc gcc/jit/docs/examples
+%files -n libgdiagnostics
+%{_prefix}/bin/sarif-replay
+%{_prefix}/%{_lib}/libgdiagnostics.so.*
+
+%files -n libgdiagnostics-devel
+%{_prefix}/%{_lib}/libgdiagnostics.so
+%{_prefix}/include/libgdiagnostics*.h
+%doc rpm.doc/libgdiagnostics-devel/*
+
%files plugin-devel
%dir %{_prefix}/lib/gcc
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
@@ -3618,499 +3679,5 @@ end
%endif
%changelog
-- fix up -freport-bug default (#2330362)
-- revert -mearly-ldp-fusion and -mlate-ldp-fusion default to enabled on
- aarch64 to match upstream
-
-* Mon Nov 4 2024 Jakub Jelinek 14.2.1-6
-- update from releases/gcc-14 branch
- - PRs fortran/79685, jit/117275, libstdc++/117321, libstdc++/117406,
- middle-end/117354, rtl-optimization/116783, rtl-optimization/117327,
- target/116415, target/117296, target/117318, tree-optimization/107467,
- tree-optimization/117287
-
-* Fri Oct 25 2024 Jakub Jelinek 14.2.1-5
-- update from releases/gcc-14 branch
- - PRs ada/114593, ada/114636, ada/114640, ada/115535, ada/116190,
- ada/116430, ada/116551, c/116726, c/117230, c++/96097, c++/115361,
- c++/115987, c++/116369, c++/116418, c++/116424, c++/116476,
- c++/116492, c++/116534, c++/116676, c++/116678, c++/116929,
- c++/117054, c++/117107, c++/117259, c++/117274, fortran/84868,
- fortran/100273, ipa/109985, ipa/115815, libstdc++/37475,
- libstdc++/108619, libstdc++/116529, libstdc++/116754,
- libstdc++/116755, libstdc++/116777, libstdc++/116857,
- libstdc++/117085, libstdc++/117094, libstdc++/117135,
- middle-end/115110, middle-end/115426, middle-end/115641,
- middle-end/116258, middle-end/116259, middle-end/116454,
- middle-end/116891, middle-end/116898, middle-end/116899,
- middle-end/117086, middle-end/117249, sanitizer/117209, target/115860,
- target/116237, target/116627, target/116738, target/116839,
- target/116883, target/116921, target/116953, target/116962,
- target/117116, target/117159, target/117240, testsuite/116238,
- tree-optimization/116166, tree-optimization/116258,
- tree-optimization/116274, tree-optimization/116290,
- tree-optimization/116380, tree-optimization/116460,
- tree-optimization/116481, tree-optimization/116585,
- tree-optimization/116610, tree-optimization/116768,
- tree-optimization/116850, tree-optimization/116879,
- tree-optimization/116907, tree-optimization/116982,
- tree-optimization/116990, tree-optimization/117041,
- tree-optimization/117104
-
-* Wed Sep 25 2024 Siddhesh Poyarekar 14.2.1-4
-- default tuning to power 10 for RHEL10 and later
-
-* Thu Sep 12 2024 Jakub Jelinek 14.2.1-3
-- update from releases/gcc-14 branch
- - PRs c++/116276, c++/116320, c++/116449, c++/116567, c++/116606,
- c++/116636, ipa/116410, libstdc++/116159, libstdc++/116641,
- lto/116614, target/116617
-- backport x86_64 va_arg fix (PR target/116621)
-
-* Thu Sep 5 2024 Jakub Jelinek 14.2.1-2
-- update from releases/gcc-14 branch
- - PRs c++/88313, c++/112288, c++/115296, c++/115656, c++/116071, c++/116219,
- c++/116223, c++/116327, c++/116384, fortran/108889, fortran/116530,
- libstdc++/113663, libstdc++/116038, libstdc++/116381,
- libstdc++/116549, lto/116361, target/85624, target/112108,
- target/113384, target/115464, target/116007, target/116033,
- target/116043, target/116174, target/116189, target/116287,
- target/116295, target/116390, target/116407, target/116512,
- testsuite/70150, tree-optimization/113281, tree-optimization/116156,
- tree-optimization/116224, tree-optimization/116501
- - add hint #34 to aarch64 sanitizer asm stubs if -mbranch-protection=standard
- (#2306353)
-
-* Thu Aug 1 2024 Jakub Jelinek 14.2.1-1
-- update from releases/gcc-14 branch
- - GCC 14.2 release
- - PRs analyzer/114899, c++/99241, c++/99242, c++/104981, c++/106760,
- c++/111890, c++/115165, c++/115476, c++/115550, c++/115561,
- c++/115583, c++/115623, c++/115754, c++/115783, c++/115865,
- c++/115897, c++/115900, c++/115986, fortran/59104, fortran/84006,
- fortran/93635, fortran/98534, fortran/99798, fortran/100027,
- fortran/103115, fortran/103312, fortran/113363, fortran/115700,
- ipa/111613, ipa/113291, ipa/113787, ipa/114207, ipa/115033,
- ipa/115277, ipa/116055, libstdc++/113376, libstdc++/114387,
- libstdc++/115399, libstdc++/115482, libstdc++/115522,
- libstdc++/115585, libstdc++/115807, libstdc++/115854,
- libstdc++/116070, middle-end/115527, middle-end/115836,
- middle-end/115887, pch/115312, rtl-optimization/115049,
- rtl-optimization/115565, target/87376, target/88236, target/97367,
- target/98762, target/105090, target/113715, target/114759,
- target/114890, target/114936, target/114988, target/115068,
- target/115153, target/115188, target/115351, target/115389,
- target/115456, target/115457, target/115459, target/115475,
- target/115526, target/115554, target/115562, target/115591,
- target/115611, target/115691, target/115725, target/115726,
- target/115752, target/115763, target/115840, target/115872,
- target/115978, target/115981, target/115988, target/116035,
- testsuite/115826, testsuite/116061, tree-optimization/113673,
- tree-optimization/115382, tree-optimization/115646,
- tree-optimization/115669, tree-optimization/115694,
- tree-optimization/115701, tree-optimization/115723,
- tree-optimization/115841, tree-optimization/115843,
- tree-optimization/115867, tree-optimization/115868,
- tree-optimization/116034, tree-optimization/116057
-
-* Mon Jul 1 2024 Jakub Jelinek 14.1.1-7
-- update from releases/gcc-14 branch
- - PRs c/114930, c/115502, c/115587, c++/115198, c++/115358, c++/115504,
- c++/115624, fortran/114019, fortran/115390, libstdc++/115454,
- libstdc++/115575, libstdc++/115668, target/106069, target/114846,
- target/115342, target/115355, target/115608, tree-optimization/115278,
- tree-optimization/115508
-- revert the August 2016 workaround for python bytecode compilation (#2294381)
-
-* Thu Jun 20 2024 Jakub Jelinek 14.1.1-6
-- update from releases/gcc-14 branch
- - PRs ada/114398, ada/114708, c/115290, c++/99678, c++/115239, c++/115283,
- c++/115378, c++/115511, driver/115440, fortran/83865, jit/115442,
- libstdc++/114958, libstdc++/115247, libstdc++/115308,
- rtl-optimization/115281, target/109549, target/111343, target/115253,
- target/115353, target/115360, tree-optimization/115544
- - fix s390x ICEs with vector permutations from memory (#2293207, #2292501)
-
-* Fri Jun 7 2024 Jakub Jelinek 14.1.1-5
-- update from releases/gcc-14 branch
- - PRs ada/115270, c/114493, c++/105320, c++/114275, c++/114868, c++/114983,
- c++/115187, fortran/86100, fortran/115150, libstdc++/109849,
- libstdc++/111641, libstdc++/114940, libstdc++/115099,
- libstdc++/115269, libstdc++/115335, middle-end/108789,
- middle-end/115352, modula2/114886, rtl-optimization/114902,
- rtl-optimization/115038, rtl-optimization/115092, target/113719,
- target/115169, target/115297, target/115317, target/115324,
- tree-optimization/115149, tree-optimization/115192,
- tree-optimization/115197, tree-optimization/115232,
- tree-optimization/115307, tree-optimization/115337
-
-* Wed May 22 2024 Jakub Jelinek 14.1.1-4
-- update from releases/gcc-14 branch
- - PRs c++/114901, c++/114903, c++/114974, c++/114994, c++/115114,
- c++/115139, driver/114980, fortran/114827, fortran/114874,
- fortran/115039, libstdc++/107800, libstdc++/114866, libstdc++/114891,
- libstdc++/115015, libstdc++/115063, libstdc++/115119,
- middle-end/114931, sanitizer/115172, target/69374, target/112959,
- target/114968, target/114975, target/114981, target/115065,
- target/115069, tree-optimization/114998, tree-optimization/115143,
- tree-optimization/115152, tree-optimization/115154
-
-* Tue May 21 2024 Siddhesh Poyarekar 14.1.1-3
-- update new SPDX identifiers from all outstanding issues
-
-* Thu May 16 2024 Marek Polacek 14.1.1-2
-- fix a combinatorial explosion in combine (PR rtl-optimization/101523)
-
-* Wed May 8 2024 Jakub Jelinek 14.1.1-1
-- update from releases/gcc-14 branch
- - GCC 14.1.0 release
- - PRs analyzer/111475, c++/89224, c++/114856, c++/114889, c++/114935,
- ipa/92606, middle-end/114734, middle-end/114907, modula2/113768,
- modula2/114133, modula2/114929, rtl-optimization/114924,
- sanitizer/114956, tree-optimization/114876,
- tree-optimization/114921, tree-optimization/114965
-
-* Fri May 3 2024 Marek Polacek
-- enable hardening and configure with --enable-host-pie --enable-host-bind-now
- on RHEL
-- don't require rocm-runtime on RHEL
-
-* Tue Apr 30 2024 Jakub Jelinek 14.0.1-0.16
-- update from trunk and releases/gcc-14 branch
- - GCC 14.1.0-rc1
- - PRs c++/93595, c++/99426, c++/106820, c++/107457, c++/109966, c++/111284,
- c++/113141, c++/114078, c++/114393, c++/114426, c++/114600,
- c++/114634, c++/114691, c++/114706, c++/114709, c++/114784,
- c++/114795, c++/114888, c/92880, c/114780, d/111650, fortran/89462,
- fortran/93678, fortran/102597, fortran/103471, fortran/103496,
- fortran/113793, fortran/114739, fortran/114825, fortran/114959,
- gcov-profile/114715, gcov-profile/114720, libgcc/114689,
- libgcc/114755, libgcc/114762, libstdc++/93672, libstdc++/113386,
- libstdc++/114750, libstdc++/114770, libstdc++/114803,
- libstdc++/114863, lto/113208, lto/114574, middle-end/112938,
- middle-end/114753, modula2/112893, modula2/114745, modula2/114807,
- modula2/114811, modula2/114836, other/114738, preprocessor/114748,
- rtl-optimization/114768, sanitizer/114687, sanitizer/114743,
- target/110621, target/112431, target/112432, target/114416,
- target/114668, target/114676, target/114696, target/114714,
- target/114741, target/114752, target/114783, target/114794,
- target/114810, target/114837, target/114861, target/114885,
- testsuite/113706, testsuite/114744, testsuite/114768,
- tree-optimization/114403, tree-optimization/114666,
- tree-optimization/114733, tree-optimization/114736,
- tree-optimization/114749, tree-optimization/114769,
- tree-optimization/114787, tree-optimization/114792,
- tree-optimization/114799, tree-optimization/114832,
- tree-optimization/114883
-- switch to --with-arch_64=x86-64-v3 for latest RHEL
-- remove obsolete reason for not shipping *.gch* files
-
-* Thu Apr 11 2024 Jakub Jelinek 14.0.1-0.15
-- update from trunk
- - PRs analyzer/114472, c++/114303, c++/114409, debug/112878,
- fortran/106500, middle-end/110027, middle-end/114681, target/114639,
- tree-optimization/109596, tree-optimization/114672
- - fix symbol version of std::__basic_file::native_handle() const
- (PR libstdc++/114692)
- - emit -Whardened warning even for -fhardened -fcf-protection=none
- (#2273610, PR target/114606)
-
-* Wed Apr 10 2024 Jakub Jelinek 14.0.1-0.14
-- update from trunk
- - PRs analyzer/114588, bootstrap/106472, c++/91079, c++/99377, c++/100667,
- c++/103825, c++/104040, c++/111132, c++/114377, c++/114462,
- c++/114479, c++/114537, c++/114561, c++/114562, c++/114572,
- c++/114580, c/114361, debug/114608, fortran/36337, fortran/50410,
- fortran/106999, fortran/110987, fortran/112407, fortran/113885,
- fortran/113956, fortran/114474, fortran/114535, gcov-profile/113765,
- gcov-profile/114115, gcov-profile/114601, ipa/111571, ipa/113359,
- ipa/113907, ipa/113964, libquadmath/114533, libquadmath/114623,
- libstdc++/104606, libstdc++/114519, libstdc++/114633, lto/114655,
- middle-end/114552, middle-end/114599, middle-end/114604,
- middle-end/114627, middle-end/114628, modula2/114517,
- modula2/114520, modula2/114548, modula2/114565, modula2/114617,
- modula2/114648, rtl-optimization/112560, rtl-optimization/114415,
- target/88309, target/101865, target/112919, target/113233,
- target/113986, target/114577, target/114587, target/114590,
- target/114603, target/114607, testsuite/114034, testsuite/114036,
- testsuite/114307, testsuite/114614, testsuite/114642,
- testsuite/114662, tree-optimization/112303,
- tree-optimization/114115, tree-optimization/114480,
- tree-optimization/114485, tree-optimization/114551,
- tree-optimization/114555, tree-optimization/114557,
- tree-optimization/114566, tree-optimization/114624
- - don't emit VEX encoded AES-NI instructions when just -maes and not -mavx
- is enabled (#2272758, PR target/114576)
- - fix s390* peephole2 to check mode of constant pool entries and for
- 64-bit extraction from 128-bit constant pool entry extract the correct
- half of the value (#2273618, PR target/114605)
-
-* Thu Mar 28 2024 Jakub Jelinek 14.0.1-0.13
-- update from trunk
- - PRs analyzer/109251, analyzer/110902, analyzer/110928, analyzer/111305,
- analyzer/111441, analyzer/112974, analyzer/112975, analyzer/113505,
- analyzer/113619, analyzer/114286, analyzer/114408, analyzer/114473,
- bootstrap/114369, c++/59465, c++/100557, c++/110323, c++/111918,
- c++/112631, c++/112724, c++/114349, c++/114439, c/109619, c/114364,
- fortran/30802, fortran/55978, fortran/101135, fortran/103715,
- fortran/107426, fortran/111781, fortran/114475, ipa/108802,
- ipa/114254, libfortran/107031, libgcc/111731, libgcc/114397,
- libstdc++/101228, libstdc++/113841, libstdc++/114316,
- libstdc++/114359, libstdc++/114367, libstdc++/114394,
- libstdc++/114400, libstdc++/114401, middle-end/111151,
- middle-end/111632, middle-end/111683, middle-end/113396,
- middle-end/114347, middle-end/114348, middle-end/114480,
- modula2/113836, modula2/114296, modula2/114380, modula2/114418,
- modula2/114422, modula2/114443, modula2/114444, modula2/114478,
- rtl-optimization/101523, rtl-optimization/112415, sanitizer/111736,
- target/99829, target/111822, target/112651, target/114049,
- target/114150, target/114175, target/114194, target/114272,
- target/114323, target/114334, target/114352, target/114407,
- target/114431, testsuite/114320, testsuite/114486,
- tree-optimization/96147, tree-optimization/109925,
- tree-optimization/111736, tree-optimization/113727,
- tree-optimization/114057, tree-optimization/114151,
- tree-optimization/114322, tree-optimization/114329,
- tree-optimization/114365, tree-optimization/114375,
- tree-optimization/114396, tree-optimization/114405,
- tree-optimization/114425, tree-optimization/114433,
- tree-optimization/114464, tree-optimization/114469,
- tree-optimization/114471
-
-* Sat Mar 16 2024 Jakub Jelinek 14.0.1-0.12
-- update from trunk
- - PRs ada/113979, analyzer/114159, c++/92687, c++/98356, c++/98645,
- c++/98688, c++/98881, c++/103994, c++/104919, c++/105512,
- c++/106009, c++/110025, c++/110031, c++/110347, c++/110730,
- c++/111224, c++/111710, c++/113629, c++/113802, c++/113976,
- c++/113987, c++/114005, c++/114114, c++/114138, c++/114170,
- c++/114229, d/112285, d/112290, d/114171, debug/113519,
- debug/113777, debug/113918, debug/114015, debug/114186,
- driver/114314, fortran/82943, fortran/86148, fortran/86268,
- fortran/87477, fortran/89645, fortran/99065, fortran/103707,
- fortran/104819, fortran/106987, fortran/110826, fortran/114001,
- fortran/114141, fortran/114280, fortran/114283, ipa/113757,
- libbacktrace/114201, libcc1/113977, libfortran/105437,
- libfortran/114304, libgcc/114327, libgomp/114216, libstdc++/66146,
- libstdc++/113960, libstdc++/114103, libstdc++/114147,
- libstdc++/114152, libstdc++/114240, libstdc++/114244,
- libstdc++/114279, libstdc++/114325, middle-end/95351,
- middle-end/105533, middle-end/113907, middle-end/114108,
- middle-end/114136, middle-end/114156, middle-end/114157,
- middle-end/114196, middle-end/114209, middle-end/114299,
- middle-end/114313, middle-end/114319, middle-end/114332,
- modula2/102344, modula2/109969, modula2/114227, modula2/114294,
- modula2/114295, modula2/114333, preprocessor/80755,
- preprocessor/110558, rtl-optimization/110079,
- rtl-optimization/113010, rtl-optimization/114190,
- rtl-optimization/114211, sanitizer/97696, sanitizer/112709,
- target/92729, target/101737, target/102250, target/108174,
- target/111362, target/112337, target/112817, target/112871,
- target/113001, target/113453, target/113510, target/113542,
- target/113618, target/113720, target/113790, target/113915,
- target/113950, target/114100, target/114116, target/114130,
- target/114132, target/114184, target/114187, target/114200,
- target/114202, target/114232, target/114233, target/114264,
- target/114284, target/114288, target/114310, target/114339,
- testsuite/96109, testsuite/108355, testsuite/113418,
- testsuite/113428, tree-optimization/98238, tree-optimization/110199,
- tree-optimization/113466, tree-optimization/113557,
- tree-optimization/114009, tree-optimization/114071,
- tree-optimization/114121, tree-optimization/114164,
- tree-optimization/114192, tree-optimization/114197,
- tree-optimization/114203, tree-optimization/114231,
- tree-optimization/114239, tree-optimization/114246,
- tree-optimization/114249, tree-optimization/114269,
- tree-optimization/114278, tree-optimization/114293,
- tree-optimization/114297
-
-* Thu Mar 7 2024 Siddhesh Poyarekar
-- update License identifier in the spec file
-
-* Mon Mar 4 2024 Jakub Jelinek
-- add --without-clang-plugin --without-llvm-plugin to annobin configure
- options
-
-* Thu Feb 29 2024 David Abdurachmanov
-- enable support for riscv64
-
-* Wed Feb 28 2024 Jakub Jelinek 14.0.1-0.8
-- update from trunk
- - PRs ada/113893, analyzer/110483, analyzer/110520, analyzer/111289,
- analyzer/111802, analyzer/111881, analyzer/113983, analyzer/113998,
- analyzer/113999, c++/113083, c++/113966, c++/113970, c/114007,
- c/114042, fortran/105658, fortran/107071, fortran/114012,
- fortran/114024, ipa/61159, ipa/70582, ipa/111960, ipa/113476,
- libfortran/105456, libfortran/105473, middle-end/112344,
- middle-end/114070, middle-end/114073, middle-end/114084,
- modula2/113749, modula2/113889, modula2/114026, modula2/114055,
- other/109668, other/113957, rtl-optimization/54052,
- rtl-optimization/114044, rtl-optimization/114054, target/90785,
- target/108120, target/109987, target/112103, target/112375,
- target/112397, target/113220, target/113295, target/113613,
- target/113696, target/113805, target/113912, target/113971,
- target/113995, target/114017, target/114028, target/114094,
- target/114097, target/114098, testsuite/111462,
- tree-optimization/91567, tree-optimization/109804,
- tree-optimization/113205, tree-optimization/113967,
- tree-optimization/113988, tree-optimization/113993,
- tree-optimization/114027, tree-optimization/114038,
- tree-optimization/114040, tree-optimization/114041,
- tree-optimization/114048, tree-optimization/114068,
- tree-optimization/114074, tree-optimization/114081,
- tree-optimization/114090, tree-optimization/114099
- - fix up handling of C++ inline var specializations
- (#2264986, PR c++/114013)
- - punt on vectorization of +- with non-integral emulated vectors
- (#2265489, PR tree-optimization/114075)
- - fix up handling of references of comdat local symbols forced into
- memory (#2260416, PR rtl-optimization/113617)
-
-* Sat Feb 17 2024 Jakub Jelinek 14.0.1-0.7
-- update from trunk
- - PRs analyzer/111266, c++/97202, c++/97990, c++/98388, c++/99573,
- c++/107126, c++/111682, c++/112436, c++/112580, c++/113158,
- c++/113332, c++/113545, c++/113612, c++/113649, c++/113658,
- c++/113674, c++/113706, c++/113708, c++/113760, c++/113789,
- c++/113834, c++/113853, c++/113908, c++/113929, d/104739, d/113125,
- d/113667, d/113758, d/113772, fortran/99210, fortran/105847,
- fortran/113799, fortran/113866, fortran/113883, fortran/113911,
- ipa/98237, libfortran/107068, libgcc/113850, libgomp/113843,
- libstdc++/87744, libstdc++/99117, libstdc++/100147,
- libstdc++/113294, libstdc++/113806, libstdc++/113807,
- libstdc++/113811, libstdc++/113931, libstdc++/113961,
- middle-end/107385, middle-end/110754, middle-end/113415,
- middle-end/113508, middle-end/113576, middle-end/113904,
- middle-end/113921, modula2/113848, modula2/113888, other/113336,
- sanitizer/113785, target/106543, target/109349, target/113742,
- target/113780, target/113855, target/113871, target/113876,
- target/113909, target/113927, testsuite/113278, testsuite/113448,
- testsuite/113861, testsuite/113899, tree-optimization/108355,
- tree-optimization/111054, tree-optimization/111156,
- tree-optimization/113567, tree-optimization/113734,
- tree-optimization/113774, tree-optimization/113783,
- tree-optimization/113818, tree-optimization/113831,
- tree-optimization/113849, tree-optimization/113863,
- tree-optimization/113895, tree-optimization/113896,
- tree-optimization/113898, tree-optimization/113902,
- tree-optimization/113910
- - fix bugs in Fortran allocatable character component assignments
- (#2261826, PR fortran/113503)
-
-* Thu Feb 8 2024 Jakub Jelinek 14.0.1-0.6
-- update from trunk
- - PRs c++/113814, c/113776, target/113711, target/113733, target/113824,
- testsuite/113710, tree-optimization/113735, tree-optimization/113808
-
-* Wed Feb 7 2024 Jakub Jelinek 14.0.1-0.5
-- update from trunk
- - PRs analyzer/113253, analyzer/113509, analyzer/113654, c++/94231,
- c++/107291, c++/107594, c++/109359, c++/110006, c++/110084,
- c++/110358, c++/111286, c++/112437, c++/112439, c++/112737,
- c++/112769, c++/112846, c++/113451, c++/113531, c++/113544,
- c++/113638, c++/113640, c++/113644, c++/113788, c/111059, c/111911,
- c/112571, c/113438, c/113740, debug/103047, debug/113394,
- debug/113637, fortran/104908, libfortran/111022, libgcc/113337,
- libgcc/113402, libgcc/113403, libgcc/113604, libstdc++/109203,
- libstdc++/113309, libstdc++/113335, libstdc++/90276,
- middle-end/101195, middle-end/110176, middle-end/112917,
- middle-end/113100, middle-end/113607, middle-end/113622,
- middle-end/113699, middle-end/113705, middle-end/113722,
- modula2/111627, modula2/112506, modula2/113730,
- rtl-optimization/113656, sanitizer/110676, sanitizer/112644,
- target/38534, target/59778, target/103503, target/105576,
- target/108933, target/111677, target/112577, target/112861,
- target/112862, target/112863, target/112864, target/112950,
- target/113059, target/113249, target/113255, target/113312,
- target/113560, target/113615, target/113616, target/113623,
- target/113636, target/113655, target/113657, target/113689,
- target/113690, target/113697, target/113700, target/113701,
- target/113763, target/113766, testsuite/113502,
- tree-optimization/110603, tree-optimization/111268,
- tree-optimization/111444, tree-optimization/113467,
- tree-optimization/113568, tree-optimization/113588,
- tree-optimization/113603, tree-optimization/113614,
- tree-optimization/113630, tree-optimization/113639,
- tree-optimization/113659, tree-optimization/113670,
- tree-optimization/113691, tree-optimization/113692,
- tree-optimization/113693, tree-optimization/113707,
- tree-optimization/113731, tree-optimization/113736,
- tree-optimization/113737, tree-optimization/113750,
- tree-optimization/113753, tree-optimization/113756,
- tree-optimization/113759, tree-optimization/113796
- - fix PCH writing assertion (#2259912)
-
-* Sat Jan 27 2024 Jakub Jelinek 14.0.1-0.4
-- update from trunk
- - PRs analyzer/112969, c++/109227, c++/112899, c++/113580, c++/113598,
- c++/113599, middle-end/112971, other/113575, preprocessor/105608,
- target/100204, target/100212, target/112987, target/113469,
- target/113526, target/113538, target/113601, testsuite/113558,
- tree-optimization/113602
-- temporarily disable -mearly-ldp-fusion -mlate-ldp-fusion on aarch64 again
- (#2260449, #2260560, #2260562)
-- use gcc_major macro in the spec some more
-- require llvm >= 15 and lld >= 15 for the amdgcn offloading
- where they are used as assembler and linker
-
-* Thu Jan 25 2024 Jakub Jelinek 14.0.1-0.3
-- update from trunk
- - PRs analyzer/111361, analyzer/112705, analyzer/112811, analyzer/112927,
- analyzer/112977, bootstrap/113554, c++/67898, c++/90463, c++/90464,
- c++/100707, c++/102607, c++/104594, c++/109640, c++/109642,
- c++/111357, c++/111410, c++/111607, c++/112594, c++/112632,
- c++/112820, c++/113256, c++/113347, c++/113405, c++/113498,
- c++/113529, c/102998, c/107942, c/109708, c/110029, c/113492,
- c/113518, debug/107058, debug/112718, debug/113382, debug/113488,
- fortran/48776, fortran/111291, fortran/113377, fortran/113471,
- ipa/108007, ipa/108470, ipa/110705, ipa/112616, ipa/113490,
- libstdc++/113500, libstdc++/113512, middle-end/88345,
- middle-end/112684, middle-end/113574, modula2/113559, other/111966,
- rtl-optimization/111267, rtl-optimization/113255, target/82420,
- target/100942, target/108521, target/108640, target/109092,
- target/109636, target/110934, target/111279, target/112989,
- target/113030, target/113070, target/113089, target/113095,
- target/113114, target/113356, target/113420, target/113485,
- target/113486, target/113495, target/113550, target/113556,
- target/113572, testsuite/113437, testsuite/113548,
- tree-optimization/69807, tree-optimization/113364,
- tree-optimization/113373, tree-optimization/113459,
- tree-optimization/113462, tree-optimization/113463,
- tree-optimization/113464, tree-optimization/113491,
- tree-optimization/113494, tree-optimization/113552,
- tree-optimization/113576
-- add offloading support for AMD GCN ROCm capable devices
-
-* Thu Jan 18 2024 Jakub Jelinek 14.0.1-0.2
-- update from trunk
- - PRs ada/113397, analyzer/106229, analyzer/113150, analyzer/113333,
- bootstrap/113445, c++/99493, c++/104634, c++/109899, c++/110065,
- c++/112588, c++/113242, c++/113292, c++/113307, c++/113340,
- c++/113389, c/111693, fortran/67277, fortran/113305, libstdc++/108822,
- libstdc++/108827, libstdc++/109536, libstdc++/111327,
- libstdc++/113318, libstdc++/113450, middle-end/90348,
- middle-end/110115, middle-end/110847, middle-end/111422,
- middle-end/111659, middle-end/113354, middle-end/113406,
- middle-end/113409, middle-end/113410, modula2/111956, other/113399,
- rtl-optimization/96388, rtl-optimization/111554,
- rtl-optimization/113048, rust/108111, target/105522, target/107201,
- target/112573, target/112944, target/112973, target/113122,
- target/113156, target/113221, target/113247, target/113281,
- target/113393, target/113404, target/113429, testsuite/109705,
- testsuite/111850, testsuite/113366, testsuite/113369,
- testsuite/113446, testsuite/113452, translation/108890,
- tree-optimization/91624, tree-optimization/107823,
- tree-optimization/110251, tree-optimization/110422,
- tree-optimization/110450, tree-optimization/110768,
- tree-optimization/110794, tree-optimization/110841,
- tree-optimization/110852, tree-optimization/110941,
- tree-optimization/112774, tree-optimization/113091,
- tree-optimization/113287, tree-optimization/113361,
- tree-optimization/113370, tree-optimization/113371,
- tree-optimization/113372, tree-optimization/113374,
- tree-optimization/113385, tree-optimization/113408,
- tree-optimization/113421, tree-optimization/113431,
- tree-optimization/113475
-
-* Sat Jan 13 2024 Jakub Jelinek 14.0.1-0.1
+* Thu Jan 9 2025 Jakub Jelinek 15.0.0-0.3
- new package
diff --git a/gcc14-pr101523.patch b/gcc14-pr101523.patch
deleted file mode 100644
index 8f3b47b..0000000
--- a/gcc14-pr101523.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-Based on Richi's patch:
-
-~~
-The following avoids re-walking and re-combining the instructions
-between i2 and i3 when the pattern of i2 doesn't change.
-
-Bootstrap and regtest running ontop of a reversal of
-r14-9692-g839bc42772ba7a.
-
-It brings down memory use from 9GB to 400MB and compile-time from
-80s to 3.5s. r14-9692-g839bc42772ba7a does better in both metrics
-but has shown code generation regressions across architectures.
-
- PR rtl-optimization/101523
- * combine.cc (try_combine): When the pattern of i2 doesn't
- change do not re-start combining at i2 or an earlier insn which
- had links or notes added.
-~~
-But, since the patch affects code generation (for instance,
-libstdc++-v3/src/c++17/floating_from_chars.o), we limit the bailing out
-only when I2 hasn't been changed 1000x. I've measured how many times
-at most is I2 unchanged during a bootstrap + regtest.
-x86: 134
-aarch64: 736 (gimple-match-1.cc)
-s390x: 635 (gimple-match-*)
-ppc64le: 620 (gimple-match-*)
-while certain pathological testcases trigger it more than 10,000 times.
-With the limit in place this patch doesn't affect common code.
-
---- a/gcc/combine.cc
-+++ b/gcc/combine.cc
-@@ -92,6 +92,11 @@ along with GCC; see the file COPYING3. If not see
- #include "function-abi.h"
- #include "rtlanal.h"
-
-+/* Number of times I2 didn't change in try_combine. Used to prevent a
-+ combinatorial explosion. */
-+
-+static int combine_i2_unchanged;
-+
- /* Number of attempts to combine instructions in this function. */
-
- static int combine_attempts;
-@@ -1127,6 +1132,7 @@ combine_instructions (rtx_insn *f, unsigned int nregs)
- return false;
-
- combine_attempts = 0;
-+ combine_i2_unchanged = 0;
- combine_merges = 0;
- combine_extras = 0;
- combine_successes = 0;
-@@ -4196,6 +4201,10 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
- adjust_for_new_dest (i3);
- }
-
-+ bool i2_i2_unchanged = false;
-+ if (rtx_equal_p (newi2pat, PATTERN (i2)))
-+ i2_i2_unchanged = true;
-+
- /* We now know that we can do this combination. Merge the insns and
- update the status of registers and LOG_LINKS. */
-
-@@ -4762,6 +4771,13 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
- combine_successes++;
- undo_commit ();
-
-+ if (i2_i2_unchanged)
-+ {
-+ if (combine_i2_unchanged == 1000)
-+ return i3;
-+ ++combine_i2_unchanged;
-+ }
-+
- rtx_insn *ret = newi2pat ? i2 : i3;
- if (added_links_insn && DF_INSN_LUID (added_links_insn) < DF_INSN_LUID (ret))
- ret = added_links_insn;
diff --git a/gcc14-Wno-format-security.patch b/gcc15-Wno-format-security.patch
similarity index 80%
rename from gcc14-Wno-format-security.patch
rename to gcc15-Wno-format-security.patch
index e317c15..66f62b8 100644
--- a/gcc14-Wno-format-security.patch
+++ b/gcc15-Wno-format-security.patch
@@ -9,15 +9,15 @@
* configure: Regenerated.
--- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +0100
-+++ gcc/configure.ac 2017-02-25 12:42:32.859175403 +0100
-@@ -570,7 +570,7 @@ AC_ARG_ENABLE(build-format-warnings,
++++ gcc/configure.ac 2024-11-30 13:34:11.100296256 +0100
+@@ -592,7 +592,7 @@ AC_ARG_ENABLE(build-format-warnings,
AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
[],[enable_build_format_warnings=yes])
AS_IF([test $enable_build_format_warnings = no],
- [wf_opt=-Wno-format],[wf_opt=])
+ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=])
ACX_PROG_CXX_WARNING_OPTS(
- m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
+ m4_quote(m4_do([-W -Wall -Wno-error=narrowing -Wwrite-strings ],
[-Wcast-qual $wf_opt])),
--- gcc/configure.jj 2017-02-13 12:20:52.000000000 +0100
+++ gcc/configure 2017-02-25 12:42:50.041946391 +0100
@@ -31,8 +31,8 @@
wf_opt=
fi
--- Makefile.tpl.jj 2023-11-29 13:21:41.680292662 +0100
-+++ Makefile.tpl 2023-11-29 13:23:24.677839321 +0100
-@@ -448,9 +448,9 @@ LDFLAGS = @LDFLAGS@
++++ Makefile.tpl 2024-11-30 13:35:29.303196246 +0100
+@@ -450,9 +450,9 @@ LDFLAGS = @LDFLAGS@
LIBCFLAGS = $(CFLAGS)
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
@@ -43,11 +43,11 @@
+GDCFLAGS = $(filter-out -Wformat-security,@GDCFLAGS@)
+GM2FLAGS = $(filter-out -Wformat-security,$(CFLAGS))
- PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+ CRAB1_LIBS = @CRAB1_LIBS@
--- Makefile.in.jj 2023-11-29 13:21:41.691292507 +0100
-+++ Makefile.in 2023-11-29 13:24:01.254323180 +0100
-@@ -445,9 +445,9 @@ LDFLAGS = @LDFLAGS@
++++ Makefile.in 2024-11-30 13:36:12.113594079 +0100
+@@ -447,9 +447,9 @@ LDFLAGS = @LDFLAGS@
LIBCFLAGS = $(CFLAGS)
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
@@ -58,5 +58,5 @@
+GDCFLAGS = $(filter-out -Wformat-security,@GDCFLAGS@)
+GM2FLAGS = $(filter-out -Wformat-security,$(CFLAGS))
- PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+ CRAB1_LIBS = @CRAB1_LIBS@
diff --git a/gcc14-d-shared-libphobos.patch b/gcc15-d-shared-libphobos.patch
similarity index 100%
rename from gcc14-d-shared-libphobos.patch
rename to gcc15-d-shared-libphobos.patch
diff --git a/gcc14-fortran-fdec-duplicates.patch b/gcc15-fortran-fdec-duplicates.patch
similarity index 100%
rename from gcc14-fortran-fdec-duplicates.patch
rename to gcc15-fortran-fdec-duplicates.patch
diff --git a/gcc14-hack.patch b/gcc15-hack.patch
similarity index 57%
rename from gcc14-hack.patch
rename to gcc15-hack.patch
index e98649e..9c5d57b 100644
--- a/gcc14-hack.patch
+++ b/gcc15-hack.patch
@@ -66,61 +66,117 @@
GDCFLAGS="$(GDCFLAGS) $${flags}" \
CXXFLAGS="$(CXXFLAGS) $${flags}" \
--- libcpp/macro.cc.jj 2019-01-09 13:01:21.420552123 +0100
-+++ libcpp/macro.cc 2019-01-11 18:18:17.736876285 +0100
-@@ -3256,8 +3256,6 @@ static cpp_macro *
++++ libcpp/macro.cc 2024-11-30 13:16:41.163056391 +0100
+@@ -3680,8 +3680,6 @@ static cpp_macro *
create_iso_definition (cpp_reader *pfile)
{
bool following_paste_op = false;
- const char *paste_op_error_msg =
-- N_("'##' cannot appear at either end of a macro expansion");
+- N_("%<##%> cannot appear at either end of a macro expansion");
unsigned int num_extra_tokens = 0;
unsigned nparms = 0;
cpp_hashnode **params = NULL;
-@@ -3382,7 +3380,9 @@ create_iso_definition (cpp_reader *pfile
+@@ -3809,7 +3807,9 @@ create_iso_definition (cpp_reader *pfile
function-like macros, but not at the end. */
if (following_paste_op)
{
- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
+ cpp_error (pfile, CPP_DL_ERROR,
-+ "'##' cannot appear at either end of a macro "
++ "%<##%> cannot appear at either end of a macro "
+ "expansion");
goto out;
}
if (!vaopt_tracker.completed ())
-@@ -3397,7 +3397,9 @@ create_iso_definition (cpp_reader *pfile
+@@ -3824,7 +3824,9 @@ create_iso_definition (cpp_reader *pfile
function-like macros, but not at the beginning. */
if (macro->count == 1)
{
- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
+ cpp_error (pfile, CPP_DL_ERROR,
-+ "'##' cannot appear at either end of a macro "
++ "%<##%> cannot appear at either end of a macro "
+ "expansion");
goto out;
}
--- libcpp/expr.cc.jj 2019-01-09 13:01:22.415535734 +0100
-+++ libcpp/expr.cc 2019-01-11 18:16:23.444726882 +0100
-@@ -803,16 +803,17 @@ cpp_classify_number (cpp_reader *pfile,
++++ libcpp/expr.cc 2024-11-30 13:14:52.468583689 +0100
+@@ -874,50 +874,54 @@ cpp_classify_number (cpp_reader *pfile,
if ((result & CPP_N_WIDTH) == CPP_N_LARGE
&& CPP_OPTION (pfile, cpp_warn_long_long))
{
-- const char *message = CPP_OPTION (pfile, cplusplus)
+- const char *message = CPP_OPTION (pfile, cplusplus)
- ? N_("use of C++11 long long integer constant")
- : N_("use of C99 long long integer constant");
-
if (CPP_OPTION (pfile, c99))
- cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location,
+- cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location,
- 0, message);
-+ 0, CPP_OPTION (pfile, cplusplus)
-+ ? N_("use of C++11 long long integer constant")
-+ : N_("use of C99 long long integer constant"));
++ cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location, 0,
++ CPP_OPTION (pfile, cplusplus)
++ ? N_("use of C++11 long long integer "
++ "constant")
++ : N_("use of C99 long long integer "
++ "constant"));
else
cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG,
- virtual_location, 0, message);
+ virtual_location, 0,
+ CPP_OPTION (pfile, cplusplus)
-+ ? N_("use of C++11 long long integer constant")
-+ : N_("use of C99 long long integer constant"));
++ ? N_("use of C++11 long long integer "
++ "constant")
++ : N_("use of C99 long long integer "
++ "constant"));
}
if ((result & CPP_N_SIZE_T) == CPP_N_SIZE_T
+ && !CPP_OPTION (pfile, size_t_literals))
+- {
+- const char *message
+- = (result & CPP_N_UNSIGNED) == CPP_N_UNSIGNED
+- ? N_("use of C++23 % integer constant")
+- : N_("use of C++23 %%> integer constant");
+- cpp_warning_with_line (pfile, CPP_W_SIZE_T_LITERALS,
+- virtual_location, 0, message);
+- }
++ cpp_warning_with_line (pfile, CPP_W_SIZE_T_LITERALS,
++ virtual_location, 0,
++ (result & CPP_N_UNSIGNED) == CPP_N_UNSIGNED
++ ? N_("use of C++23 % integer "
++ "constant")
++ : N_("use of C++23 %%> "
++ "integer constant"));
+
+ if ((result & CPP_N_BITINT) != 0
+ && CPP_OPTION (pfile, cpp_warn_c11_c23_compat) != 0)
+ {
+ if (CPP_OPTION (pfile, cpp_warn_c11_c23_compat) > 0)
+ {
+- const char *message = N_("ISO C does not support literal "
+- "% suffixes before C23");
+ if (CPP_PEDANTIC (pfile) && !CPP_OPTION (pfile, true_false))
+ cpp_pedwarning_with_line (pfile, CPP_W_C11_C23_COMPAT,
+- virtual_location, 0, message);
++ virtual_location, 0,
++ "ISO C does not support literal "
++ "% suffixes before C23");
+ else
+ cpp_warning_with_line (pfile, CPP_W_C11_C23_COMPAT,
+- virtual_location, 0, message);
+- }
+- else if (!CPP_OPTION (pfile, true_false))
+- {
+- const char *message = N_("ISO C does not support literal "
++ virtual_location, 0,
++ "ISO C does not support literal "
+ "% suffixes before C23");
+- cpp_pedwarning_with_line (pfile, CPP_W_PEDANTIC,
+- virtual_location, 0, message);
+ }
++ else if (!CPP_OPTION (pfile, true_false))
++ cpp_pedwarning_with_line (pfile, CPP_W_PEDANTIC,
++ virtual_location, 0,
++ "ISO C does not support literal "
++ "% suffixes before C23");
+ }
+
+ result |= CPP_N_INTEGER;
diff --git a/gcc14-isl-dl.patch b/gcc15-isl-dl.patch
similarity index 99%
rename from gcc14-isl-dl.patch
rename to gcc15-isl-dl.patch
index 20dd8bf..dc0c49b 100644
--- a/gcc14-isl-dl.patch
+++ b/gcc15-isl-dl.patch
@@ -696,16 +696,16 @@
static void
--- gcc/toplev.cc.jj 2017-02-19 13:02:31.000000000 +0100
-+++ gcc/toplev.cc 2017-02-19 16:50:25.536301350 +0100
-@@ -94,6 +94,7 @@ along with GCC; see the file COPYING3.
++++ gcc/toplev.cc 2024-11-30 13:22:34.175096117 +0100
+@@ -100,6 +100,7 @@ along with GCC; see the file COPYING3.
#ifdef HAVE_isl
#include
+extern const char *get_isl_version (bool);
#endif
- static void general_init (const char *, bool);
-@@ -683,7 +684,7 @@ print_version (FILE *file, const char *i
+ static void general_init (const char *, bool, unique_argv original_argv);
+@@ -652,7 +653,7 @@ print_version (FILE *file, const char *i
#ifndef HAVE_isl
"none"
#else
diff --git a/gcc14-isl-dl2.patch b/gcc15-isl-dl2.patch
similarity index 89%
rename from gcc14-isl-dl2.patch
rename to gcc15-isl-dl2.patch
index 2e12499..8d2c4d9 100644
--- a/gcc14-isl-dl2.patch
+++ b/gcc15-isl-dl2.patch
@@ -6,8 +6,8 @@
directory.
--- gcc/toplev.cc.jj 2008-12-09 23:59:10.000000000 +0100
-+++ gcc/toplev.cc 2009-01-27 14:33:52.000000000 +0100
-@@ -113,6 +113,8 @@ static void finalize (bool);
++++ gcc/toplev.cc 2024-11-30 13:26:05.085132543 +0100
+@@ -112,6 +112,8 @@ static void finalize ();
static void crash_signal (int) ATTRIBUTE_NORETURN;
static void compile_file (void);
@@ -16,14 +16,14 @@
/* Decoded options, and number of such options. */
struct cl_decoded_option *save_decoded_options;
unsigned int save_decoded_options_count;
-@@ -2239,6 +2241,8 @@ toplev::main (int argc, char **argv)
+@@ -2296,6 +2298,8 @@ toplev::main (int argc, char **argv)
expandargv (&argc, &argv);
+ toplev_main_argv = CONST_CAST2 (const char **, char **, argv);
+
/* Initialization of GCC's environment, and diagnostics. */
- general_init (argv[0], m_init_signals);
+ general_init (argv[0], m_init_signals, std::move (original_argv));
--- gcc/graphite.cc.jj 2010-12-01 10:24:32.000000000 -0500
+++ gcc/graphite.cc 2010-12-01 11:46:07.832118193 -0500
diff --git a/gcc14-libgomp-omp_h-multilib.patch b/gcc15-libgomp-omp_h-multilib.patch
similarity index 100%
rename from gcc14-libgomp-omp_h-multilib.patch
rename to gcc15-libgomp-omp_h-multilib.patch
diff --git a/gcc14-libstdc++-docs.patch b/gcc15-libstdc++-docs.patch
similarity index 74%
rename from gcc14-libstdc++-docs.patch
rename to gcc15-libstdc++-docs.patch
index 0e0e0f9..fc94419 100644
--- a/gcc14-libstdc++-docs.patch
+++ b/gcc15-libstdc++-docs.patch
@@ -4,21 +4,21 @@
FSF
-+ Release 14.2.1
++ Release 15.0.0
+
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
License, Version 1.2 or any later version published by the
--- libstdc++-v3/doc/html/api.html.jj 2011-01-03 12:53:21.000000000 +0100
-+++ libstdc++-v3/doc/html/api.html 2011-01-04 18:12:01.672757784 +0100
++++ libstdc++-v3/doc/html/api.html 2024-11-30 13:30:16.607594623 +0100
@@ -20,7 +20,9 @@
member functions for the library classes, finding out what is in a
particular include file, looking at inheritance diagrams, etc.
- The API documentation, rendered into HTML, can be viewed online
+ The API documentation, rendered into HTML, can be viewed locally
-+ for the 14.2.1 release,
++ for the 15.0.0 release,
+ online
- for each GCC release
+ for each GCC release
and
-
+
diff --git a/gcc14-libtool-no-rpath.patch b/gcc15-libtool-no-rpath.patch
similarity index 100%
rename from gcc14-libtool-no-rpath.patch
rename to gcc15-libtool-no-rpath.patch
diff --git a/gcc14-no-add-needed.patch b/gcc15-no-add-needed.patch
similarity index 100%
rename from gcc14-no-add-needed.patch
rename to gcc15-no-add-needed.patch
diff --git a/gcc15-pr118206.patch b/gcc15-pr118206.patch
new file mode 100644
index 0000000..a72ae36
--- /dev/null
+++ b/gcc15-pr118206.patch
@@ -0,0 +1,581 @@
+2025-01-09 Jakub Jelinek
+
+ PR tree-optimization/118206
+ * gimple-fold.cc (fold_truth_andor_for_ifcombine): Temporarily disable.
+ * fold-const.cc (decode_field_reference, all_ones_mask_p, unextend,
+ fold_truth_andor_1): Temporarily revert 2024-12-12 changes.
+
+--- gcc/gimple-fold.cc.jj 2025-01-02 11:23:09.379616499 +0100
++++ gcc/gimple-fold.cc 2025-01-09 09:08:53.789628193 +0100
+@@ -8037,7 +8037,8 @@ fold_truth_andor_for_ifcombine (enum tre
+ it were surrounded with a NE_EXPR. */
+
+ if (TREE_CODE_CLASS (lcode) != tcc_comparison
+- || TREE_CODE_CLASS (rcode) != tcc_comparison)
++ || TREE_CODE_CLASS (rcode) != tcc_comparison
++ || 1)
+ return 0;
+
+ /* We don't normally find TRUTH_*IF_EXPR in gimple, but these codes may be
+--- gcc/fold-const.cc.jj
++++ gcc/fold-const.cc
+@@ -137,6 +137,7 @@ static tree range_successor (tree);
+ static tree fold_range_test (location_t, enum tree_code, tree, tree, tree);
+ static tree fold_cond_expr_with_comparison (location_t, tree, enum tree_code,
+ tree, tree, tree, tree);
++static tree unextend (tree, int, int, tree);
+ static tree extract_muldiv (tree, tree, enum tree_code, tree, bool *);
+ static tree extract_muldiv_1 (tree, tree, enum tree_code, tree, bool *);
+ static tree fold_binary_op_with_conditional_arg (location_t,
+@@ -5021,6 +5022,136 @@ optimize_bit_field_compare (location_t loc, enum tree_code code,
+ return lhs;
+ }
+
++/* Subroutine for fold_truth_andor_1: decode a field reference.
++
++ If EXP is a comparison reference, we return the innermost reference.
++
++ *PBITSIZE is set to the number of bits in the reference, *PBITPOS is
++ set to the starting bit number.
++
++ If the innermost field can be completely contained in a mode-sized
++ unit, *PMODE is set to that mode. Otherwise, it is set to VOIDmode.
++
++ *PVOLATILEP is set to 1 if the any expression encountered is volatile;
++ otherwise it is not changed.
++
++ *PUNSIGNEDP is set to the signedness of the field.
++
++ *PREVERSEP is set to the storage order of the field.
++
++ *PMASK is set to the mask used. This is either contained in a
++ BIT_AND_EXPR or derived from the width of the field.
++
++ *PAND_MASK is set to the mask found in a BIT_AND_EXPR, if any.
++
++ Return 0 if this is not a component reference or is one that we can't
++ do anything with. */
++
++static tree
++decode_field_reference (location_t loc, tree *exp_, HOST_WIDE_INT *pbitsize,
++ HOST_WIDE_INT *pbitpos, machine_mode *pmode,
++ int *punsignedp, int *preversep, int *pvolatilep,
++ tree *pmask, tree *pand_mask)
++{
++ tree exp = *exp_;
++ tree outer_type = 0;
++ tree and_mask = 0;
++ tree mask, inner, offset;
++ tree unsigned_type;
++ unsigned int precision;
++
++ /* All the optimizations using this function assume integer fields.
++ There are problems with FP fields since the type_for_size call
++ below can fail for, e.g., XFmode. */
++ if (! INTEGRAL_TYPE_P (TREE_TYPE (exp)))
++ return NULL_TREE;
++
++ /* We are interested in the bare arrangement of bits, so strip everything
++ that doesn't affect the machine mode. However, record the type of the
++ outermost expression if it may matter below. */
++ if (CONVERT_EXPR_P (exp)
++ || TREE_CODE (exp) == NON_LVALUE_EXPR)
++ outer_type = TREE_TYPE (exp);
++ STRIP_NOPS (exp);
++
++ if (TREE_CODE (exp) == BIT_AND_EXPR)
++ {
++ and_mask = TREE_OPERAND (exp, 1);
++ exp = TREE_OPERAND (exp, 0);
++ STRIP_NOPS (exp); STRIP_NOPS (and_mask);
++ if (TREE_CODE (and_mask) != INTEGER_CST)
++ return NULL_TREE;
++ }
++
++ poly_int64 poly_bitsize, poly_bitpos;
++ inner = get_inner_reference (exp, &poly_bitsize, &poly_bitpos, &offset,
++ pmode, punsignedp, preversep, pvolatilep);
++ if ((inner == exp && and_mask == 0)
++ || !poly_bitsize.is_constant (pbitsize)
++ || !poly_bitpos.is_constant (pbitpos)
++ || *pbitsize < 0
++ || offset != 0
++ || TREE_CODE (inner) == PLACEHOLDER_EXPR
++ /* We eventually want to build a larger reference and need to take
++ the address of this. */
++ || (!REFERENCE_CLASS_P (inner) && !DECL_P (inner))
++ /* Reject out-of-bound accesses (PR79731). */
++ || (! AGGREGATE_TYPE_P (TREE_TYPE (inner))
++ && compare_tree_int (TYPE_SIZE (TREE_TYPE (inner)),
++ *pbitpos + *pbitsize) < 0))
++ return NULL_TREE;
++
++ unsigned_type = lang_hooks.types.type_for_size (*pbitsize, 1);
++ if (unsigned_type == NULL_TREE)
++ return NULL_TREE;
++
++ *exp_ = exp;
++
++ /* If the number of bits in the reference is the same as the bitsize of
++ the outer type, then the outer type gives the signedness. Otherwise
++ (in case of a small bitfield) the signedness is unchanged. */
++ if (outer_type && *pbitsize == TYPE_PRECISION (outer_type))
++ *punsignedp = TYPE_UNSIGNED (outer_type);
++
++ /* Compute the mask to access the bitfield. */
++ precision = TYPE_PRECISION (unsigned_type);
++
++ mask = build_int_cst_type (unsigned_type, -1);
++
++ mask = const_binop (LSHIFT_EXPR, mask, size_int (precision - *pbitsize));
++ mask = const_binop (RSHIFT_EXPR, mask, size_int (precision - *pbitsize));
++
++ /* Merge it with the mask we found in the BIT_AND_EXPR, if any. */
++ if (and_mask != 0)
++ mask = fold_build2_loc (loc, BIT_AND_EXPR, unsigned_type,
++ fold_convert_loc (loc, unsigned_type, and_mask), mask);
++
++ *pmask = mask;
++ *pand_mask = and_mask;
++ return inner;
++}
++
++/* Return nonzero if MASK represents a mask of SIZE ones in the low-order
++ bit positions and MASK is SIGNED. */
++
++static bool
++all_ones_mask_p (const_tree mask, unsigned int size)
++{
++ tree type = TREE_TYPE (mask);
++ unsigned int precision = TYPE_PRECISION (type);
++
++ /* If this function returns true when the type of the mask is
++ UNSIGNED, then there will be errors. In particular see
++ gcc.c-torture/execute/990326-1.c. There does not appear to be
++ any documentation paper trail as to why this is so. But the pre
++ wide-int worked with that restriction and it has been preserved
++ here. */
++ if (size > precision || TYPE_SIGN (type) == UNSIGNED)
++ return false;
++
++ return wi::mask (size, false, precision) == wi::to_wide (mask);
++}
++
+ /* Subroutine for fold: determine if VAL is the INTEGER_CONST that
+ represents the sign bit of EXP's type. If EXP represents a sign
+ or zero extension, also test VAL against the unextended type.
+@@ -6330,6 +6461,48 @@ fold_range_test (location_t loc, enum tree_code code, tree type,
+ return 0;
+ }
+
++/* Subroutine for fold_truth_andor_1: C is an INTEGER_CST interpreted as a P
++ bit value. Arrange things so the extra bits will be set to zero if and
++ only if C is signed-extended to its full width. If MASK is nonzero,
++ it is an INTEGER_CST that should be AND'ed with the extra bits. */
++
++static tree
++unextend (tree c, int p, int unsignedp, tree mask)
++{
++ tree type = TREE_TYPE (c);
++ int modesize = GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (type));
++ tree temp;
++
++ if (p == modesize || unsignedp)
++ return c;
++
++ /* We work by getting just the sign bit into the low-order bit, then
++ into the high-order bit, then sign-extend. We then XOR that value
++ with C. */
++ temp = build_int_cst (TREE_TYPE (c),
++ wi::extract_uhwi (wi::to_wide (c), p - 1, 1));
++
++ /* We must use a signed type in order to get an arithmetic right shift.
++ However, we must also avoid introducing accidental overflows, so that
++ a subsequent call to integer_zerop will work. Hence we must
++ do the type conversion here. At this point, the constant is either
++ zero or one, and the conversion to a signed type can never overflow.
++ We could get an overflow if this conversion is done anywhere else. */
++ if (TYPE_UNSIGNED (type))
++ temp = fold_convert (signed_type_for (type), temp);
++
++ temp = const_binop (LSHIFT_EXPR, temp, size_int (modesize - 1));
++ temp = const_binop (RSHIFT_EXPR, temp, size_int (modesize - p - 1));
++ if (mask != 0)
++ temp = const_binop (BIT_AND_EXPR, temp,
++ fold_convert (TREE_TYPE (c), mask));
++ /* If necessary, convert the type back to match the type of C. */
++ if (TYPE_UNSIGNED (type))
++ temp = fold_convert (type, temp);
++
++ return fold_convert (type, const_binop (BIT_XOR_EXPR, c, temp));
++}
++
+ /* For an expression that has the form
+ (A && B) || ~B
+ or
+@@ -6400,13 +6573,20 @@ merge_truthop_with_opposite_arm (location_t loc, tree op, tree cmpop,
+ lhs, rhs);
+ return NULL_TREE;
+ }
+-
++
+ /* Find ways of folding logical expressions of LHS and RHS:
+ Try to merge two comparisons to the same innermost item.
+ Look for range tests like "ch >= '0' && ch <= '9'".
+ Look for combinations of simple terms on machines with expensive branches
+ and evaluate the RHS unconditionally.
+
++ For example, if we have p->a == 2 && p->b == 4 and we can make an
++ object large enough to span both A and B, we can do this with a comparison
++ against the object ANDed with the a mask.
++
++ If we have p->a == q->a && p->b == q->b, we may be able to use bit masking
++ operations to do this with one comparison.
++
+ We check for both normal comparisons and the BIT_AND_EXPRs made this by
+ function and the one above.
+
+@@ -6431,9 +6611,24 @@ fold_truth_andor_1 (location_t loc, enum tree_code code, tree truth_type,
+ convert EQ_EXPR to NE_EXPR so we need not reject the "wrong"
+ comparison for one-bit fields. */
+
++ enum tree_code wanted_code;
+ enum tree_code lcode, rcode;
+ tree ll_arg, lr_arg, rl_arg, rr_arg;
+- tree result;
++ tree ll_inner, lr_inner, rl_inner, rr_inner;
++ HOST_WIDE_INT ll_bitsize, ll_bitpos, lr_bitsize, lr_bitpos;
++ HOST_WIDE_INT rl_bitsize, rl_bitpos, rr_bitsize, rr_bitpos;
++ HOST_WIDE_INT xll_bitpos, xlr_bitpos, xrl_bitpos, xrr_bitpos;
++ HOST_WIDE_INT lnbitsize, lnbitpos, rnbitsize, rnbitpos;
++ int ll_unsignedp, lr_unsignedp, rl_unsignedp, rr_unsignedp;
++ int ll_reversep, lr_reversep, rl_reversep, rr_reversep;
++ machine_mode ll_mode, lr_mode, rl_mode, rr_mode;
++ scalar_int_mode lnmode, rnmode;
++ tree ll_mask, lr_mask, rl_mask, rr_mask;
++ tree ll_and_mask, lr_and_mask, rl_and_mask, rr_and_mask;
++ tree l_const, r_const;
++ tree lntype, rntype, result;
++ HOST_WIDE_INT first_bit, end_bit;
++ int volatilep;
+
+ /* Start by getting the comparison codes. Fail if anything is volatile.
+ If one operand is a BIT_AND_EXPR with the constant one, treat it as if
+@@ -6528,7 +6723,316 @@ fold_truth_andor_1 (location_t loc, enum tree_code code, tree truth_type,
+ build_int_cst (TREE_TYPE (ll_arg), 0));
+ }
+
+- return 0;
++ /* See if the comparisons can be merged. Then get all the parameters for
++ each side. */
++
++ if ((lcode != EQ_EXPR && lcode != NE_EXPR)
++ || (rcode != EQ_EXPR && rcode != NE_EXPR))
++ return 0;
++
++ ll_reversep = lr_reversep = rl_reversep = rr_reversep = 0;
++ volatilep = 0;
++ ll_inner = decode_field_reference (loc, &ll_arg,
++ &ll_bitsize, &ll_bitpos, &ll_mode,
++ &ll_unsignedp, &ll_reversep, &volatilep,
++ &ll_mask, &ll_and_mask);
++ lr_inner = decode_field_reference (loc, &lr_arg,
++ &lr_bitsize, &lr_bitpos, &lr_mode,
++ &lr_unsignedp, &lr_reversep, &volatilep,
++ &lr_mask, &lr_and_mask);
++ rl_inner = decode_field_reference (loc, &rl_arg,
++ &rl_bitsize, &rl_bitpos, &rl_mode,
++ &rl_unsignedp, &rl_reversep, &volatilep,
++ &rl_mask, &rl_and_mask);
++ rr_inner = decode_field_reference (loc, &rr_arg,
++ &rr_bitsize, &rr_bitpos, &rr_mode,
++ &rr_unsignedp, &rr_reversep, &volatilep,
++ &rr_mask, &rr_and_mask);
++
++ /* It must be true that the inner operation on the lhs of each
++ comparison must be the same if we are to be able to do anything.
++ Then see if we have constants. If not, the same must be true for
++ the rhs's. */
++ if (volatilep
++ || ll_reversep != rl_reversep
++ || ll_inner == 0 || rl_inner == 0
++ || ! operand_equal_p (ll_inner, rl_inner, 0))
++ return 0;
++
++ if (TREE_CODE (lr_arg) == INTEGER_CST
++ && TREE_CODE (rr_arg) == INTEGER_CST)
++ {
++ l_const = lr_arg, r_const = rr_arg;
++ lr_reversep = ll_reversep;
++ }
++ else if (lr_reversep != rr_reversep
++ || lr_inner == 0 || rr_inner == 0
++ || ! operand_equal_p (lr_inner, rr_inner, 0))
++ return 0;
++ else
++ l_const = r_const = 0;
++
++ /* If either comparison code is not correct for our logical operation,
++ fail. However, we can convert a one-bit comparison against zero into
++ the opposite comparison against that bit being set in the field. */
++
++ wanted_code = (code == TRUTH_AND_EXPR ? EQ_EXPR : NE_EXPR);
++ if (lcode != wanted_code)
++ {
++ if (l_const && integer_zerop (l_const) && integer_pow2p (ll_mask))
++ {
++ /* Make the left operand unsigned, since we are only interested
++ in the value of one bit. Otherwise we are doing the wrong
++ thing below. */
++ ll_unsignedp = 1;
++ l_const = ll_mask;
++ }
++ else
++ return 0;
++ }
++
++ /* This is analogous to the code for l_const above. */
++ if (rcode != wanted_code)
++ {
++ if (r_const && integer_zerop (r_const) && integer_pow2p (rl_mask))
++ {
++ rl_unsignedp = 1;
++ r_const = rl_mask;
++ }
++ else
++ return 0;
++ }
++
++ /* See if we can find a mode that contains both fields being compared on
++ the left. If we can't, fail. Otherwise, update all constants and masks
++ to be relative to a field of that size. */
++ first_bit = MIN (ll_bitpos, rl_bitpos);
++ end_bit = MAX (ll_bitpos + ll_bitsize, rl_bitpos + rl_bitsize);
++ if (!get_best_mode (end_bit - first_bit, first_bit, 0, 0,
++ TYPE_ALIGN (TREE_TYPE (ll_inner)), BITS_PER_WORD,
++ volatilep, &lnmode))
++ return 0;
++
++ lnbitsize = GET_MODE_BITSIZE (lnmode);
++ lnbitpos = first_bit & ~ (lnbitsize - 1);
++ lntype = lang_hooks.types.type_for_size (lnbitsize, 1);
++ xll_bitpos = ll_bitpos - lnbitpos, xrl_bitpos = rl_bitpos - lnbitpos;
++
++ if (ll_reversep ? !BYTES_BIG_ENDIAN : BYTES_BIG_ENDIAN)
++ {
++ xll_bitpos = lnbitsize - xll_bitpos - ll_bitsize;
++ xrl_bitpos = lnbitsize - xrl_bitpos - rl_bitsize;
++ }
++
++ ll_mask = const_binop (LSHIFT_EXPR, fold_convert_loc (loc, lntype, ll_mask),
++ size_int (xll_bitpos));
++ rl_mask = const_binop (LSHIFT_EXPR, fold_convert_loc (loc, lntype, rl_mask),
++ size_int (xrl_bitpos));
++ if (ll_mask == NULL_TREE || rl_mask == NULL_TREE)
++ return 0;
++
++ if (l_const)
++ {
++ l_const = fold_convert_loc (loc, lntype, l_const);
++ l_const = unextend (l_const, ll_bitsize, ll_unsignedp, ll_and_mask);
++ l_const = const_binop (LSHIFT_EXPR, l_const, size_int (xll_bitpos));
++ if (l_const == NULL_TREE)
++ return 0;
++ if (! integer_zerop (const_binop (BIT_AND_EXPR, l_const,
++ fold_build1_loc (loc, BIT_NOT_EXPR,
++ lntype, ll_mask))))
++ {
++ warning (0, "comparison is always %d", wanted_code == NE_EXPR);
++
++ return constant_boolean_node (wanted_code == NE_EXPR, truth_type);
++ }
++ }
++ if (r_const)
++ {
++ r_const = fold_convert_loc (loc, lntype, r_const);
++ r_const = unextend (r_const, rl_bitsize, rl_unsignedp, rl_and_mask);
++ r_const = const_binop (LSHIFT_EXPR, r_const, size_int (xrl_bitpos));
++ if (r_const == NULL_TREE)
++ return 0;
++ if (! integer_zerop (const_binop (BIT_AND_EXPR, r_const,
++ fold_build1_loc (loc, BIT_NOT_EXPR,
++ lntype, rl_mask))))
++ {
++ warning (0, "comparison is always %d", wanted_code == NE_EXPR);
++
++ return constant_boolean_node (wanted_code == NE_EXPR, truth_type);
++ }
++ }
++
++ /* If the right sides are not constant, do the same for it. Also,
++ disallow this optimization if a size, signedness or storage order
++ mismatch occurs between the left and right sides. */
++ if (l_const == 0)
++ {
++ if (ll_bitsize != lr_bitsize || rl_bitsize != rr_bitsize
++ || ll_unsignedp != lr_unsignedp || rl_unsignedp != rr_unsignedp
++ || ll_reversep != lr_reversep
++ /* Make sure the two fields on the right
++ correspond to the left without being swapped. */
++ || ll_bitpos - rl_bitpos != lr_bitpos - rr_bitpos)
++ return 0;
++
++ first_bit = MIN (lr_bitpos, rr_bitpos);
++ end_bit = MAX (lr_bitpos + lr_bitsize, rr_bitpos + rr_bitsize);
++ if (!get_best_mode (end_bit - first_bit, first_bit, 0, 0,
++ TYPE_ALIGN (TREE_TYPE (lr_inner)), BITS_PER_WORD,
++ volatilep, &rnmode))
++ return 0;
++
++ rnbitsize = GET_MODE_BITSIZE (rnmode);
++ rnbitpos = first_bit & ~ (rnbitsize - 1);
++ rntype = lang_hooks.types.type_for_size (rnbitsize, 1);
++ xlr_bitpos = lr_bitpos - rnbitpos, xrr_bitpos = rr_bitpos - rnbitpos;
++
++ if (lr_reversep ? !BYTES_BIG_ENDIAN : BYTES_BIG_ENDIAN)
++ {
++ xlr_bitpos = rnbitsize - xlr_bitpos - lr_bitsize;
++ xrr_bitpos = rnbitsize - xrr_bitpos - rr_bitsize;
++ }
++
++ lr_mask = const_binop (LSHIFT_EXPR, fold_convert_loc (loc,
++ rntype, lr_mask),
++ size_int (xlr_bitpos));
++ rr_mask = const_binop (LSHIFT_EXPR, fold_convert_loc (loc,
++ rntype, rr_mask),
++ size_int (xrr_bitpos));
++ if (lr_mask == NULL_TREE || rr_mask == NULL_TREE)
++ return 0;
++
++ /* Make a mask that corresponds to both fields being compared.
++ Do this for both items being compared. If the operands are the
++ same size and the bits being compared are in the same position
++ then we can do this by masking both and comparing the masked
++ results. */
++ ll_mask = const_binop (BIT_IOR_EXPR, ll_mask, rl_mask);
++ lr_mask = const_binop (BIT_IOR_EXPR, lr_mask, rr_mask);
++ if (lnbitsize == rnbitsize
++ && xll_bitpos == xlr_bitpos
++ && lnbitpos >= 0
++ && rnbitpos >= 0)
++ {
++ lhs = make_bit_field_ref (loc, ll_inner, ll_arg,
++ lntype, lnbitsize, lnbitpos,
++ ll_unsignedp || rl_unsignedp, ll_reversep);
++ if (! all_ones_mask_p (ll_mask, lnbitsize))
++ lhs = build2 (BIT_AND_EXPR, lntype, lhs, ll_mask);
++
++ rhs = make_bit_field_ref (loc, lr_inner, lr_arg,
++ rntype, rnbitsize, rnbitpos,
++ lr_unsignedp || rr_unsignedp, lr_reversep);
++ if (! all_ones_mask_p (lr_mask, rnbitsize))
++ rhs = build2 (BIT_AND_EXPR, rntype, rhs, lr_mask);
++
++ return build2_loc (loc, wanted_code, truth_type, lhs, rhs);
++ }
++
++ /* There is still another way we can do something: If both pairs of
++ fields being compared are adjacent, we may be able to make a wider
++ field containing them both.
++
++ Note that we still must mask the lhs/rhs expressions. Furthermore,
++ the mask must be shifted to account for the shift done by
++ make_bit_field_ref. */
++ if (((ll_bitsize + ll_bitpos == rl_bitpos
++ && lr_bitsize + lr_bitpos == rr_bitpos)
++ || (ll_bitpos == rl_bitpos + rl_bitsize
++ && lr_bitpos == rr_bitpos + rr_bitsize))
++ && ll_bitpos >= 0
++ && rl_bitpos >= 0
++ && lr_bitpos >= 0
++ && rr_bitpos >= 0)
++ {
++ tree type;
++
++ lhs = make_bit_field_ref (loc, ll_inner, ll_arg, lntype,
++ ll_bitsize + rl_bitsize,
++ MIN (ll_bitpos, rl_bitpos),
++ ll_unsignedp, ll_reversep);
++ rhs = make_bit_field_ref (loc, lr_inner, lr_arg, rntype,
++ lr_bitsize + rr_bitsize,
++ MIN (lr_bitpos, rr_bitpos),
++ lr_unsignedp, lr_reversep);
++
++ ll_mask = const_binop (RSHIFT_EXPR, ll_mask,
++ size_int (MIN (xll_bitpos, xrl_bitpos)));
++ lr_mask = const_binop (RSHIFT_EXPR, lr_mask,
++ size_int (MIN (xlr_bitpos, xrr_bitpos)));
++ if (ll_mask == NULL_TREE || lr_mask == NULL_TREE)
++ return 0;
++
++ /* Convert to the smaller type before masking out unwanted bits. */
++ type = lntype;
++ if (lntype != rntype)
++ {
++ if (lnbitsize > rnbitsize)
++ {
++ lhs = fold_convert_loc (loc, rntype, lhs);
++ ll_mask = fold_convert_loc (loc, rntype, ll_mask);
++ type = rntype;
++ }
++ else if (lnbitsize < rnbitsize)
++ {
++ rhs = fold_convert_loc (loc, lntype, rhs);
++ lr_mask = fold_convert_loc (loc, lntype, lr_mask);
++ type = lntype;
++ }
++ }
++
++ if (! all_ones_mask_p (ll_mask, ll_bitsize + rl_bitsize))
++ lhs = build2 (BIT_AND_EXPR, type, lhs, ll_mask);
++
++ if (! all_ones_mask_p (lr_mask, lr_bitsize + rr_bitsize))
++ rhs = build2 (BIT_AND_EXPR, type, rhs, lr_mask);
++
++ return build2_loc (loc, wanted_code, truth_type, lhs, rhs);
++ }
++
++ return 0;
++ }
++
++ /* Handle the case of comparisons with constants. If there is something in
++ common between the masks, those bits of the constants must be the same.
++ If not, the condition is always false. Test for this to avoid generating
++ incorrect code below. */
++ result = const_binop (BIT_AND_EXPR, ll_mask, rl_mask);
++ if (! integer_zerop (result)
++ && simple_cst_equal (const_binop (BIT_AND_EXPR, result, l_const),
++ const_binop (BIT_AND_EXPR, result, r_const)) != 1)
++ {
++ if (wanted_code == NE_EXPR)
++ {
++ warning (0, "% of unmatched not-equal tests is always 1");
++ return constant_boolean_node (true, truth_type);
++ }
++ else
++ {
++ warning (0, "% of mutually exclusive equal-tests is always 0");
++ return constant_boolean_node (false, truth_type);
++ }
++ }
++
++ if (lnbitpos < 0)
++ return 0;
++
++ /* Construct the expression we will return. First get the component
++ reference we will make. Unless the mask is all ones the width of
++ that field, perform the mask operation. Then compare with the
++ merged constant. */
++ result = make_bit_field_ref (loc, ll_inner, ll_arg,
++ lntype, lnbitsize, lnbitpos,
++ ll_unsignedp || rl_unsignedp, ll_reversep);
++
++ ll_mask = const_binop (BIT_IOR_EXPR, ll_mask, rl_mask);
++ if (! all_ones_mask_p (ll_mask, lnbitsize))
++ result = build2_loc (loc, BIT_AND_EXPR, lntype, result, ll_mask);
++
++ return build2_loc (loc, wanted_code, truth_type, result,
++ const_binop (BIT_IOR_EXPR, l_const, r_const));
+ }
+
+ /* T is an integer expression that is being multiplied, divided, or taken a
diff --git a/gcc15-pr118362.patch b/gcc15-pr118362.patch
new file mode 100644
index 0000000..5dedb0a
--- /dev/null
+++ b/gcc15-pr118362.patch
@@ -0,0 +1,17 @@
+2025-01-08 Stefan Schulze Frielinghaus
+
+ PR target/118362
+ * config/s390/s390.cc (s390_constant_via_vgbm_p): Punt on
+ CONST_VECTOR with modes larger than 16 bytes.
+
+--- gcc/config/s390/s390.cc.jj
++++ gcc/config/s390/s390.cc
+@@ -2818,7 +2818,7 @@ s390_constant_via_vgbm_p (rtx op, unsigned *mask)
+ unsigned tmp_mask = 0;
+ int nunit, unit_size;
+
+- if (GET_CODE (op) == CONST_VECTOR)
++ if (GET_CODE (op) == CONST_VECTOR && GET_MODE_SIZE (GET_MODE (op)) <= 16)
+ {
+ if (GET_MODE_INNER (GET_MODE (op)) == TImode
+ || GET_MODE_INNER (GET_MODE (op)) == TFmode)
diff --git a/gcc14-rh1574936.patch b/gcc15-rh1574936.patch
similarity index 100%
rename from gcc14-rh1574936.patch
rename to gcc15-rh1574936.patch
diff --git a/gcc14-sparc-config-detection.patch b/gcc15-sparc-config-detection.patch
similarity index 100%
rename from gcc14-sparc-config-detection.patch
rename to gcc15-sparc-config-detection.patch
diff --git a/sources b/sources
index df7802d..27ec149 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-14.2.1-20241104.tar.xz) = 4a453e1b7e2712fd2a12d28cf2aaf8e76c789f7e747218cdf867eaca84e381305bf119c7db873c5c3f0981657dbefcded77ad74a0960034b95232d906e4b02d0
+SHA512 (gcc-15.0.0-20250109.tar.xz) = 3dc995fc2492494f62977a176bd83e3b08ef87024253060f46681dc483037d8528abecaadd9f0202e2a994239a52d4cc78b3aa3cdad7011ad4c789d789082717
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
-SHA512 (newlib-cygwin-d45261f62a15f8abd94a1031020b9a9f455e4eed.tar.xz) = 31bfc19429797236e268e22b752c5abeabb9c0f39b1058634af8dab329b4f028fc72a35888193c9575f6cee5cf2c069669d79fcb4d4e3a4318f57413452f707d
+SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 130b5c0e0eb90884ad9090e90b511a383e9cede4 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 9 Jan 2025 09:43:05 +0100
Subject: [PATCH 09/71] Fix up PR118362 patch.
---
gcc15-pr118362.patch | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/gcc15-pr118362.patch b/gcc15-pr118362.patch
index 5dedb0a..bcb5d73 100644
--- a/gcc15-pr118362.patch
+++ b/gcc15-pr118362.patch
@@ -1,12 +1,12 @@
-2025-01-08 Stefan Schulze Frielinghaus
+2025-01-09 Stefan Schulze Frielinghaus
PR target/118362
* config/s390/s390.cc (s390_constant_via_vgbm_p): Punt on
CONST_VECTOR with modes larger than 16 bytes.
---- gcc/config/s390/s390.cc.jj
-+++ gcc/config/s390/s390.cc
-@@ -2818,7 +2818,7 @@ s390_constant_via_vgbm_p (rtx op, unsigned *mask)
+--- gcc/config/s390/s390.cc.jj 2025-01-07 18:30:20.697392148 +0100
++++ gcc/config/s390/s390.cc 2025-01-09 09:41:57.428250479 +0100
+@@ -2818,7 +2818,7 @@ s390_constant_via_vgbm_p (rtx op, unsign
unsigned tmp_mask = 0;
int nunit, unit_size;
@@ -14,4 +14,4 @@
+ if (GET_CODE (op) == CONST_VECTOR && GET_MODE_SIZE (GET_MODE (op)) <= 16)
{
if (GET_MODE_INNER (GET_MODE (op)) == TImode
- || GET_MODE_INNER (GET_MODE (op)) == TFmode)
+ || GET_MODE_INNER (GET_MODE (op)) == TFmode)
From f7d926bcedc992f16cbc06305ec58adb5cd6196e Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 9 Jan 2025 21:35:16 +0100
Subject: [PATCH 10/71] 15.0.0-0.3
---
gcc.spec | 4 ----
1 file changed, 4 deletions(-)
diff --git a/gcc.spec b/gcc.spec
index 8656fd3..2e6336a 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1465,12 +1465,8 @@ rm -rf %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/
rm -rf %{buildroot}%{_prefix}/%{_lib}/libc[cp]1*
mv -f %{buildroot}%{_prefix}/nvptx-none/lib/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/
mv -f %{buildroot}%{_prefix}/nvptx-none/lib/mgomp/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mgomp/
-mv -f %{buildroot}%{_prefix}/nvptx-none/lib/mptx-3.1/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mptx-3.1/
-mv -f %{buildroot}%{_prefix}/nvptx-none/lib/mgomp/mptx-3.1/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mgomp/mptx-3.1/
mv -f %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/
mv -f %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/mgomp/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mgomp/
-mv -f %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/mptx-3.1/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mptx-3.1/
-mv -f %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/mgomp/mptx-3.1/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mgomp/mptx-3.1/
find %{buildroot}%{_prefix}/lib/gcc/nvptx-none %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none \
%{buildroot}%{_prefix}/nvptx-none/lib -name \*.la | xargs rm
cd ..
From 33699f47c3926956c3481c9070e48fcc1d1c2241 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 11 Jan 2025 11:38:09 +0100
Subject: [PATCH 11/71] 15.0.0-0.4
---
.gitignore | 1 +
gcc.spec | 21 ++++++++++++++++-----
gcc15-pr118362.patch | 17 -----------------
sources | 2 +-
4 files changed, 18 insertions(+), 23 deletions(-)
delete mode 100644 gcc15-pr118362.patch
diff --git a/.gitignore b/.gitignore
index b074da3..eba52e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
/nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz
/gcc-15.0.0-20250109.tar.xz
/newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz
+/gcc-15.0.0-20250111.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 2e6336a..0c36924 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250109
-%global gitrev f890bd2c90be240213d8f1023aed4ad9647a293c
+%global DATE 20250111
+%global gitrev 20e73534b5a3aeac8624799d31783f12f24e29cb
%global gcc_version 15.0.0
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.3%{?dist}
+Release: %{gcc_release}.4%{?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
@@ -299,7 +299,6 @@ Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr118206.patch
-Patch13: gcc15-pr118362.patch
Patch50: isl-rh2155127.patch
@@ -915,7 +914,6 @@ so that there cannot be any synchronization problems.
%endif
%patch -P11 -p0 -b .d-shared-libphobos~
%patch -P12 -p0 -b .pr118206~
-%patch -P13 -p0 -b .pr118362~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
@@ -3675,5 +3673,18 @@ end
%endif
%changelog
+* Sat Jan 11 2025 Jakub Jelinek 15.0.0-0.4
+- update from trunk
+ - PRs ada/18765, ada/118274, c/116060, c/117866, c/118376, c++/117792,
+ c++/117887, c++/117925, c++/117937, c++/117993, c++/118060,
+ c++/118277, c++/118387, c++/118391, fortran/108434, fortran/118337,
+ ipa/118138, rtl-optimization/117186, rtl-optimization/117467,
+ rtl-optimization/117934, rtl-optimization/118266, target/65181,
+ target/118017, target/118131, target/118188, target/118332,
+ target/118362, testsuite/118025, tree-optimization/88575,
+ tree-optimization/116126, tree-optimization/117927,
+ tree-optimization/118206, tree-optimization/118211,
+ tree-optimization/118344
+
* Thu Jan 9 2025 Jakub Jelinek 15.0.0-0.3
- new package
diff --git a/gcc15-pr118362.patch b/gcc15-pr118362.patch
deleted file mode 100644
index bcb5d73..0000000
--- a/gcc15-pr118362.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-2025-01-09 Stefan Schulze Frielinghaus
-
- PR target/118362
- * config/s390/s390.cc (s390_constant_via_vgbm_p): Punt on
- CONST_VECTOR with modes larger than 16 bytes.
-
---- gcc/config/s390/s390.cc.jj 2025-01-07 18:30:20.697392148 +0100
-+++ gcc/config/s390/s390.cc 2025-01-09 09:41:57.428250479 +0100
-@@ -2818,7 +2818,7 @@ s390_constant_via_vgbm_p (rtx op, unsign
- unsigned tmp_mask = 0;
- int nunit, unit_size;
-
-- if (GET_CODE (op) == CONST_VECTOR)
-+ if (GET_CODE (op) == CONST_VECTOR && GET_MODE_SIZE (GET_MODE (op)) <= 16)
- {
- if (GET_MODE_INNER (GET_MODE (op)) == TImode
- || GET_MODE_INNER (GET_MODE (op)) == TFmode)
diff --git a/sources b/sources
index 27ec149..528bdd4 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.0-20250109.tar.xz) = 3dc995fc2492494f62977a176bd83e3b08ef87024253060f46681dc483037d8528abecaadd9f0202e2a994239a52d4cc78b3aa3cdad7011ad4c789d789082717
+SHA512 (gcc-15.0.0-20250111.tar.xz) = 4a34058f92167ccfb08ddbbac0b4aa78599b98fd5768ecc02cf89e35e8609b5dcb9e276bf98dd854d24f965795d79497dbd4a3c8ef93d816ee689945689daf07
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 37a386303463dbdaefb097d36a730b6e8edc7df1 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 14 Jan 2025 00:05:44 +0100
Subject: [PATCH 12/71] 15.0.1-0.1
---
.gitignore | 1 +
gcc.spec | 52 +++++++++++++++++++++++++----------------
gcc15-d-deps.patch | 19 +++++++++++++++
gcc15-pr118438.patch | 55 ++++++++++++++++++++++++++++++++++++++++++++
sources | 2 +-
5 files changed, 108 insertions(+), 21 deletions(-)
create mode 100644 gcc15-d-deps.patch
create mode 100644 gcc15-pr118438.patch
diff --git a/.gitignore b/.gitignore
index eba52e7..aacda01 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/gcc-15.0.0-20250109.tar.xz
/newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz
/gcc-15.0.0-20250111.tar.xz
+/gcc-15.0.1-20250113.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 0c36924..1492634 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,6 +1,6 @@
-%global DATE 20250111
-%global gitrev 20e73534b5a3aeac8624799d31783f12f24e29cb
-%global gcc_version 15.0.0
+%global DATE 20250113
+%global gitrev 074f598e85b434066965fa130b38f32abcbc4f5e
+%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
# %%{release}, append them after %%{gcc_release} on Release: line.
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.4%{?dist}
+Release: %{gcc_release}.1%{?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
@@ -299,6 +299,8 @@ Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr118206.patch
+Patch13: gcc15-d-deps.patch
+Patch14: gcc15-pr118438.patch
Patch50: isl-rh2155127.patch
@@ -914,6 +916,8 @@ so that there cannot be any synchronization problems.
%endif
%patch -P11 -p0 -b .d-shared-libphobos~
%patch -P12 -p0 -b .pr118206~
+%patch -P13 -p0 -b .d-deps~
+%patch -P14 -p0 -b .pr118438~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
@@ -1725,8 +1729,8 @@ ln -sf ../../../libgo.so.23.* libgo.so
ln -sf ../../../libquadmath.so.0.* libquadmath.so
%endif
%if %{build_d}
-ln -sf ../../../libgdruntime.so.5.* libgdruntime.so
-ln -sf ../../../libgphobos.so.5.* libgphobos.so
+ln -sf ../../../libgdruntime.so.6.* libgdruntime.so
+ln -sf ../../../libgphobos.so.6.* libgphobos.so
%endif
%if %{build_m2}
for i in cor iso log min pim; do
@@ -1760,8 +1764,8 @@ ln -sf ../../../../%{_lib}/libgo.so.23.* libgo.so
ln -sf ../../../../%{_lib}/libquadmath.so.0.* libquadmath.so
%endif
%if %{build_d}
-ln -sf ../../../../%{_lib}/libgdruntime.so.5.* libgdruntime.so
-ln -sf ../../../../%{_lib}/libgphobos.so.5.* libgphobos.so
+ln -sf ../../../../%{_lib}/libgdruntime.so.6.* libgdruntime.so
+ln -sf ../../../../%{_lib}/libgphobos.so.6.* libgphobos.so
%endif
%if %{build_m2}
for i in cor iso log min pim; do
@@ -1906,10 +1910,10 @@ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libquadmath.so.0.* | sed '
%endif
%if %{build_d}
rm -f libgdruntime.so libgphobos.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgdruntime.so.5.* | sed 's,^.*libg,libg,'`' )' > libgdruntime.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgdruntime.so.5.* | sed 's,^.*libg,libg,'`' )' > 64/libgdruntime.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgphobos.so.5.* | sed 's,^.*libg,libg,'`' )' > libgphobos.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgphobos.so.5.* | sed 's,^.*libg,libg,'`' )' > 64/libgphobos.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgdruntime.so.6.* | sed 's,^.*libg,libg,'`' )' > libgdruntime.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgdruntime.so.6.* | sed 's,^.*libg,libg,'`' )' > 64/libgdruntime.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgphobos.so.6.* | sed 's,^.*libg,libg,'`' )' > libgphobos.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgphobos.so.6.* | sed 's,^.*libg,libg,'`' )' > 64/libgphobos.so
%endif
%if %{build_m2}
for i in cor iso log min pim; do
@@ -2023,10 +2027,10 @@ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libquadmath.so.0.* | sed '
%endif
%if %{build_d}
rm -f libgdruntime.so libgphobos.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgdruntime.so.5.* | sed 's,^.*libg,libg,'`' )' > libgdruntime.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgdruntime.so.5.* | sed 's,^.*libg,libg,'`' )' > 32/libgdruntime.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgphobos.so.5.* | sed 's,^.*libg,libg,'`' )' > libgphobos.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgphobos.so.5.* | sed 's,^.*libg,libg,'`' )' > 32/libgphobos.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgdruntime.so.6.* | sed 's,^.*libg,libg,'`' )' > libgdruntime.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgdruntime.so.6.* | sed 's,^.*libg,libg,'`' )' > 32/libgdruntime.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgphobos.so.6.* | sed 's,^.*libg,libg,'`' )' > libgphobos.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgphobos.so.6.* | sed 's,^.*libg,libg,'`' )' > 32/libgphobos.so
%endif
%if %{build_m2}
for i in cor iso log min pim; do
@@ -2203,8 +2207,8 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libcc1.so.0.*
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libquadmath.so.0.*
%endif
%if %{build_d}
-chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgdruntime.so.5.*
-chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgphobos.so.5.*
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgdruntime.so.6.*
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgphobos.so.6.*
%endif
%if %{build_m2}
for i in cor iso log min pim; do
@@ -3127,8 +3131,8 @@ end
%doc rpm.doc/gdc/*
%files -n libgphobos
-%{_prefix}/%{_lib}/libgdruntime.so.5*
-%{_prefix}/%{_lib}/libgphobos.so.5*
+%{_prefix}/%{_lib}/libgdruntime.so.6*
+%{_prefix}/%{_lib}/libgphobos.so.6*
%doc rpm.doc/libphobos/*
%files -n libgphobos-static
@@ -3673,6 +3677,14 @@ end
%endif
%changelog
+* Mon Jan 11 2025 Jakub Jelinek 15.0.1-0.1
+- update from trunk
+ - PRs c/118112, c++/114630, d/117701, fortran/115788, fortran/118432,
+ lto/118181, middle-end/64242, middle-end/118303, middle-end/118411,
+ middle-end/118415, modula2/118453, rtl-optimization/107455,
+ target/115910, target/115921, target/118418, tree-optimization/117119,
+ tree-optimization/117997, tree-optimization/118409
+
* Sat Jan 11 2025 Jakub Jelinek 15.0.0-0.4
- update from trunk
- PRs ada/18765, ada/118274, c/116060, c/117866, c/118376, c++/117792,
diff --git a/gcc15-d-deps.patch b/gcc15-d-deps.patch
new file mode 100644
index 0000000..7f77e69
--- /dev/null
+++ b/gcc15-d-deps.patch
@@ -0,0 +1,19 @@
+2025-01-13 Arsen Arsenović
+ Jakub Jelinek
+
+ * Make-lang.in (DCOMPILE, DPOSTCOMPILE): Use $(basename $(@F))
+ instead of $(*F).
+
+--- gcc/d/Make-lang.in.jj 2025-01-13 09:12:07.408983471 +0100
++++ gcc/d/Make-lang.in 2025-01-13 10:57:16.398315375 +0100
+@@ -65,8 +65,8 @@ ALL_DFLAGS = $(DFLAGS-$@) $(GDCFLAGS) -f
+ $(WARN_DFLAGS)
+
+ DCOMPILE.base = $(GDC) -c $(ALL_DFLAGS) -o $@
+-DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
+-DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
++DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(basename $(@F)).TPo
++DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(basename $(@F)).TPo $(@D)/$(DEPDIR)/$(basename $(@F)).Po
+ DLINKER = $(GDC) $(NO_PIE_FLAG) -lstdc++
+
+ # Like LINKER, but use a mutex for serializing front end links.
diff --git a/gcc15-pr118438.patch b/gcc15-pr118438.patch
new file mode 100644
index 0000000..f428963
--- /dev/null
+++ b/gcc15-pr118438.patch
@@ -0,0 +1,55 @@
+2025-01-13 Jakub Jelinek
+
+ PR d/118438
+ * libdruntime/core/sys/posix/sys/socket.d: Cherry-pick from upstream.
+
+--- libphobos/libdruntime/core/sys/posix/sys/socket.d.jj
++++ libphobos/libdruntime/core/sys/posix/sys/socket.d
+@@ -317,6 +318,7 @@ version (linux)
+ SO_RCVLOWAT = 0x1004,
+ SO_RCVTIMEO = 0x1006,
+ SO_REUSEADDR = 0x0004,
++ SO_REUSEPORT = 0x0200,
+ SO_SNDBUF = 0x1001,
+ SO_SNDLOWAT = 0x1003,
+ SO_SNDTIMEO = 0x1005,
+@@ -351,6 +353,7 @@ version (linux)
+ SO_RCVLOWAT = 0x1004,
+ SO_RCVTIMEO = 0x1006,
+ SO_REUSEADDR = 0x0004,
++ SO_REUSEPORT = 0x0200,
+ SO_SNDBUF = 0x1001,
+ SO_SNDLOWAT = 0x1003,
+ SO_SNDTIMEO = 0x1005,
+@@ -385,6 +388,7 @@ version (linux)
+ SO_RCVLOWAT = 16,
+ SO_RCVTIMEO = 18,
+ SO_REUSEADDR = 2,
++ SO_REUSEPORT = 15,
+ SO_SNDBUF = 7,
+ SO_SNDLOWAT = 17,
+ SO_SNDTIMEO = 19,
+@@ -454,6 +458,7 @@ version (linux)
+ SO_RCVLOWAT = 18,
+ SO_RCVTIMEO = 20,
+ SO_REUSEADDR = 2,
++ SO_REUSEPORT = 15,
+ SO_SNDBUF = 7,
+ SO_SNDLOWAT = 19,
+ SO_SNDTIMEO = 21,
+@@ -522,6 +528,7 @@ version (linux)
+ SO_RCVLOWAT = 18,
+ SO_RCVTIMEO = 20,
+ SO_REUSEADDR = 2,
++ SO_REUSEPORT = 15,
+ SO_SNDBUF = 7,
+ SO_SNDLOWAT = 19,
+ SO_SNDTIMEO = 21,
+@@ -556,6 +563,7 @@ version (linux)
+ SO_RCVLOWAT = 18,
+ SO_RCVTIMEO = 20,
+ SO_REUSEADDR = 2,
++ SO_REUSEPORT = 15,
+ SO_SNDBUF = 7,
+ SO_SNDLOWAT = 19,
+ SO_SNDTIMEO = 21,
diff --git a/sources b/sources
index 528bdd4..83dfcc3 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.0-20250111.tar.xz) = 4a34058f92167ccfb08ddbbac0b4aa78599b98fd5768ecc02cf89e35e8609b5dcb9e276bf98dd854d24f965795d79497dbd4a3c8ef93d816ee689945689daf07
+SHA512 (gcc-15.0.1-20250113.tar.xz) = 88d7eac76c25894b15836925f108deb65ce4d625a7a7de81ef350fdc5c047c46ded96ecbcfcf11271351c64bb6e8e31e489f1b56574a4e5211540b6be308f160
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 741ed4a5a942f58193bb6dfcedd443c50647c447 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 14 Jan 2025 00:08:34 +0100
Subject: [PATCH 13/71] 15.0.1-0.1
---
gcc.spec | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index 1492634..4fd2621 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -3677,7 +3677,7 @@ end
%endif
%changelog
-* Mon Jan 11 2025 Jakub Jelinek 15.0.1-0.1
+* Mon Jan 13 2025 Jakub Jelinek 15.0.1-0.1
- update from trunk
- PRs c/118112, c++/114630, d/117701, fortran/115788, fortran/118432,
lto/118181, middle-end/64242, middle-end/118303, middle-end/118411,
From 48a562d802e39ab6199694cd9f40a25698c31c33 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 14 Jan 2025 11:45:25 +0100
Subject: [PATCH 14/71] 15.0.1-0.2
---
.gitignore | 1 +
gcc.spec | 12 +++++++++---
sources | 2 +-
3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/.gitignore b/.gitignore
index aacda01..b6a5b4a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz
/gcc-15.0.0-20250111.tar.xz
/gcc-15.0.1-20250113.tar.xz
+/gcc-15.0.1-20250114.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 4fd2621..dffd6b1 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250113
-%global gitrev 074f598e85b434066965fa130b38f32abcbc4f5e
+%global DATE 20250114
+%global gitrev 6adb681d9cf55f12e8a232c1e9a009e5ca5fdde5
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.1%{?dist}
+Release: %{gcc_release}.2%{?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
@@ -3677,6 +3677,12 @@ end
%endif
%changelog
+* Tue Jan 14 2025 Jakub Jelinek 15.0.1-0.2
+- update from trunk
+- update from trunk
+ - PRs ada/118459, c/116871, c++/118445, modula2/116557, target/116030,
+ target/117682, tree-optimization/118405
+
* Mon Jan 13 2025 Jakub Jelinek 15.0.1-0.1
- update from trunk
- PRs c/118112, c++/114630, d/117701, fortran/115788, fortran/118432,
diff --git a/sources b/sources
index 83dfcc3..9794578 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250113.tar.xz) = 88d7eac76c25894b15836925f108deb65ce4d625a7a7de81ef350fdc5c047c46ded96ecbcfcf11271351c64bb6e8e31e489f1b56574a4e5211540b6be308f160
+SHA512 (gcc-15.0.1-20250114.tar.xz) = 54d1749fb3b57c0e96bf9887b64c60d8e61cd634ab460ec03b7e909ea4a54f898988984d2dff7cdefd093ee9c8a235b70f20d2f005cdf14313077b28ddcf6759
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 2f3ea848feb3c9b800e2367ee5a8b81a7fadd5ce Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 14 Jan 2025 11:45:44 +0100
Subject: [PATCH 15/71] 15.0.1-0.2
---
gcc.spec | 1 -
1 file changed, 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index dffd6b1..db61327 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -3678,7 +3678,6 @@ end
%changelog
* Tue Jan 14 2025 Jakub Jelinek 15.0.1-0.2
-- update from trunk
- update from trunk
- PRs ada/118459, c/116871, c++/118445, modula2/116557, target/116030,
target/117682, tree-optimization/118405
From ca394fe46b6a7ffa6ee3c26cd46f30dcbc2beb94 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 14 Jan 2025 13:11:09 +0100
Subject: [PATCH 16/71] 15.0.1-0.3
---
gcc.spec | 7 +-
gcc15-pr117231.patch | 177 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 183 insertions(+), 1 deletion(-)
create mode 100644 gcc15-pr117231.patch
diff --git a/gcc.spec b/gcc.spec
index db61327..5746ff6 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.2%{?dist}
+Release: %{gcc_release}.3%{?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
@@ -301,6 +301,7 @@ Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr118206.patch
Patch13: gcc15-d-deps.patch
Patch14: gcc15-pr118438.patch
+Patch15: gcc15-pr117231.patch
Patch50: isl-rh2155127.patch
@@ -918,6 +919,7 @@ so that there cannot be any synchronization problems.
%patch -P12 -p0 -b .pr118206~
%patch -P13 -p0 -b .d-deps~
%patch -P14 -p0 -b .pr118438~
+%patch -P15 -p0 -b .pr117231~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
@@ -3677,6 +3679,9 @@ end
%endif
%changelog
+* Tue Jan 14 2025 Jakub Jelinek 15.0.1-0.3
+- temporary fix for coroutine range for handling (PR c++/117231)
+
* Tue Jan 14 2025 Jakub Jelinek 15.0.1-0.2
- update from trunk
- PRs ada/118459, c/116871, c++/118445, modula2/116557, target/116030,
diff --git a/gcc15-pr117231.patch b/gcc15-pr117231.patch
new file mode 100644
index 0000000..ad1a83a
--- /dev/null
+++ b/gcc15-pr117231.patch
@@ -0,0 +1,177 @@
+In the current implementation, statement expressions were intentionally
+unsupported (as a C++ extension). However since they are quite heavily
+used by end-users and also now emitted by the compiler in some cases
+we are now working to add them. This first patch ensures that we
+recurse into statement expressions (and therefore handle coroutine
+keywords that might appear inside them).
+
+ PR c++/115851
+ PR c++/116914
+ PR c++/117231
+
+gcc/cp/ChangeLog:
+
+ * coroutines.cc (await_statement_expander): Walk into
+ statement expressions.
+ (await_statement_walker): Likewise.
+
+gcc/testsuite/ChangeLog:
+
+ * g++.dg/coroutines/pr115851.C: New test.
+ * g++.dg/coroutines/pr116914.C: New test.
+ * g++.dg/coroutines/pr117231.C: New test.
+
+Signed-off-by: Iain Sandoe
+---
+ gcc/cp/coroutines.cc | 22 ++++++++++++
+ gcc/testsuite/g++.dg/coroutines/pr115851.C | 35 +++++++++++++++++++
+ gcc/testsuite/g++.dg/coroutines/pr116914.C | 40 ++++++++++++++++++++++
+ gcc/testsuite/g++.dg/coroutines/pr117231.C | 21 ++++++++++++
+ 4 files changed, 118 insertions(+)
+ create mode 100644 gcc/testsuite/g++.dg/coroutines/pr115851.C
+ create mode 100644 gcc/testsuite/g++.dg/coroutines/pr116914.C
+ create mode 100644 gcc/testsuite/g++.dg/coroutines/pr117231.C
+
+--- gcc/cp/coroutines.cc
++++ gcc/cp/coroutines.cc
+@@ -2128,6 +2128,14 @@ await_statement_expander (tree *stmt, int *do_subtree, void *d)
+ }
+ else if (EXPR_P (*stmt))
+ {
++ /* Look for ({}) at the top level - just recurse into these. */
++ if (TREE_CODE (*stmt) == EXPR_STMT)
++ {
++ tree inner = EXPR_STMT_EXPR (*stmt);
++ if (TREE_CODE (inner) == STATEMENT_LIST
++ || TREE_CODE (inner) == BIND_EXPR)
++ return NULL_TREE; // process contents
++ }
+ process_one_statement (stmt, d);
+ *do_subtree = 0; /* Done subtrees. */
+ }
+@@ -3857,6 +3865,20 @@ await_statement_walker (tree *stmt, int *do_subtree, void *d)
+ if (!(cp_walk_tree (stmt, find_any_await, &await_ptr, &visited)))
+ return NULL_TREE; /* Nothing special to do here. */
+
++ /* Handle statement expressions. */
++ if (TREE_CODE (expr) == EXPR_STMT)
++ {
++ tree inner = EXPR_STMT_EXPR (expr);
++ if (TREE_CODE (inner) == STATEMENT_LIST
++ || TREE_CODE (inner) == BIND_EXPR)
++ {
++ res = cp_walk_tree (&EXPR_STMT_EXPR (expr),
++ await_statement_walker, d, NULL);
++ *do_subtree = 0;
++ return res;
++ }
++ }
++
+ visited.empty ();
+ awpts->saw_awaits = 0;
+ hash_set truth_aoif_to_expand;
+--- gcc/testsuite/g++.dg/coroutines/pr115851.C
++++ gcc/testsuite/g++.dg/coroutines/pr115851.C
+@@ -0,0 +1,35 @@
++// { dg-additional-options "-Wno-pedantic " }
++#include
++
++struct SuspendNever {
++ bool await_ready() noexcept;
++ void await_suspend(std::coroutine_handle<>) noexcept;
++ void await_resume() noexcept;
++};
++
++struct Coroutine;
++
++struct PromiseType {
++ Coroutine get_return_object();
++ SuspendNever initial_suspend();
++ SuspendNever final_suspend() noexcept;
++ void unhandled_exception () {}
++};
++
++struct Coroutine {
++ using promise_type = PromiseType;
++};
++
++struct ErrorOr {
++ int release_error();
++};
++
++void warnln(int const&);
++
++Coroutine __async_test_input_basic() {
++ ({
++ co_await SuspendNever{};
++ ErrorOr _temporary_result2;
++ warnln(_temporary_result2.release_error());
++ });
++}
+--- gcc/testsuite/g++.dg/coroutines/pr116914.C
++++ gcc/testsuite/g++.dg/coroutines/pr116914.C
+@@ -0,0 +1,40 @@
++// { dg-additional-options "-std=gnu++20 -fpreprocessed" }
++
++namespace std {
++template struct coroutine_traits : a {};
++template struct coroutine_handle {
++ static coroutine_handle from_address(void *);
++ operator coroutine_handle<>();
++ void *address();
++};
++struct b {
++ int await_ready() noexcept;
++ void await_suspend(coroutine_handle<>) noexcept;
++ void await_resume() noexcept;
++};
++} // namespace std
++struct c;
++struct d {
++ c get_return_object();
++ std::b initial_suspend();
++ std::b final_suspend() noexcept;
++ void unhandled_exception();
++ std::b yield_value(int);
++};
++struct e {
++ void operator++();
++ int operator*();
++ int operator!=(e);
++};
++struct c {
++ using promise_type = d;
++ e begin();
++ e end();
++ c f() {
++ c g;
++ for (auto h : g) {
++ auto i = 1;
++ co_yield i;
++ }
++ }
++};
+--- gcc/testsuite/g++.dg/coroutines/pr117231.C
++++ gcc/testsuite/g++.dg/coroutines/pr117231.C
+@@ -0,0 +1,21 @@
++// { dg-additional-options "-std=c++23 " }
++// { dg-do run }
++#include
++//#include
++#include
++
++std::generator get_seq()
++{
++ std::vector data_{1, 2, 3};
++ for (auto item : data_)
++ co_yield item;
++}
++
++int main()
++{
++ int res = 0;
++ for (auto item : get_seq())
++ res = item; //std::println("{}", item);
++ if (res != 3)
++ __builtin_abort ();
++}
From b46eae0019f2b703482637ae7c7fad31a31e919d Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 14 Jan 2025 20:34:30 +0100
Subject: [PATCH 17/71] Add noautorebuild.
---
noautorebuild | 1 +
1 file changed, 1 insertion(+)
create mode 100644 noautorebuild
diff --git a/noautorebuild b/noautorebuild
new file mode 100644
index 0000000..a8dc544
--- /dev/null
+++ b/noautorebuild
@@ -0,0 +1 @@
+GCC has been already rebuilt and will be rebuilt again very soon, so the mass rebuild is waste of resources for it.
From c142771541f144194873333eb25ff07ade4e44fb Mon Sep 17 00:00:00 2001
From: Fedora Release Engineering
Date: Thu, 16 Jan 2025 19:32:58 +0000
Subject: [PATCH 18/71] Rebuilt for
https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
---
gcc.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index 5746ff6..fdcd9a8 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.3%{?dist}
+Release: %{gcc_release}.3%{?dist}.1
# License notes for some of the less obvious ones:
# gcc/doc/cppinternals.texi: Linux-man-pages-copyleft-2-para
# isl: MIT, BSD-2-Clause
@@ -3679,6 +3679,9 @@ end
%endif
%changelog
+* Thu Jan 16 2025 Fedora Release Engineering - 15.0.1-0.3.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
+
* Tue Jan 14 2025 Jakub Jelinek 15.0.1-0.3
- temporary fix for coroutine range for handling (PR c++/117231)
From 46a6d807645871b4d243ef2be35f9677bd4d68cb Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 21 Jan 2025 17:25:58 +0100
Subject: [PATCH 19/71] Fix up sed command for libstdc++ modules json.
---
gcc.spec | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index fdcd9a8..2f504cb 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1712,7 +1712,7 @@ cp -a objlibgccjit/gcc/libgdiagnostics.so* %{buildroot}%{_prefix}/%{_lib}/
cp -a ../gcc/libgdiagnostics*.h %{buildroot}%{_prefix}/include/
cp -a objlibgccjit/gcc/sarif-replay %{buildroot}%{_prefix}/bin/
-sed -e 's,\.\./include/,../../../../include,' \
+sed -e 's,\.\./include/,../../../../include/,' \
%{buildroot}%{_prefix}/%{_lib}/libstdc++.modules.json \
> $FULLPATH/libstdc++.modules.json
From f97b22af1011d1a9629418ccb1bed9f6a5196855 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 25 Jan 2025 11:06:55 +0100
Subject: [PATCH 20/71] 15.0.1-0.4
---
.gitignore | 1 +
gcc.spec | 59 ++++++++++++++++++++++++++++++++------
gcc15-libstdc++-docs.patch | 4 +--
gcc15-pr118438.patch | 55 -----------------------------------
noautorebuild | 1 -
sources | 2 +-
6 files changed, 54 insertions(+), 68 deletions(-)
delete mode 100644 gcc15-pr118438.patch
delete mode 100644 noautorebuild
diff --git a/.gitignore b/.gitignore
index b6a5b4a..fdfb0cc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
/gcc-15.0.0-20250111.tar.xz
/gcc-15.0.1-20250113.tar.xz
/gcc-15.0.1-20250114.tar.xz
+/gcc-15.0.1-20250125.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 2f504cb..f9debcb 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250114
-%global gitrev 6adb681d9cf55f12e8a232c1e9a009e5ca5fdde5
+%global DATE 20250125
+%global gitrev 971fa9cf8655e9ba26529620b624bac77d9a584b
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.3%{?dist}.1
+Release: %{gcc_release}.4%{?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
@@ -300,8 +300,7 @@ Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr118206.patch
Patch13: gcc15-d-deps.patch
-Patch14: gcc15-pr118438.patch
-Patch15: gcc15-pr117231.patch
+Patch14: gcc15-pr117231.patch
Patch50: isl-rh2155127.patch
@@ -918,8 +917,7 @@ so that there cannot be any synchronization problems.
%patch -P11 -p0 -b .d-shared-libphobos~
%patch -P12 -p0 -b .pr118206~
%patch -P13 -p0 -b .d-deps~
-%patch -P14 -p0 -b .pr118438~
-%patch -P15 -p0 -b .pr117231~
+%patch -P14 -p0 -b .pr117231~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
@@ -3679,8 +3677,51 @@ end
%endif
%changelog
-* Thu Jan 16 2025 Fedora Release Engineering - 15.0.1-0.3.1
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
+* Sat Jan 25 2025 Jakub Jelinek 15.0.1-0.4
+- update from trunk
+ - PRs c/118639, c++/105440, c++/107522, c++/107741, c++/115769, c++/116417,
+ c++/116568, c++/116756, c++/117153, c++/117397, c++/117602,
+ c++/117775, c++/117827, c++/118047, c++/118049, c++/118101,
+ c++/118124, c++/118139, c++/118147, c++/118199, c++/118214,
+ c++/118225, c++/118245, c++/118255, c++/118278, c++/118355,
+ c++/118390, c++/118396, c++/118454, c++/118486, c++/118509,
+ c++/118513, c++/118523, c++/118525, c++/118528, c++/118532,
+ c++/118534, c++/118582, c++/118590, c++/118604, d/114434, d/115249,
+ d/116373, d/117115, d/118438, d/118448, d/118449, d/118584,
+ fortran/71884, fortran/81978, fortran/96087, fortran/107122,
+ fortran/118321, fortran/118359, fortran/118441, fortran/118613,
+ gcov-profile/116743, ipa/116068, ipa/118400, jit/117886,
+ libfortran/118406, libfortran/118536, libfortran/118571,
+ libstdc++/99995, libstdc++/100249, libstdc++/109849, libstdc++/118158,
+ libstdc++/118185, lto/118238, middle-end/112779, middle-end/113904,
+ middle-end/114596, middle-end/114877, middle-end/118140,
+ middle-end/118273, middle-end/118472, modula2/118010, modula2/118589,
+ objc++/118586, rtl-optimization/109592, rtl-optimization/113994,
+ rtl-optimization/117868, rtl-optimization/118067,
+ rtl-optimization/118562, rtl-optimization/118591,
+ rtl-optimization/1180167, sarif-replay/117670, target/80813,
+ target/110901, target/113257, target/113560, target/114442,
+ target/116256, target/116308, target/116593, target/117079,
+ target/117726, target/118154, target/118170, target/118182,
+ target/118270, target/118329, target/118357, target/118489,
+ target/118497, target/118501, target/118510, target/118511,
+ target/118512, target/118531, target/118560, target/118609,
+ testsuite/116448, testsuite/117958, testsuite/118451,
+ tree-optimization/92539, tree-optimization/102705,
+ tree-optimization/115494, tree-optimization/115777,
+ tree-optimization/115895, tree-optimization/116010,
+ tree-optimization/117668, tree-optimization/117875,
+ tree-optimization/118012, tree-optimization/118077,
+ tree-optimization/118224, tree-optimization/118348,
+ tree-optimization/118360, tree-optimization/118384,
+ tree-optimization/118430, tree-optimization/118456,
+ tree-optimization/118483, tree-optimization/118487,
+ tree-optimization/118514, tree-optimization/118522,
+ tree-optimization/118529, tree-optimization/118552,
+ tree-optimization/118558, tree-optimization/118569,
+ tree-optimization/118572, tree-optimization/118605,
+ tree-optimization/118628, tree-optimization/118634
+- fix libstdc++.modules.json content after relocation
* Tue Jan 14 2025 Jakub Jelinek 15.0.1-0.3
- temporary fix for coroutine range for handling (PR c++/117231)
diff --git a/gcc15-libstdc++-docs.patch b/gcc15-libstdc++-docs.patch
index fc94419..829bb97 100644
--- a/gcc15-libstdc++-docs.patch
+++ b/gcc15-libstdc++-docs.patch
@@ -4,7 +4,7 @@
FSF
-+ Release 15.0.0
++ Release 15.0.1
+
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
@@ -17,7 +17,7 @@
- The API documentation, rendered into HTML, can be viewed online
+ The API documentation, rendered into HTML, can be viewed locally
-+ for the 15.0.0 release,
++ for the 15.0.1 release,
+ online
for each GCC release
and
diff --git a/gcc15-pr118438.patch b/gcc15-pr118438.patch
deleted file mode 100644
index f428963..0000000
--- a/gcc15-pr118438.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-2025-01-13 Jakub Jelinek
-
- PR d/118438
- * libdruntime/core/sys/posix/sys/socket.d: Cherry-pick from upstream.
-
---- libphobos/libdruntime/core/sys/posix/sys/socket.d.jj
-+++ libphobos/libdruntime/core/sys/posix/sys/socket.d
-@@ -317,6 +318,7 @@ version (linux)
- SO_RCVLOWAT = 0x1004,
- SO_RCVTIMEO = 0x1006,
- SO_REUSEADDR = 0x0004,
-+ SO_REUSEPORT = 0x0200,
- SO_SNDBUF = 0x1001,
- SO_SNDLOWAT = 0x1003,
- SO_SNDTIMEO = 0x1005,
-@@ -351,6 +353,7 @@ version (linux)
- SO_RCVLOWAT = 0x1004,
- SO_RCVTIMEO = 0x1006,
- SO_REUSEADDR = 0x0004,
-+ SO_REUSEPORT = 0x0200,
- SO_SNDBUF = 0x1001,
- SO_SNDLOWAT = 0x1003,
- SO_SNDTIMEO = 0x1005,
-@@ -385,6 +388,7 @@ version (linux)
- SO_RCVLOWAT = 16,
- SO_RCVTIMEO = 18,
- SO_REUSEADDR = 2,
-+ SO_REUSEPORT = 15,
- SO_SNDBUF = 7,
- SO_SNDLOWAT = 17,
- SO_SNDTIMEO = 19,
-@@ -454,6 +458,7 @@ version (linux)
- SO_RCVLOWAT = 18,
- SO_RCVTIMEO = 20,
- SO_REUSEADDR = 2,
-+ SO_REUSEPORT = 15,
- SO_SNDBUF = 7,
- SO_SNDLOWAT = 19,
- SO_SNDTIMEO = 21,
-@@ -522,6 +528,7 @@ version (linux)
- SO_RCVLOWAT = 18,
- SO_RCVTIMEO = 20,
- SO_REUSEADDR = 2,
-+ SO_REUSEPORT = 15,
- SO_SNDBUF = 7,
- SO_SNDLOWAT = 19,
- SO_SNDTIMEO = 21,
-@@ -556,6 +563,7 @@ version (linux)
- SO_RCVLOWAT = 18,
- SO_RCVTIMEO = 20,
- SO_REUSEADDR = 2,
-+ SO_REUSEPORT = 15,
- SO_SNDBUF = 7,
- SO_SNDLOWAT = 19,
- SO_SNDTIMEO = 21,
diff --git a/noautorebuild b/noautorebuild
deleted file mode 100644
index a8dc544..0000000
--- a/noautorebuild
+++ /dev/null
@@ -1 +0,0 @@
-GCC has been already rebuilt and will be rebuilt again very soon, so the mass rebuild is waste of resources for it.
diff --git a/sources b/sources
index 9794578..6791fe6 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250114.tar.xz) = 54d1749fb3b57c0e96bf9887b64c60d8e61cd634ab460ec03b7e909ea4a54f898988984d2dff7cdefd093ee9c8a235b70f20d2f005cdf14313077b28ddcf6759
+SHA512 (gcc-15.0.1-20250125.tar.xz) = 5ee2c0a48d740a90ad102b4d4f4e5b51929e57816099d3eb41ab26bc6991fa144b7f1fca81584bad5b7b819687b2bd3c9b51472ba8cb0a2c03d585653458a28e
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 56f71ad78839875a09f1e3232096404f0ee72222 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 30 Jan 2025 18:48:11 +0100
Subject: [PATCH 21/71] 15.0.1-0.5
---
.gitignore | 1 +
gcc.spec | 40 +++++--
gcc15-d-deps.patch | 19 ---
gcc15-pr118671.patch | 276 +++++++++++++++++++++++++++++++++++++++++++
gcc15-pr118689.patch | 17 +++
sources | 2 +-
6 files changed, 328 insertions(+), 27 deletions(-)
delete mode 100644 gcc15-d-deps.patch
create mode 100644 gcc15-pr118671.patch
create mode 100644 gcc15-pr118689.patch
diff --git a/.gitignore b/.gitignore
index fdfb0cc..6669449 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
/gcc-15.0.1-20250113.tar.xz
/gcc-15.0.1-20250114.tar.xz
/gcc-15.0.1-20250125.tar.xz
+/gcc-15.0.1-20250130.tar.xz
diff --git a/gcc.spec b/gcc.spec
index f9debcb..4cc796e 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250125
-%global gitrev 971fa9cf8655e9ba26529620b624bac77d9a584b
+%global DATE 20250130
+%global gitrev 54feac44230391f6c2cdd77688075cbcb7ce0995
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.4%{?dist}
+Release: %{gcc_release}.5%{?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
@@ -299,8 +299,9 @@ Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr118206.patch
-Patch13: gcc15-d-deps.patch
-Patch14: gcc15-pr117231.patch
+Patch13: gcc15-pr117231.patch
+Patch14: gcc15-pr118671.patch
+Patch15: gcc15-pr118689.patch
Patch50: isl-rh2155127.patch
@@ -916,8 +917,9 @@ so that there cannot be any synchronization problems.
%endif
%patch -P11 -p0 -b .d-shared-libphobos~
%patch -P12 -p0 -b .pr118206~
-%patch -P13 -p0 -b .d-deps~
-%patch -P14 -p0 -b .pr117231~
+%patch -P13 -p0 -b .pr117231~
+%patch -P14 -p0 -b .pr118671~
+%patch -P15 -p0 -b .pr118689~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
@@ -3677,6 +3679,30 @@ end
%endif
%changelog
+* Thu Jan 30 2025 Jakub Jelinek 15.0.1-0.5
+- update from trunk
+ - PRs c/116357, c++/57533, c++/114292, c++/116524, c++/117855, c++/118239,
+ c++/118285, c++/118632, c++/118655, c++/118673, d/118477,
+ fortran/58857, fortran/110993, fortran/118640, fortran/118683,
+ libstdc++/98749, libstdc++/118413, libstdc++/118563,
+ middle-end/118643, middle-end/118684, middle-end/118692,
+ middle-end/118695, modula2/116073, modula2/117737, modula2/118183,
+ other/118675, preprocessor/118168, rtl-optimization/118320,
+ rtl-optimization/118429, rtl-optimization/118638,
+ rtl-optimization/118662, target/114085, target/116860, target/117173,
+ target/117688, target/118103, target/118490, target/118642,
+ target/118646, target/118663, target/118696, testsuite/118127,
+ tree-optimization/112859, tree-optimization/114052,
+ tree-optimization/115347, tree-optimization/117270,
+ tree-optimization/117424, tree-optimization/117892,
+ tree-optimization/118505, tree-optimization/118637,
+ tree-optimization/118653
+- fix up C++ list conversion for #embed or large series of comma
+ separated small constants (PR c++/118671)
+- punt in niters clz/ctz creation if internal function can't be used
+ and frontend didn't build __builtin_c{l,t}z{,l,ll} builtins
+ (PR tree-optimization/118689)
+
* Sat Jan 25 2025 Jakub Jelinek 15.0.1-0.4
- update from trunk
- PRs c/118639, c++/105440, c++/107522, c++/107741, c++/115769, c++/116417,
diff --git a/gcc15-d-deps.patch b/gcc15-d-deps.patch
deleted file mode 100644
index 7f77e69..0000000
--- a/gcc15-d-deps.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-2025-01-13 Arsen Arsenović
- Jakub Jelinek
-
- * Make-lang.in (DCOMPILE, DPOSTCOMPILE): Use $(basename $(@F))
- instead of $(*F).
-
---- gcc/d/Make-lang.in.jj 2025-01-13 09:12:07.408983471 +0100
-+++ gcc/d/Make-lang.in 2025-01-13 10:57:16.398315375 +0100
-@@ -65,8 +65,8 @@ ALL_DFLAGS = $(DFLAGS-$@) $(GDCFLAGS) -f
- $(WARN_DFLAGS)
-
- DCOMPILE.base = $(GDC) -c $(ALL_DFLAGS) -o $@
--DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
--DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
-+DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(basename $(@F)).TPo
-+DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(basename $(@F)).TPo $(@D)/$(DEPDIR)/$(basename $(@F)).Po
- DLINKER = $(GDC) $(NO_PIE_FLAG) -lstdc++
-
- # Like LINKER, but use a mutex for serializing front end links.
diff --git a/gcc15-pr118671.patch b/gcc15-pr118671.patch
new file mode 100644
index 0000000..ea9a6e7
--- /dev/null
+++ b/gcc15-pr118671.patch
@@ -0,0 +1,276 @@
+2025-01-28 Jakub Jelinek
+
+ PR c++/118671
+ * call.cc (build_list_conv): For RAW_DATA_CST, call
+ implicit_conversion with INTEGER_CST representing first byte instead
+ of the whole RAW_DATA_CST. If it is an optimizable trivial
+ conversion, just save that to subconvs, otherwise allocate an
+ artificial ck_list for all the RAW_DATA_CST bytes and create
+ subsubconv for each of them.
+ (convert_like_internal): For ck_list with RAW_DATA_CST, instead of
+ doing all the checks for optimizable conversion just check kind and
+ assert everything else, otherwise use subsubconversions instead of
+ the subconversion for each element.
+
+ * g++.dg/cpp/embed-25.C: New test.
+ * g++.dg/cpp0x/pr118671.C: New test.
+
+--- gcc/cp/call.cc.jj 2025-01-22 09:22:53.000000000 +0100
++++ gcc/cp/call.cc 2025-01-27 21:36:31.159889633 +0100
+@@ -868,6 +868,67 @@ build_list_conv (tree type, tree ctor, i
+
+ FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
+ {
++ if (TREE_CODE (val) == RAW_DATA_CST)
++ {
++ tree elt
++ = build_int_cst (TREE_TYPE (val), RAW_DATA_UCHAR_ELT (val, 0));
++ conversion *sub
++ = implicit_conversion (elttype, TREE_TYPE (val), elt,
++ false, flags, complain);
++ conversion *next;
++ if (sub == NULL)
++ return NULL;
++ /* For conversion to initializer_list or
++ initializer_list or initializer_list
++ we can optimize and keep RAW_DATA_CST with adjusted
++ type if we report narrowing errors if needed.
++ Use just one subconversion for that case. */
++ if (sub->kind == ck_std
++ && sub->type
++ && (TREE_CODE (sub->type) == INTEGER_TYPE
++ || is_byte_access_type (sub->type))
++ && TYPE_PRECISION (sub->type) == CHAR_BIT
++ && (next = next_conversion (sub))
++ && next->kind == ck_identity)
++ {
++ subconvs[i] = sub;
++ continue;
++ }
++ /* Otherwise. build separate subconv for each RAW_DATA_CST
++ byte. Wrap those into an artificial ck_list which convert_like
++ will then handle. */
++ conversion **subsubconvs = alloc_conversions (RAW_DATA_LENGTH (val));
++ unsigned int j;
++ subsubconvs[0] = sub;
++ for (j = 1; j < (unsigned) RAW_DATA_LENGTH (val); ++j)
++ {
++ elt = build_int_cst (TREE_TYPE (val),
++ RAW_DATA_UCHAR_ELT (val, j));
++ sub = implicit_conversion (elttype, TREE_TYPE (val), elt,
++ false, flags, complain);
++ if (sub == NULL)
++ return NULL;
++ subsubconvs[j] = sub;
++ }
++
++ t = alloc_conversion (ck_list);
++ t->type = type;
++ t->u.list = subsubconvs;
++ t->rank = cr_exact;
++ for (j = 0; j < (unsigned) RAW_DATA_LENGTH (val); ++j)
++ {
++ sub = subsubconvs[i];
++ if (sub->rank > t->rank)
++ t->rank = sub->rank;
++ if (sub->user_conv_p)
++ t->user_conv_p = true;
++ if (sub->bad_p)
++ t->bad_p = true;
++ }
++ subconvs[i] = t;
++ continue;
++ }
++
+ conversion *sub
+ = implicit_conversion (elttype, TREE_TYPE (val), val,
+ false, flags, complain);
+@@ -8841,22 +8902,22 @@ convert_like_internal (conversion *convs
+ {
+ if (TREE_CODE (val) == RAW_DATA_CST)
+ {
+- tree elt_type;
+- conversion *next;
+ /* For conversion to initializer_list or
+ initializer_list or initializer_list
+ we can optimize and keep RAW_DATA_CST with adjusted
+ type if we report narrowing errors if needed, for
+ others this converts each element separately. */
+- if (convs->u.list[ix]->kind == ck_std
+- && (elt_type = convs->u.list[ix]->type)
+- && (TREE_CODE (elt_type) == INTEGER_TYPE
+- || is_byte_access_type (elt_type))
+- && TYPE_PRECISION (elt_type) == CHAR_BIT
+- && (next = next_conversion (convs->u.list[ix]))
+- && next->kind == ck_identity)
++ if (convs->u.list[ix]->kind == ck_std)
+ {
+- if (!TYPE_UNSIGNED (elt_type)
++ tree et = convs->u.list[ix]->type;
++ conversion *next = next_conversion (convs->u.list[ix]);
++ gcc_assert (et
++ && (TREE_CODE (et) == INTEGER_TYPE
++ || is_byte_access_type (et))
++ && TYPE_PRECISION (et) == CHAR_BIT
++ && next
++ && next->kind == ck_identity);
++ if (!TYPE_UNSIGNED (et)
+ /* For RAW_DATA_CST, TREE_TYPE (val) can be
+ either integer_type_node (when it has been
+ created by the lexer from CPP_EMBED) or
+@@ -8882,7 +8943,7 @@ convert_like_internal (conversion *convs
+ "narrowing conversion of "
+ "%qd from %qH to %qI",
+ RAW_DATA_UCHAR_ELT (val, i),
+- TREE_TYPE (val), elt_type);
++ TREE_TYPE (val), et);
+ if (errorcount != savederrorcount)
+ return error_mark_node;
+ }
+@@ -8890,19 +8951,21 @@ convert_like_internal (conversion *convs
+ return error_mark_node;
+ }
+ tree sub = copy_node (val);
+- TREE_TYPE (sub) = elt_type;
++ TREE_TYPE (sub) = et;
+ CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor),
+ NULL_TREE, sub);
+ }
+ else
+ {
++ conversion *conv = convs->u.list[ix];
++ gcc_assert (conv->kind == ck_list);
+ for (int i = 0; i < RAW_DATA_LENGTH (val); ++i)
+ {
+ tree elt
+ = build_int_cst (TREE_TYPE (val),
+ RAW_DATA_UCHAR_ELT (val, i));
+ tree sub
+- = convert_like (convs->u.list[ix], elt,
++ = convert_like (conv->u.list[i], elt,
+ fn, argnum, false, false,
+ /*nested_p=*/true, complain);
+ if (sub == error_mark_node)
+--- gcc/testsuite/g++.dg/cpp/embed-25.C.jj 2025-01-27 21:51:00.190990295 +0100
++++ gcc/testsuite/g++.dg/cpp/embed-25.C 2025-01-27 21:50:45.954183524 +0100
+@@ -0,0 +1,56 @@
++// PR c++/118671
++// { dg-do run { target c++11 } }
++// { dg-options "-O2" }
++
++namespace std {
++template
++struct initializer_list {
++private:
++ T *_M_array;
++ decltype (sizeof 0) _M_len;
++public:
++ constexpr decltype (sizeof 0)
++ size () const noexcept { return _M_len; }
++ constexpr const T *
++ begin () const noexcept { return _M_array; }
++ constexpr const T *
++ end () const noexcept { return begin () + size (); }
++};
++}
++
++struct A {} a;
++
++struct B {
++ constexpr B (int x) : B (a, x) {}
++ template
++ constexpr B (A, T... x) : b(x...) {}
++ int b;
++};
++
++struct C {
++ C (std::initializer_list x)
++ {
++ unsigned char buf[] = {
++#embed __FILE__
++ };
++ if (x.size () != sizeof (buf))
++ __builtin_abort ();
++ unsigned int i = 0;
++ for (auto a = x.begin (); a < x.end (); ++a, ++i)
++ if (a->b != buf[i])
++ __builtin_abort ();
++ c = true;
++ }
++ bool c;
++};
++
++C c {
++#embed __FILE__
++};
++
++int
++main ()
++{
++ if (!c.c)
++ __builtin_abort ();
++}
+--- gcc/testsuite/g++.dg/cpp0x/pr118671.C.jj 2025-01-27 21:47:01.154242793 +0100
++++ gcc/testsuite/g++.dg/cpp0x/pr118671.C 2025-01-27 21:46:43.379486760 +0100
+@@ -0,0 +1,61 @@
++// PR c++/118671
++// { dg-do run { target c++11 } }
++// { dg-options "-O2" }
++
++namespace std {
++template
++struct initializer_list {
++private:
++ T *_M_array;
++ decltype (sizeof 0) _M_len;
++public:
++ constexpr decltype (sizeof 0)
++ size () const noexcept { return _M_len; }
++ constexpr const T *
++ begin () const noexcept { return _M_array; }
++ constexpr const T *
++ end () const noexcept { return begin () + size (); }
++};
++}
++
++struct A {} a;
++
++struct B {
++ constexpr B (int x) : B (a, x) {}
++ template
++ constexpr B (A, T... x) : b(x...) {}
++ int b;
++};
++
++struct C {
++ C (std::initializer_list x)
++ {
++ if (x.size () != 130)
++ __builtin_abort ();
++ unsigned int i = 1;
++ for (auto a = x.begin (); a < x.end (); ++a)
++ if (a->b != i)
++ __builtin_abort ();
++ else
++ i = (i & 15) + 1;
++ c = true;
++ }
++ bool c;
++};
++
++C c { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
++ 1, 2 };
++
++int
++main ()
++{
++ if (!c.c)
++ __builtin_abort ();
++}
diff --git a/gcc15-pr118689.patch b/gcc15-pr118689.patch
new file mode 100644
index 0000000..8d57e15
--- /dev/null
+++ b/gcc15-pr118689.patch
@@ -0,0 +1,17 @@
+2025-01-30 Jakub Jelinek
+
+ PR tree-optimization/118689
+ * tree-ssa-loop-niter.cc (build_cltz_expr): Return NULL_TREE if fn is
+ NULL and use_ifn is false.
+
+--- gcc/tree-ssa-loop-niter.cc.jj 2025-01-17 11:29:34.080683133 +0100
++++ gcc/tree-ssa-loop-niter.cc 2025-01-30 14:51:57.528933620 +0100
+@@ -2238,6 +2238,8 @@ build_cltz_expr (tree src, bool leading,
+ build_int_cst (integer_type_node, prec));
+ }
+ }
++ else if (fn == NULL_TREE)
++ return NULL_TREE;
+ else if (prec == 2 * lli_prec)
+ {
+ tree src1 = fold_convert (long_long_unsigned_type_node,
diff --git a/sources b/sources
index 6791fe6..09b7338 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250125.tar.xz) = 5ee2c0a48d740a90ad102b4d4f4e5b51929e57816099d3eb41ab26bc6991fa144b7f1fca81584bad5b7b819687b2bd3c9b51472ba8cb0a2c03d585653458a28e
+SHA512 (gcc-15.0.1-20250130.tar.xz) = aca67a07b42f0325a155b4ef3d791797fab66bc771b829ec9ba0569cc47449fa169d08e976afe7849ab59acf46a641ddd46bd1504e730a3c1f496f03ce1f1ca3
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From d634368529a302816278b70dc11f7c8f37c052ce Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 1 Feb 2025 10:29:30 +0100
Subject: [PATCH 22/71] 15.0.1-0.6
---
.gitignore | 7 +------
gcc.spec | 40 +++++++++++++++++++++-------------------
gcc15-pr118689.patch | 17 -----------------
sources | 2 +-
4 files changed, 23 insertions(+), 43 deletions(-)
delete mode 100644 gcc15-pr118689.patch
diff --git a/.gitignore b/.gitignore
index 6669449..1f435f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,4 @@
/isl-0.24.tar.bz2
/nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz
-/gcc-15.0.0-20250109.tar.xz
/newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz
-/gcc-15.0.0-20250111.tar.xz
-/gcc-15.0.1-20250113.tar.xz
-/gcc-15.0.1-20250114.tar.xz
-/gcc-15.0.1-20250125.tar.xz
-/gcc-15.0.1-20250130.tar.xz
+/gcc-15.0.1-20250201.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 4cc796e..f9646e1 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250130
-%global gitrev 54feac44230391f6c2cdd77688075cbcb7ce0995
+%global DATE 20250201
+%global gitrev 3e0244fe19596234d3e6cf38c4afa5ca638f4b8d
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.5%{?dist}
+Release: %{gcc_release}.6%{?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
@@ -301,7 +301,6 @@ Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr118206.patch
Patch13: gcc15-pr117231.patch
Patch14: gcc15-pr118671.patch
-Patch15: gcc15-pr118689.patch
Patch50: isl-rh2155127.patch
@@ -919,7 +918,6 @@ so that there cannot be any synchronization problems.
%patch -P12 -p0 -b .pr118206~
%patch -P13 -p0 -b .pr117231~
%patch -P14 -p0 -b .pr118671~
-%patch -P15 -p0 -b .pr118689~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
@@ -2424,28 +2422,20 @@ if [ $1 = 0 ]; then
%{_sbindir}/update-alternatives --remove go %{_prefix}/bin/go.gcc
fi
+%{?ldconfig:
# Because glibc Prereq's libgcc and /sbin/ldconfig
# comes from glibc, it might not exist yet when
# libgcc is installed
%post -n libgcc -p
-if posix.access ("/sbin/ldconfig", "x") then
- local pid = posix.fork ()
- if pid == 0 then
- posix.exec ("/sbin/ldconfig")
- elseif pid ~= -1 then
- posix.wait (pid)
- end
+if posix.access ("%ldconfig", "x") then
+ rpm.execute ("%ldconfig")
end
%postun -n libgcc -p
-if posix.access ("/sbin/ldconfig", "x") then
- local pid = posix.fork ()
- if pid == 0 then
- posix.exec ("/sbin/ldconfig")
- elseif pid ~= -1 then
- posix.wait (pid)
- end
+if posix.access ("%ldconfig", "x") then
+ rpm.execute ("%ldconfig")
end
+}
%ldconfig_scriptlets -n libstdc++
@@ -2481,6 +2471,8 @@ end
%ldconfig_scriptlets -n liblsan
+%ldconfig_scriptlets -n libhwasan
+
%ldconfig_scriptlets -n libgo
%files -f %{name}.lang
@@ -3679,6 +3671,16 @@ end
%endif
%changelog
+* Sat Feb 1 2025 Jakub Jelinek 15.0.1-0.6
+- update from trunk
+ - PRs c++/117501, c++/117516, debug/100530, fortran/108454, fortran/118714,
+ ipa/117432, libstdc++/118156, middle-end/117498, modula2/115032,
+ rtl-optimization/116234, target/113689, target/115673,
+ tree-optimization/114277
+- use rpm.execute instead of posix.fork, posix.exec and posix.wait in libgcc
+ scriptlets; guard them on ldconfig macro existence and use that macro instead
+ of explicit /sbin/ldconfig (#2291927)
+
* Thu Jan 30 2025 Jakub Jelinek 15.0.1-0.5
- update from trunk
- PRs c/116357, c++/57533, c++/114292, c++/116524, c++/117855, c++/118239,
diff --git a/gcc15-pr118689.patch b/gcc15-pr118689.patch
deleted file mode 100644
index 8d57e15..0000000
--- a/gcc15-pr118689.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-2025-01-30 Jakub Jelinek
-
- PR tree-optimization/118689
- * tree-ssa-loop-niter.cc (build_cltz_expr): Return NULL_TREE if fn is
- NULL and use_ifn is false.
-
---- gcc/tree-ssa-loop-niter.cc.jj 2025-01-17 11:29:34.080683133 +0100
-+++ gcc/tree-ssa-loop-niter.cc 2025-01-30 14:51:57.528933620 +0100
-@@ -2238,6 +2238,8 @@ build_cltz_expr (tree src, bool leading,
- build_int_cst (integer_type_node, prec));
- }
- }
-+ else if (fn == NULL_TREE)
-+ return NULL_TREE;
- else if (prec == 2 * lli_prec)
- {
- tree src1 = fold_convert (long_long_unsigned_type_node,
diff --git a/sources b/sources
index 09b7338..a9e4c63 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250130.tar.xz) = aca67a07b42f0325a155b4ef3d791797fab66bc771b829ec9ba0569cc47449fa169d08e976afe7849ab59acf46a641ddd46bd1504e730a3c1f496f03ce1f1ca3
+SHA512 (gcc-15.0.1-20250201.tar.xz) = 2b429a615554218d491851b741cfd15ff871ef3beabd27194fe20ce85faa7422e9ac948b6c6bc8c194c33f1564e13ef438e2ec1665d61acc8823443953b01952
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 65505a4c17ef92acd7eba9b9ba72052c2d87c967 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 4 Feb 2025 20:28:37 +0100
Subject: [PATCH 23/71] 15.0.1-0.7
---
.gitignore | 1 +
gcc.spec | 23 ++++--
gcc15-pr117231.patch | 177 -------------------------------------------
sources | 2 +-
4 files changed, 18 insertions(+), 185 deletions(-)
delete mode 100644 gcc15-pr117231.patch
diff --git a/.gitignore b/.gitignore
index 1f435f0..bcefcfb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
/nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz
/newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz
/gcc-15.0.1-20250201.tar.xz
+/gcc-15.0.1-20250204.tar.xz
diff --git a/gcc.spec b/gcc.spec
index f9646e1..a1cf483 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250201
-%global gitrev 3e0244fe19596234d3e6cf38c4afa5ca638f4b8d
+%global DATE 20250204
+%global gitrev 785011ff892f91b1fedd8ba7812ff3203bc17b1a
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.6%{?dist}
+Release: %{gcc_release}.7%{?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
@@ -299,8 +299,7 @@ Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr118206.patch
-Patch13: gcc15-pr117231.patch
-Patch14: gcc15-pr118671.patch
+Patch13: gcc15-pr118671.patch
Patch50: isl-rh2155127.patch
@@ -916,8 +915,7 @@ so that there cannot be any synchronization problems.
%endif
%patch -P11 -p0 -b .d-shared-libphobos~
%patch -P12 -p0 -b .pr118206~
-%patch -P13 -p0 -b .pr117231~
-%patch -P14 -p0 -b .pr118671~
+%patch -P13 -p0 -b .pr118671~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
@@ -3671,6 +3669,17 @@ end
%endif
%changelog
+* Tue Feb 4 2025 Jakub Jelinek 15.0.1-0.7
+- update from trunk
+ - PRs ada/118712, ada/118731, c/118742, c++/79786, c++/98893, c++/108205,
+ c++/109918, c++/114619, c++/116506, c++/116880, c++/116914,
+ c++/117114, c++/117778, c++/118265, c++/118470, c++/118491,
+ c++/118718, c++/118719, fortran/93289, lto/113207, middle-end/115913,
+ middle-end/116926, modula2/117411, modula2/118703,
+ rtl-optimization/111673, rtl-optimization/117248,
+ rtl-optimization/117611, target/116010, target/118713,
+ testsuite/116845, tree-optimization/117113, tree-optimization/118717
+
* Sat Feb 1 2025 Jakub Jelinek 15.0.1-0.6
- update from trunk
- PRs c++/117501, c++/117516, debug/100530, fortran/108454, fortran/118714,
diff --git a/gcc15-pr117231.patch b/gcc15-pr117231.patch
deleted file mode 100644
index ad1a83a..0000000
--- a/gcc15-pr117231.patch
+++ /dev/null
@@ -1,177 +0,0 @@
-In the current implementation, statement expressions were intentionally
-unsupported (as a C++ extension). However since they are quite heavily
-used by end-users and also now emitted by the compiler in some cases
-we are now working to add them. This first patch ensures that we
-recurse into statement expressions (and therefore handle coroutine
-keywords that might appear inside them).
-
- PR c++/115851
- PR c++/116914
- PR c++/117231
-
-gcc/cp/ChangeLog:
-
- * coroutines.cc (await_statement_expander): Walk into
- statement expressions.
- (await_statement_walker): Likewise.
-
-gcc/testsuite/ChangeLog:
-
- * g++.dg/coroutines/pr115851.C: New test.
- * g++.dg/coroutines/pr116914.C: New test.
- * g++.dg/coroutines/pr117231.C: New test.
-
-Signed-off-by: Iain Sandoe
----
- gcc/cp/coroutines.cc | 22 ++++++++++++
- gcc/testsuite/g++.dg/coroutines/pr115851.C | 35 +++++++++++++++++++
- gcc/testsuite/g++.dg/coroutines/pr116914.C | 40 ++++++++++++++++++++++
- gcc/testsuite/g++.dg/coroutines/pr117231.C | 21 ++++++++++++
- 4 files changed, 118 insertions(+)
- create mode 100644 gcc/testsuite/g++.dg/coroutines/pr115851.C
- create mode 100644 gcc/testsuite/g++.dg/coroutines/pr116914.C
- create mode 100644 gcc/testsuite/g++.dg/coroutines/pr117231.C
-
---- gcc/cp/coroutines.cc
-+++ gcc/cp/coroutines.cc
-@@ -2128,6 +2128,14 @@ await_statement_expander (tree *stmt, int *do_subtree, void *d)
- }
- else if (EXPR_P (*stmt))
- {
-+ /* Look for ({}) at the top level - just recurse into these. */
-+ if (TREE_CODE (*stmt) == EXPR_STMT)
-+ {
-+ tree inner = EXPR_STMT_EXPR (*stmt);
-+ if (TREE_CODE (inner) == STATEMENT_LIST
-+ || TREE_CODE (inner) == BIND_EXPR)
-+ return NULL_TREE; // process contents
-+ }
- process_one_statement (stmt, d);
- *do_subtree = 0; /* Done subtrees. */
- }
-@@ -3857,6 +3865,20 @@ await_statement_walker (tree *stmt, int *do_subtree, void *d)
- if (!(cp_walk_tree (stmt, find_any_await, &await_ptr, &visited)))
- return NULL_TREE; /* Nothing special to do here. */
-
-+ /* Handle statement expressions. */
-+ if (TREE_CODE (expr) == EXPR_STMT)
-+ {
-+ tree inner = EXPR_STMT_EXPR (expr);
-+ if (TREE_CODE (inner) == STATEMENT_LIST
-+ || TREE_CODE (inner) == BIND_EXPR)
-+ {
-+ res = cp_walk_tree (&EXPR_STMT_EXPR (expr),
-+ await_statement_walker, d, NULL);
-+ *do_subtree = 0;
-+ return res;
-+ }
-+ }
-+
- visited.empty ();
- awpts->saw_awaits = 0;
- hash_set truth_aoif_to_expand;
---- gcc/testsuite/g++.dg/coroutines/pr115851.C
-+++ gcc/testsuite/g++.dg/coroutines/pr115851.C
-@@ -0,0 +1,35 @@
-+// { dg-additional-options "-Wno-pedantic " }
-+#include
-+
-+struct SuspendNever {
-+ bool await_ready() noexcept;
-+ void await_suspend(std::coroutine_handle<>) noexcept;
-+ void await_resume() noexcept;
-+};
-+
-+struct Coroutine;
-+
-+struct PromiseType {
-+ Coroutine get_return_object();
-+ SuspendNever initial_suspend();
-+ SuspendNever final_suspend() noexcept;
-+ void unhandled_exception () {}
-+};
-+
-+struct Coroutine {
-+ using promise_type = PromiseType;
-+};
-+
-+struct ErrorOr {
-+ int release_error();
-+};
-+
-+void warnln(int const&);
-+
-+Coroutine __async_test_input_basic() {
-+ ({
-+ co_await SuspendNever{};
-+ ErrorOr _temporary_result2;
-+ warnln(_temporary_result2.release_error());
-+ });
-+}
---- gcc/testsuite/g++.dg/coroutines/pr116914.C
-+++ gcc/testsuite/g++.dg/coroutines/pr116914.C
-@@ -0,0 +1,40 @@
-+// { dg-additional-options "-std=gnu++20 -fpreprocessed" }
-+
-+namespace std {
-+template struct coroutine_traits : a {};
-+template struct coroutine_handle {
-+ static coroutine_handle from_address(void *);
-+ operator coroutine_handle<>();
-+ void *address();
-+};
-+struct b {
-+ int await_ready() noexcept;
-+ void await_suspend(coroutine_handle<>) noexcept;
-+ void await_resume() noexcept;
-+};
-+} // namespace std
-+struct c;
-+struct d {
-+ c get_return_object();
-+ std::b initial_suspend();
-+ std::b final_suspend() noexcept;
-+ void unhandled_exception();
-+ std::b yield_value(int);
-+};
-+struct e {
-+ void operator++();
-+ int operator*();
-+ int operator!=(e);
-+};
-+struct c {
-+ using promise_type = d;
-+ e begin();
-+ e end();
-+ c f() {
-+ c g;
-+ for (auto h : g) {
-+ auto i = 1;
-+ co_yield i;
-+ }
-+ }
-+};
---- gcc/testsuite/g++.dg/coroutines/pr117231.C
-+++ gcc/testsuite/g++.dg/coroutines/pr117231.C
-@@ -0,0 +1,21 @@
-+// { dg-additional-options "-std=c++23 " }
-+// { dg-do run }
-+#include
-+//#include
-+#include
-+
-+std::generator get_seq()
-+{
-+ std::vector data_{1, 2, 3};
-+ for (auto item : data_)
-+ co_yield item;
-+}
-+
-+int main()
-+{
-+ int res = 0;
-+ for (auto item : get_seq())
-+ res = item; //std::println("{}", item);
-+ if (res != 3)
-+ __builtin_abort ();
-+}
diff --git a/sources b/sources
index a9e4c63..a90cbaf 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250201.tar.xz) = 2b429a615554218d491851b741cfd15ff871ef3beabd27194fe20ce85faa7422e9ac948b6c6bc8c194c33f1564e13ef438e2ec1665d61acc8823443953b01952
+SHA512 (gcc-15.0.1-20250204.tar.xz) = 33b9175db47e892b60d9de6d2bbe48b44d7e44ac36f36e08a522cbf020919fe2dc2ef2239fa4c75be63c788fde9725106e64f76663ce1330f984ee3c03fc1ac9
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 7eefe5bcb2c74a9f6c36d34e97adc06d85507631 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 25 Feb 2025 10:14:02 +0100
Subject: [PATCH 24/71] Remove riscv_cmo.h, add sifive_vector.h instead.
---
gcc.spec | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index a1cf483..a8cdfb6 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -2722,7 +2722,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_crypto.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_bitmanip.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_th_vector.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_cmo.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/sifive_vector.h
%endif
%if %{build_libasan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/sanitizer
@@ -3669,6 +3669,8 @@ end
%endif
%changelog
+- drop on riscv riscv_cmo.h header from file list, add sifive_vector.h
+
* Tue Feb 4 2025 Jakub Jelinek 15.0.1-0.7
- update from trunk
- PRs ada/118712, ada/118731, c/118742, c++/79786, c++/98893, c++/108205,
From 6a6af0745081d8cf7336f18b26aedc719668f625 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 25 Feb 2025 16:55:58 +0100
Subject: [PATCH 25/71] 15.0.1-0.8
---
.gitignore | 1 +
gcc.spec | 59 ++++-
gcc15-pr118206.patch | 581 -------------------------------------------
gcc15-pr118671.patch | 276 --------------------
sources | 2 +-
5 files changed, 54 insertions(+), 865 deletions(-)
delete mode 100644 gcc15-pr118206.patch
delete mode 100644 gcc15-pr118671.patch
diff --git a/.gitignore b/.gitignore
index bcefcfb..e2ec69c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz
/gcc-15.0.1-20250201.tar.xz
/gcc-15.0.1-20250204.tar.xz
+/gcc-15.0.1-20250225.tar.xz
diff --git a/gcc.spec b/gcc.spec
index a8cdfb6..8349979 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250204
-%global gitrev 785011ff892f91b1fedd8ba7812ff3203bc17b1a
+%global DATE 20250225
+%global gitrev c22206a9eb8110a2e8890b2851c5c170e1323889
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.7%{?dist}
+Release: %{gcc_release}.8%{?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
@@ -298,8 +298,6 @@ Patch8: gcc15-no-add-needed.patch
Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
-Patch12: gcc15-pr118206.patch
-Patch13: gcc15-pr118671.patch
Patch50: isl-rh2155127.patch
@@ -914,8 +912,6 @@ so that there cannot be any synchronization problems.
%patch -P10 -p0 -b .rh1574936~
%endif
%patch -P11 -p0 -b .d-shared-libphobos~
-%patch -P12 -p0 -b .pr118206~
-%patch -P13 -p0 -b .pr118671~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
@@ -3669,6 +3665,55 @@ end
%endif
%changelog
+* Tue Feb 25 2025 Jakub Jelinek 15.0.1-0.8
+- update from trunk
+ - PRs analyzer/118300, c/117023, c/119000, c++/66519, c++/66878, c++/70037,
+ c++/70536, c++/82794, c++/82936, c++/83144, c++/86769, c++/86933,
+ c++/94100, c++/96364, c++/101740, c++/102455, c++/107637, c++/110345,
+ c++/113800, c++/115586, c++/116379, c++/117106, c++/117324,
+ c++/118053, c++/118190, c++/118282, c++/118304, c++/118306,
+ c++/118319, c++/118574, c++/118661, c++/118763, c++/118773,
+ c++/118807, c++/118822, c++/118833, c++/118846, c++/118849,
+ c++/118856, c++/118876, c++/118923, c++/118981, c++/188574, d/111628,
+ debug/118790, driver/117739, fortran/24878, fortran/47485,
+ fortran/48958, fortran/56423, fortran/59252, fortran/107635,
+ fortran/115271, fortran/116829, fortran/117430, fortran/118080,
+ fortran/118159, fortran/118740, fortran/118745, fortran/118750,
+ fortran/118845, fortran/118862, go/118746, ipa/118097, jit/118780,
+ libfortran/114618, libstdc++/100612, libstdc++/111050,
+ libstdc++/115209, libstdc++/118160, libstdc++/118559,
+ libstdc++/118701, libstdc++/118811, libstdc++/118855,
+ libstdc++/118865, lto/118125, middle-end/107067, middle-end/113525,
+ middle-end/116351, middle-end/117263, middle-end/118288,
+ middle-end/118950, middle-end/118993, modula2/115112, modula2/118761,
+ modula2/118978, other/116613, other/118919, rtl-optimization/102150,
+ rtl-optimization/108840, rtl-optimization/115568,
+ rtl-optimization/115932, rtl-optimization/116028,
+ rtl-optimization/116244, rtl-optimization/117081,
+ rtl-optimization/117082, rtl-optimization/117239,
+ rtl-optimization/117506, rtl-optimization/117922,
+ rtl-optimization/118497, sarif-replay/118792, sarif-replay/118881,
+ target/69374, target/86660, target/94282, target/109093,
+ target/109780, target/113331, target/114516, target/114522,
+ target/115123, target/115478, target/115703, target/117674,
+ target/117991, target/118089, target/118146, target/118248,
+ target/118540, target/118561, target/118601, target/118623,
+ target/118685, target/118764, target/118768, target/118771,
+ target/118772, target/118776, target/118806, target/118813,
+ target/118815, target/118825, target/118828, target/118832,
+ target/118835, target/118843, target/118844, target/118872,
+ target/118878, target/118936, testsuite/116604, testsuite/116986,
+ testsuite/118754, tree-optimization/82142, tree-optimization/86270,
+ tree-optimization/90579, tree-optimization/98028,
+ tree-optimization/98845, tree-optimization/108357,
+ tree-optimization/110449, tree-optimization/115538,
+ tree-optimization/117790, tree-optimization/118521,
+ tree-optimization/118706, tree-optimization/118727,
+ tree-optimization/118749, tree-optimization/118756,
+ tree-optimization/118805, tree-optimization/118817,
+ tree-optimization/118852, tree-optimization/118895,
+ tree-optimization/118915, tree-optimization/118954,
+ tree-optimization/118973
- drop on riscv riscv_cmo.h header from file list, add sifive_vector.h
* Tue Feb 4 2025 Jakub Jelinek 15.0.1-0.7
diff --git a/gcc15-pr118206.patch b/gcc15-pr118206.patch
deleted file mode 100644
index a72ae36..0000000
--- a/gcc15-pr118206.patch
+++ /dev/null
@@ -1,581 +0,0 @@
-2025-01-09 Jakub Jelinek
-
- PR tree-optimization/118206
- * gimple-fold.cc (fold_truth_andor_for_ifcombine): Temporarily disable.
- * fold-const.cc (decode_field_reference, all_ones_mask_p, unextend,
- fold_truth_andor_1): Temporarily revert 2024-12-12 changes.
-
---- gcc/gimple-fold.cc.jj 2025-01-02 11:23:09.379616499 +0100
-+++ gcc/gimple-fold.cc 2025-01-09 09:08:53.789628193 +0100
-@@ -8037,7 +8037,8 @@ fold_truth_andor_for_ifcombine (enum tre
- it were surrounded with a NE_EXPR. */
-
- if (TREE_CODE_CLASS (lcode) != tcc_comparison
-- || TREE_CODE_CLASS (rcode) != tcc_comparison)
-+ || TREE_CODE_CLASS (rcode) != tcc_comparison
-+ || 1)
- return 0;
-
- /* We don't normally find TRUTH_*IF_EXPR in gimple, but these codes may be
---- gcc/fold-const.cc.jj
-+++ gcc/fold-const.cc
-@@ -137,6 +137,7 @@ static tree range_successor (tree);
- static tree fold_range_test (location_t, enum tree_code, tree, tree, tree);
- static tree fold_cond_expr_with_comparison (location_t, tree, enum tree_code,
- tree, tree, tree, tree);
-+static tree unextend (tree, int, int, tree);
- static tree extract_muldiv (tree, tree, enum tree_code, tree, bool *);
- static tree extract_muldiv_1 (tree, tree, enum tree_code, tree, bool *);
- static tree fold_binary_op_with_conditional_arg (location_t,
-@@ -5021,6 +5022,136 @@ optimize_bit_field_compare (location_t loc, enum tree_code code,
- return lhs;
- }
-
-+/* Subroutine for fold_truth_andor_1: decode a field reference.
-+
-+ If EXP is a comparison reference, we return the innermost reference.
-+
-+ *PBITSIZE is set to the number of bits in the reference, *PBITPOS is
-+ set to the starting bit number.
-+
-+ If the innermost field can be completely contained in a mode-sized
-+ unit, *PMODE is set to that mode. Otherwise, it is set to VOIDmode.
-+
-+ *PVOLATILEP is set to 1 if the any expression encountered is volatile;
-+ otherwise it is not changed.
-+
-+ *PUNSIGNEDP is set to the signedness of the field.
-+
-+ *PREVERSEP is set to the storage order of the field.
-+
-+ *PMASK is set to the mask used. This is either contained in a
-+ BIT_AND_EXPR or derived from the width of the field.
-+
-+ *PAND_MASK is set to the mask found in a BIT_AND_EXPR, if any.
-+
-+ Return 0 if this is not a component reference or is one that we can't
-+ do anything with. */
-+
-+static tree
-+decode_field_reference (location_t loc, tree *exp_, HOST_WIDE_INT *pbitsize,
-+ HOST_WIDE_INT *pbitpos, machine_mode *pmode,
-+ int *punsignedp, int *preversep, int *pvolatilep,
-+ tree *pmask, tree *pand_mask)
-+{
-+ tree exp = *exp_;
-+ tree outer_type = 0;
-+ tree and_mask = 0;
-+ tree mask, inner, offset;
-+ tree unsigned_type;
-+ unsigned int precision;
-+
-+ /* All the optimizations using this function assume integer fields.
-+ There are problems with FP fields since the type_for_size call
-+ below can fail for, e.g., XFmode. */
-+ if (! INTEGRAL_TYPE_P (TREE_TYPE (exp)))
-+ return NULL_TREE;
-+
-+ /* We are interested in the bare arrangement of bits, so strip everything
-+ that doesn't affect the machine mode. However, record the type of the
-+ outermost expression if it may matter below. */
-+ if (CONVERT_EXPR_P (exp)
-+ || TREE_CODE (exp) == NON_LVALUE_EXPR)
-+ outer_type = TREE_TYPE (exp);
-+ STRIP_NOPS (exp);
-+
-+ if (TREE_CODE (exp) == BIT_AND_EXPR)
-+ {
-+ and_mask = TREE_OPERAND (exp, 1);
-+ exp = TREE_OPERAND (exp, 0);
-+ STRIP_NOPS (exp); STRIP_NOPS (and_mask);
-+ if (TREE_CODE (and_mask) != INTEGER_CST)
-+ return NULL_TREE;
-+ }
-+
-+ poly_int64 poly_bitsize, poly_bitpos;
-+ inner = get_inner_reference (exp, &poly_bitsize, &poly_bitpos, &offset,
-+ pmode, punsignedp, preversep, pvolatilep);
-+ if ((inner == exp && and_mask == 0)
-+ || !poly_bitsize.is_constant (pbitsize)
-+ || !poly_bitpos.is_constant (pbitpos)
-+ || *pbitsize < 0
-+ || offset != 0
-+ || TREE_CODE (inner) == PLACEHOLDER_EXPR
-+ /* We eventually want to build a larger reference and need to take
-+ the address of this. */
-+ || (!REFERENCE_CLASS_P (inner) && !DECL_P (inner))
-+ /* Reject out-of-bound accesses (PR79731). */
-+ || (! AGGREGATE_TYPE_P (TREE_TYPE (inner))
-+ && compare_tree_int (TYPE_SIZE (TREE_TYPE (inner)),
-+ *pbitpos + *pbitsize) < 0))
-+ return NULL_TREE;
-+
-+ unsigned_type = lang_hooks.types.type_for_size (*pbitsize, 1);
-+ if (unsigned_type == NULL_TREE)
-+ return NULL_TREE;
-+
-+ *exp_ = exp;
-+
-+ /* If the number of bits in the reference is the same as the bitsize of
-+ the outer type, then the outer type gives the signedness. Otherwise
-+ (in case of a small bitfield) the signedness is unchanged. */
-+ if (outer_type && *pbitsize == TYPE_PRECISION (outer_type))
-+ *punsignedp = TYPE_UNSIGNED (outer_type);
-+
-+ /* Compute the mask to access the bitfield. */
-+ precision = TYPE_PRECISION (unsigned_type);
-+
-+ mask = build_int_cst_type (unsigned_type, -1);
-+
-+ mask = const_binop (LSHIFT_EXPR, mask, size_int (precision - *pbitsize));
-+ mask = const_binop (RSHIFT_EXPR, mask, size_int (precision - *pbitsize));
-+
-+ /* Merge it with the mask we found in the BIT_AND_EXPR, if any. */
-+ if (and_mask != 0)
-+ mask = fold_build2_loc (loc, BIT_AND_EXPR, unsigned_type,
-+ fold_convert_loc (loc, unsigned_type, and_mask), mask);
-+
-+ *pmask = mask;
-+ *pand_mask = and_mask;
-+ return inner;
-+}
-+
-+/* Return nonzero if MASK represents a mask of SIZE ones in the low-order
-+ bit positions and MASK is SIGNED. */
-+
-+static bool
-+all_ones_mask_p (const_tree mask, unsigned int size)
-+{
-+ tree type = TREE_TYPE (mask);
-+ unsigned int precision = TYPE_PRECISION (type);
-+
-+ /* If this function returns true when the type of the mask is
-+ UNSIGNED, then there will be errors. In particular see
-+ gcc.c-torture/execute/990326-1.c. There does not appear to be
-+ any documentation paper trail as to why this is so. But the pre
-+ wide-int worked with that restriction and it has been preserved
-+ here. */
-+ if (size > precision || TYPE_SIGN (type) == UNSIGNED)
-+ return false;
-+
-+ return wi::mask (size, false, precision) == wi::to_wide (mask);
-+}
-+
- /* Subroutine for fold: determine if VAL is the INTEGER_CONST that
- represents the sign bit of EXP's type. If EXP represents a sign
- or zero extension, also test VAL against the unextended type.
-@@ -6330,6 +6461,48 @@ fold_range_test (location_t loc, enum tree_code code, tree type,
- return 0;
- }
-
-+/* Subroutine for fold_truth_andor_1: C is an INTEGER_CST interpreted as a P
-+ bit value. Arrange things so the extra bits will be set to zero if and
-+ only if C is signed-extended to its full width. If MASK is nonzero,
-+ it is an INTEGER_CST that should be AND'ed with the extra bits. */
-+
-+static tree
-+unextend (tree c, int p, int unsignedp, tree mask)
-+{
-+ tree type = TREE_TYPE (c);
-+ int modesize = GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (type));
-+ tree temp;
-+
-+ if (p == modesize || unsignedp)
-+ return c;
-+
-+ /* We work by getting just the sign bit into the low-order bit, then
-+ into the high-order bit, then sign-extend. We then XOR that value
-+ with C. */
-+ temp = build_int_cst (TREE_TYPE (c),
-+ wi::extract_uhwi (wi::to_wide (c), p - 1, 1));
-+
-+ /* We must use a signed type in order to get an arithmetic right shift.
-+ However, we must also avoid introducing accidental overflows, so that
-+ a subsequent call to integer_zerop will work. Hence we must
-+ do the type conversion here. At this point, the constant is either
-+ zero or one, and the conversion to a signed type can never overflow.
-+ We could get an overflow if this conversion is done anywhere else. */
-+ if (TYPE_UNSIGNED (type))
-+ temp = fold_convert (signed_type_for (type), temp);
-+
-+ temp = const_binop (LSHIFT_EXPR, temp, size_int (modesize - 1));
-+ temp = const_binop (RSHIFT_EXPR, temp, size_int (modesize - p - 1));
-+ if (mask != 0)
-+ temp = const_binop (BIT_AND_EXPR, temp,
-+ fold_convert (TREE_TYPE (c), mask));
-+ /* If necessary, convert the type back to match the type of C. */
-+ if (TYPE_UNSIGNED (type))
-+ temp = fold_convert (type, temp);
-+
-+ return fold_convert (type, const_binop (BIT_XOR_EXPR, c, temp));
-+}
-+
- /* For an expression that has the form
- (A && B) || ~B
- or
-@@ -6400,13 +6573,20 @@ merge_truthop_with_opposite_arm (location_t loc, tree op, tree cmpop,
- lhs, rhs);
- return NULL_TREE;
- }
--
-+
- /* Find ways of folding logical expressions of LHS and RHS:
- Try to merge two comparisons to the same innermost item.
- Look for range tests like "ch >= '0' && ch <= '9'".
- Look for combinations of simple terms on machines with expensive branches
- and evaluate the RHS unconditionally.
-
-+ For example, if we have p->a == 2 && p->b == 4 and we can make an
-+ object large enough to span both A and B, we can do this with a comparison
-+ against the object ANDed with the a mask.
-+
-+ If we have p->a == q->a && p->b == q->b, we may be able to use bit masking
-+ operations to do this with one comparison.
-+
- We check for both normal comparisons and the BIT_AND_EXPRs made this by
- function and the one above.
-
-@@ -6431,9 +6611,24 @@ fold_truth_andor_1 (location_t loc, enum tree_code code, tree truth_type,
- convert EQ_EXPR to NE_EXPR so we need not reject the "wrong"
- comparison for one-bit fields. */
-
-+ enum tree_code wanted_code;
- enum tree_code lcode, rcode;
- tree ll_arg, lr_arg, rl_arg, rr_arg;
-- tree result;
-+ tree ll_inner, lr_inner, rl_inner, rr_inner;
-+ HOST_WIDE_INT ll_bitsize, ll_bitpos, lr_bitsize, lr_bitpos;
-+ HOST_WIDE_INT rl_bitsize, rl_bitpos, rr_bitsize, rr_bitpos;
-+ HOST_WIDE_INT xll_bitpos, xlr_bitpos, xrl_bitpos, xrr_bitpos;
-+ HOST_WIDE_INT lnbitsize, lnbitpos, rnbitsize, rnbitpos;
-+ int ll_unsignedp, lr_unsignedp, rl_unsignedp, rr_unsignedp;
-+ int ll_reversep, lr_reversep, rl_reversep, rr_reversep;
-+ machine_mode ll_mode, lr_mode, rl_mode, rr_mode;
-+ scalar_int_mode lnmode, rnmode;
-+ tree ll_mask, lr_mask, rl_mask, rr_mask;
-+ tree ll_and_mask, lr_and_mask, rl_and_mask, rr_and_mask;
-+ tree l_const, r_const;
-+ tree lntype, rntype, result;
-+ HOST_WIDE_INT first_bit, end_bit;
-+ int volatilep;
-
- /* Start by getting the comparison codes. Fail if anything is volatile.
- If one operand is a BIT_AND_EXPR with the constant one, treat it as if
-@@ -6528,7 +6723,316 @@ fold_truth_andor_1 (location_t loc, enum tree_code code, tree truth_type,
- build_int_cst (TREE_TYPE (ll_arg), 0));
- }
-
-- return 0;
-+ /* See if the comparisons can be merged. Then get all the parameters for
-+ each side. */
-+
-+ if ((lcode != EQ_EXPR && lcode != NE_EXPR)
-+ || (rcode != EQ_EXPR && rcode != NE_EXPR))
-+ return 0;
-+
-+ ll_reversep = lr_reversep = rl_reversep = rr_reversep = 0;
-+ volatilep = 0;
-+ ll_inner = decode_field_reference (loc, &ll_arg,
-+ &ll_bitsize, &ll_bitpos, &ll_mode,
-+ &ll_unsignedp, &ll_reversep, &volatilep,
-+ &ll_mask, &ll_and_mask);
-+ lr_inner = decode_field_reference (loc, &lr_arg,
-+ &lr_bitsize, &lr_bitpos, &lr_mode,
-+ &lr_unsignedp, &lr_reversep, &volatilep,
-+ &lr_mask, &lr_and_mask);
-+ rl_inner = decode_field_reference (loc, &rl_arg,
-+ &rl_bitsize, &rl_bitpos, &rl_mode,
-+ &rl_unsignedp, &rl_reversep, &volatilep,
-+ &rl_mask, &rl_and_mask);
-+ rr_inner = decode_field_reference (loc, &rr_arg,
-+ &rr_bitsize, &rr_bitpos, &rr_mode,
-+ &rr_unsignedp, &rr_reversep, &volatilep,
-+ &rr_mask, &rr_and_mask);
-+
-+ /* It must be true that the inner operation on the lhs of each
-+ comparison must be the same if we are to be able to do anything.
-+ Then see if we have constants. If not, the same must be true for
-+ the rhs's. */
-+ if (volatilep
-+ || ll_reversep != rl_reversep
-+ || ll_inner == 0 || rl_inner == 0
-+ || ! operand_equal_p (ll_inner, rl_inner, 0))
-+ return 0;
-+
-+ if (TREE_CODE (lr_arg) == INTEGER_CST
-+ && TREE_CODE (rr_arg) == INTEGER_CST)
-+ {
-+ l_const = lr_arg, r_const = rr_arg;
-+ lr_reversep = ll_reversep;
-+ }
-+ else if (lr_reversep != rr_reversep
-+ || lr_inner == 0 || rr_inner == 0
-+ || ! operand_equal_p (lr_inner, rr_inner, 0))
-+ return 0;
-+ else
-+ l_const = r_const = 0;
-+
-+ /* If either comparison code is not correct for our logical operation,
-+ fail. However, we can convert a one-bit comparison against zero into
-+ the opposite comparison against that bit being set in the field. */
-+
-+ wanted_code = (code == TRUTH_AND_EXPR ? EQ_EXPR : NE_EXPR);
-+ if (lcode != wanted_code)
-+ {
-+ if (l_const && integer_zerop (l_const) && integer_pow2p (ll_mask))
-+ {
-+ /* Make the left operand unsigned, since we are only interested
-+ in the value of one bit. Otherwise we are doing the wrong
-+ thing below. */
-+ ll_unsignedp = 1;
-+ l_const = ll_mask;
-+ }
-+ else
-+ return 0;
-+ }
-+
-+ /* This is analogous to the code for l_const above. */
-+ if (rcode != wanted_code)
-+ {
-+ if (r_const && integer_zerop (r_const) && integer_pow2p (rl_mask))
-+ {
-+ rl_unsignedp = 1;
-+ r_const = rl_mask;
-+ }
-+ else
-+ return 0;
-+ }
-+
-+ /* See if we can find a mode that contains both fields being compared on
-+ the left. If we can't, fail. Otherwise, update all constants and masks
-+ to be relative to a field of that size. */
-+ first_bit = MIN (ll_bitpos, rl_bitpos);
-+ end_bit = MAX (ll_bitpos + ll_bitsize, rl_bitpos + rl_bitsize);
-+ if (!get_best_mode (end_bit - first_bit, first_bit, 0, 0,
-+ TYPE_ALIGN (TREE_TYPE (ll_inner)), BITS_PER_WORD,
-+ volatilep, &lnmode))
-+ return 0;
-+
-+ lnbitsize = GET_MODE_BITSIZE (lnmode);
-+ lnbitpos = first_bit & ~ (lnbitsize - 1);
-+ lntype = lang_hooks.types.type_for_size (lnbitsize, 1);
-+ xll_bitpos = ll_bitpos - lnbitpos, xrl_bitpos = rl_bitpos - lnbitpos;
-+
-+ if (ll_reversep ? !BYTES_BIG_ENDIAN : BYTES_BIG_ENDIAN)
-+ {
-+ xll_bitpos = lnbitsize - xll_bitpos - ll_bitsize;
-+ xrl_bitpos = lnbitsize - xrl_bitpos - rl_bitsize;
-+ }
-+
-+ ll_mask = const_binop (LSHIFT_EXPR, fold_convert_loc (loc, lntype, ll_mask),
-+ size_int (xll_bitpos));
-+ rl_mask = const_binop (LSHIFT_EXPR, fold_convert_loc (loc, lntype, rl_mask),
-+ size_int (xrl_bitpos));
-+ if (ll_mask == NULL_TREE || rl_mask == NULL_TREE)
-+ return 0;
-+
-+ if (l_const)
-+ {
-+ l_const = fold_convert_loc (loc, lntype, l_const);
-+ l_const = unextend (l_const, ll_bitsize, ll_unsignedp, ll_and_mask);
-+ l_const = const_binop (LSHIFT_EXPR, l_const, size_int (xll_bitpos));
-+ if (l_const == NULL_TREE)
-+ return 0;
-+ if (! integer_zerop (const_binop (BIT_AND_EXPR, l_const,
-+ fold_build1_loc (loc, BIT_NOT_EXPR,
-+ lntype, ll_mask))))
-+ {
-+ warning (0, "comparison is always %d", wanted_code == NE_EXPR);
-+
-+ return constant_boolean_node (wanted_code == NE_EXPR, truth_type);
-+ }
-+ }
-+ if (r_const)
-+ {
-+ r_const = fold_convert_loc (loc, lntype, r_const);
-+ r_const = unextend (r_const, rl_bitsize, rl_unsignedp, rl_and_mask);
-+ r_const = const_binop (LSHIFT_EXPR, r_const, size_int (xrl_bitpos));
-+ if (r_const == NULL_TREE)
-+ return 0;
-+ if (! integer_zerop (const_binop (BIT_AND_EXPR, r_const,
-+ fold_build1_loc (loc, BIT_NOT_EXPR,
-+ lntype, rl_mask))))
-+ {
-+ warning (0, "comparison is always %d", wanted_code == NE_EXPR);
-+
-+ return constant_boolean_node (wanted_code == NE_EXPR, truth_type);
-+ }
-+ }
-+
-+ /* If the right sides are not constant, do the same for it. Also,
-+ disallow this optimization if a size, signedness or storage order
-+ mismatch occurs between the left and right sides. */
-+ if (l_const == 0)
-+ {
-+ if (ll_bitsize != lr_bitsize || rl_bitsize != rr_bitsize
-+ || ll_unsignedp != lr_unsignedp || rl_unsignedp != rr_unsignedp
-+ || ll_reversep != lr_reversep
-+ /* Make sure the two fields on the right
-+ correspond to the left without being swapped. */
-+ || ll_bitpos - rl_bitpos != lr_bitpos - rr_bitpos)
-+ return 0;
-+
-+ first_bit = MIN (lr_bitpos, rr_bitpos);
-+ end_bit = MAX (lr_bitpos + lr_bitsize, rr_bitpos + rr_bitsize);
-+ if (!get_best_mode (end_bit - first_bit, first_bit, 0, 0,
-+ TYPE_ALIGN (TREE_TYPE (lr_inner)), BITS_PER_WORD,
-+ volatilep, &rnmode))
-+ return 0;
-+
-+ rnbitsize = GET_MODE_BITSIZE (rnmode);
-+ rnbitpos = first_bit & ~ (rnbitsize - 1);
-+ rntype = lang_hooks.types.type_for_size (rnbitsize, 1);
-+ xlr_bitpos = lr_bitpos - rnbitpos, xrr_bitpos = rr_bitpos - rnbitpos;
-+
-+ if (lr_reversep ? !BYTES_BIG_ENDIAN : BYTES_BIG_ENDIAN)
-+ {
-+ xlr_bitpos = rnbitsize - xlr_bitpos - lr_bitsize;
-+ xrr_bitpos = rnbitsize - xrr_bitpos - rr_bitsize;
-+ }
-+
-+ lr_mask = const_binop (LSHIFT_EXPR, fold_convert_loc (loc,
-+ rntype, lr_mask),
-+ size_int (xlr_bitpos));
-+ rr_mask = const_binop (LSHIFT_EXPR, fold_convert_loc (loc,
-+ rntype, rr_mask),
-+ size_int (xrr_bitpos));
-+ if (lr_mask == NULL_TREE || rr_mask == NULL_TREE)
-+ return 0;
-+
-+ /* Make a mask that corresponds to both fields being compared.
-+ Do this for both items being compared. If the operands are the
-+ same size and the bits being compared are in the same position
-+ then we can do this by masking both and comparing the masked
-+ results. */
-+ ll_mask = const_binop (BIT_IOR_EXPR, ll_mask, rl_mask);
-+ lr_mask = const_binop (BIT_IOR_EXPR, lr_mask, rr_mask);
-+ if (lnbitsize == rnbitsize
-+ && xll_bitpos == xlr_bitpos
-+ && lnbitpos >= 0
-+ && rnbitpos >= 0)
-+ {
-+ lhs = make_bit_field_ref (loc, ll_inner, ll_arg,
-+ lntype, lnbitsize, lnbitpos,
-+ ll_unsignedp || rl_unsignedp, ll_reversep);
-+ if (! all_ones_mask_p (ll_mask, lnbitsize))
-+ lhs = build2 (BIT_AND_EXPR, lntype, lhs, ll_mask);
-+
-+ rhs = make_bit_field_ref (loc, lr_inner, lr_arg,
-+ rntype, rnbitsize, rnbitpos,
-+ lr_unsignedp || rr_unsignedp, lr_reversep);
-+ if (! all_ones_mask_p (lr_mask, rnbitsize))
-+ rhs = build2 (BIT_AND_EXPR, rntype, rhs, lr_mask);
-+
-+ return build2_loc (loc, wanted_code, truth_type, lhs, rhs);
-+ }
-+
-+ /* There is still another way we can do something: If both pairs of
-+ fields being compared are adjacent, we may be able to make a wider
-+ field containing them both.
-+
-+ Note that we still must mask the lhs/rhs expressions. Furthermore,
-+ the mask must be shifted to account for the shift done by
-+ make_bit_field_ref. */
-+ if (((ll_bitsize + ll_bitpos == rl_bitpos
-+ && lr_bitsize + lr_bitpos == rr_bitpos)
-+ || (ll_bitpos == rl_bitpos + rl_bitsize
-+ && lr_bitpos == rr_bitpos + rr_bitsize))
-+ && ll_bitpos >= 0
-+ && rl_bitpos >= 0
-+ && lr_bitpos >= 0
-+ && rr_bitpos >= 0)
-+ {
-+ tree type;
-+
-+ lhs = make_bit_field_ref (loc, ll_inner, ll_arg, lntype,
-+ ll_bitsize + rl_bitsize,
-+ MIN (ll_bitpos, rl_bitpos),
-+ ll_unsignedp, ll_reversep);
-+ rhs = make_bit_field_ref (loc, lr_inner, lr_arg, rntype,
-+ lr_bitsize + rr_bitsize,
-+ MIN (lr_bitpos, rr_bitpos),
-+ lr_unsignedp, lr_reversep);
-+
-+ ll_mask = const_binop (RSHIFT_EXPR, ll_mask,
-+ size_int (MIN (xll_bitpos, xrl_bitpos)));
-+ lr_mask = const_binop (RSHIFT_EXPR, lr_mask,
-+ size_int (MIN (xlr_bitpos, xrr_bitpos)));
-+ if (ll_mask == NULL_TREE || lr_mask == NULL_TREE)
-+ return 0;
-+
-+ /* Convert to the smaller type before masking out unwanted bits. */
-+ type = lntype;
-+ if (lntype != rntype)
-+ {
-+ if (lnbitsize > rnbitsize)
-+ {
-+ lhs = fold_convert_loc (loc, rntype, lhs);
-+ ll_mask = fold_convert_loc (loc, rntype, ll_mask);
-+ type = rntype;
-+ }
-+ else if (lnbitsize < rnbitsize)
-+ {
-+ rhs = fold_convert_loc (loc, lntype, rhs);
-+ lr_mask = fold_convert_loc (loc, lntype, lr_mask);
-+ type = lntype;
-+ }
-+ }
-+
-+ if (! all_ones_mask_p (ll_mask, ll_bitsize + rl_bitsize))
-+ lhs = build2 (BIT_AND_EXPR, type, lhs, ll_mask);
-+
-+ if (! all_ones_mask_p (lr_mask, lr_bitsize + rr_bitsize))
-+ rhs = build2 (BIT_AND_EXPR, type, rhs, lr_mask);
-+
-+ return build2_loc (loc, wanted_code, truth_type, lhs, rhs);
-+ }
-+
-+ return 0;
-+ }
-+
-+ /* Handle the case of comparisons with constants. If there is something in
-+ common between the masks, those bits of the constants must be the same.
-+ If not, the condition is always false. Test for this to avoid generating
-+ incorrect code below. */
-+ result = const_binop (BIT_AND_EXPR, ll_mask, rl_mask);
-+ if (! integer_zerop (result)
-+ && simple_cst_equal (const_binop (BIT_AND_EXPR, result, l_const),
-+ const_binop (BIT_AND_EXPR, result, r_const)) != 1)
-+ {
-+ if (wanted_code == NE_EXPR)
-+ {
-+ warning (0, "% of unmatched not-equal tests is always 1");
-+ return constant_boolean_node (true, truth_type);
-+ }
-+ else
-+ {
-+ warning (0, "% of mutually exclusive equal-tests is always 0");
-+ return constant_boolean_node (false, truth_type);
-+ }
-+ }
-+
-+ if (lnbitpos < 0)
-+ return 0;
-+
-+ /* Construct the expression we will return. First get the component
-+ reference we will make. Unless the mask is all ones the width of
-+ that field, perform the mask operation. Then compare with the
-+ merged constant. */
-+ result = make_bit_field_ref (loc, ll_inner, ll_arg,
-+ lntype, lnbitsize, lnbitpos,
-+ ll_unsignedp || rl_unsignedp, ll_reversep);
-+
-+ ll_mask = const_binop (BIT_IOR_EXPR, ll_mask, rl_mask);
-+ if (! all_ones_mask_p (ll_mask, lnbitsize))
-+ result = build2_loc (loc, BIT_AND_EXPR, lntype, result, ll_mask);
-+
-+ return build2_loc (loc, wanted_code, truth_type, result,
-+ const_binop (BIT_IOR_EXPR, l_const, r_const));
- }
-
- /* T is an integer expression that is being multiplied, divided, or taken a
diff --git a/gcc15-pr118671.patch b/gcc15-pr118671.patch
deleted file mode 100644
index ea9a6e7..0000000
--- a/gcc15-pr118671.patch
+++ /dev/null
@@ -1,276 +0,0 @@
-2025-01-28 Jakub Jelinek
-
- PR c++/118671
- * call.cc (build_list_conv): For RAW_DATA_CST, call
- implicit_conversion with INTEGER_CST representing first byte instead
- of the whole RAW_DATA_CST. If it is an optimizable trivial
- conversion, just save that to subconvs, otherwise allocate an
- artificial ck_list for all the RAW_DATA_CST bytes and create
- subsubconv for each of them.
- (convert_like_internal): For ck_list with RAW_DATA_CST, instead of
- doing all the checks for optimizable conversion just check kind and
- assert everything else, otherwise use subsubconversions instead of
- the subconversion for each element.
-
- * g++.dg/cpp/embed-25.C: New test.
- * g++.dg/cpp0x/pr118671.C: New test.
-
---- gcc/cp/call.cc.jj 2025-01-22 09:22:53.000000000 +0100
-+++ gcc/cp/call.cc 2025-01-27 21:36:31.159889633 +0100
-@@ -868,6 +868,67 @@ build_list_conv (tree type, tree ctor, i
-
- FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
- {
-+ if (TREE_CODE (val) == RAW_DATA_CST)
-+ {
-+ tree elt
-+ = build_int_cst (TREE_TYPE (val), RAW_DATA_UCHAR_ELT (val, 0));
-+ conversion *sub
-+ = implicit_conversion (elttype, TREE_TYPE (val), elt,
-+ false, flags, complain);
-+ conversion *next;
-+ if (sub == NULL)
-+ return NULL;
-+ /* For conversion to initializer_list or
-+ initializer_list or initializer_list
-+ we can optimize and keep RAW_DATA_CST with adjusted
-+ type if we report narrowing errors if needed.
-+ Use just one subconversion for that case. */
-+ if (sub->kind == ck_std
-+ && sub->type
-+ && (TREE_CODE (sub->type) == INTEGER_TYPE
-+ || is_byte_access_type (sub->type))
-+ && TYPE_PRECISION (sub->type) == CHAR_BIT
-+ && (next = next_conversion (sub))
-+ && next->kind == ck_identity)
-+ {
-+ subconvs[i] = sub;
-+ continue;
-+ }
-+ /* Otherwise. build separate subconv for each RAW_DATA_CST
-+ byte. Wrap those into an artificial ck_list which convert_like
-+ will then handle. */
-+ conversion **subsubconvs = alloc_conversions (RAW_DATA_LENGTH (val));
-+ unsigned int j;
-+ subsubconvs[0] = sub;
-+ for (j = 1; j < (unsigned) RAW_DATA_LENGTH (val); ++j)
-+ {
-+ elt = build_int_cst (TREE_TYPE (val),
-+ RAW_DATA_UCHAR_ELT (val, j));
-+ sub = implicit_conversion (elttype, TREE_TYPE (val), elt,
-+ false, flags, complain);
-+ if (sub == NULL)
-+ return NULL;
-+ subsubconvs[j] = sub;
-+ }
-+
-+ t = alloc_conversion (ck_list);
-+ t->type = type;
-+ t->u.list = subsubconvs;
-+ t->rank = cr_exact;
-+ for (j = 0; j < (unsigned) RAW_DATA_LENGTH (val); ++j)
-+ {
-+ sub = subsubconvs[i];
-+ if (sub->rank > t->rank)
-+ t->rank = sub->rank;
-+ if (sub->user_conv_p)
-+ t->user_conv_p = true;
-+ if (sub->bad_p)
-+ t->bad_p = true;
-+ }
-+ subconvs[i] = t;
-+ continue;
-+ }
-+
- conversion *sub
- = implicit_conversion (elttype, TREE_TYPE (val), val,
- false, flags, complain);
-@@ -8841,22 +8902,22 @@ convert_like_internal (conversion *convs
- {
- if (TREE_CODE (val) == RAW_DATA_CST)
- {
-- tree elt_type;
-- conversion *next;
- /* For conversion to initializer_list or
- initializer_list or initializer_list
- we can optimize and keep RAW_DATA_CST with adjusted
- type if we report narrowing errors if needed, for
- others this converts each element separately. */
-- if (convs->u.list[ix]->kind == ck_std
-- && (elt_type = convs->u.list[ix]->type)
-- && (TREE_CODE (elt_type) == INTEGER_TYPE
-- || is_byte_access_type (elt_type))
-- && TYPE_PRECISION (elt_type) == CHAR_BIT
-- && (next = next_conversion (convs->u.list[ix]))
-- && next->kind == ck_identity)
-+ if (convs->u.list[ix]->kind == ck_std)
- {
-- if (!TYPE_UNSIGNED (elt_type)
-+ tree et = convs->u.list[ix]->type;
-+ conversion *next = next_conversion (convs->u.list[ix]);
-+ gcc_assert (et
-+ && (TREE_CODE (et) == INTEGER_TYPE
-+ || is_byte_access_type (et))
-+ && TYPE_PRECISION (et) == CHAR_BIT
-+ && next
-+ && next->kind == ck_identity);
-+ if (!TYPE_UNSIGNED (et)
- /* For RAW_DATA_CST, TREE_TYPE (val) can be
- either integer_type_node (when it has been
- created by the lexer from CPP_EMBED) or
-@@ -8882,7 +8943,7 @@ convert_like_internal (conversion *convs
- "narrowing conversion of "
- "%qd from %qH to %qI",
- RAW_DATA_UCHAR_ELT (val, i),
-- TREE_TYPE (val), elt_type);
-+ TREE_TYPE (val), et);
- if (errorcount != savederrorcount)
- return error_mark_node;
- }
-@@ -8890,19 +8951,21 @@ convert_like_internal (conversion *convs
- return error_mark_node;
- }
- tree sub = copy_node (val);
-- TREE_TYPE (sub) = elt_type;
-+ TREE_TYPE (sub) = et;
- CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor),
- NULL_TREE, sub);
- }
- else
- {
-+ conversion *conv = convs->u.list[ix];
-+ gcc_assert (conv->kind == ck_list);
- for (int i = 0; i < RAW_DATA_LENGTH (val); ++i)
- {
- tree elt
- = build_int_cst (TREE_TYPE (val),
- RAW_DATA_UCHAR_ELT (val, i));
- tree sub
-- = convert_like (convs->u.list[ix], elt,
-+ = convert_like (conv->u.list[i], elt,
- fn, argnum, false, false,
- /*nested_p=*/true, complain);
- if (sub == error_mark_node)
---- gcc/testsuite/g++.dg/cpp/embed-25.C.jj 2025-01-27 21:51:00.190990295 +0100
-+++ gcc/testsuite/g++.dg/cpp/embed-25.C 2025-01-27 21:50:45.954183524 +0100
-@@ -0,0 +1,56 @@
-+// PR c++/118671
-+// { dg-do run { target c++11 } }
-+// { dg-options "-O2" }
-+
-+namespace std {
-+template
-+struct initializer_list {
-+private:
-+ T *_M_array;
-+ decltype (sizeof 0) _M_len;
-+public:
-+ constexpr decltype (sizeof 0)
-+ size () const noexcept { return _M_len; }
-+ constexpr const T *
-+ begin () const noexcept { return _M_array; }
-+ constexpr const T *
-+ end () const noexcept { return begin () + size (); }
-+};
-+}
-+
-+struct A {} a;
-+
-+struct B {
-+ constexpr B (int x) : B (a, x) {}
-+ template
-+ constexpr B (A, T... x) : b(x...) {}
-+ int b;
-+};
-+
-+struct C {
-+ C (std::initializer_list x)
-+ {
-+ unsigned char buf[] = {
-+#embed __FILE__
-+ };
-+ if (x.size () != sizeof (buf))
-+ __builtin_abort ();
-+ unsigned int i = 0;
-+ for (auto a = x.begin (); a < x.end (); ++a, ++i)
-+ if (a->b != buf[i])
-+ __builtin_abort ();
-+ c = true;
-+ }
-+ bool c;
-+};
-+
-+C c {
-+#embed __FILE__
-+};
-+
-+int
-+main ()
-+{
-+ if (!c.c)
-+ __builtin_abort ();
-+}
---- gcc/testsuite/g++.dg/cpp0x/pr118671.C.jj 2025-01-27 21:47:01.154242793 +0100
-+++ gcc/testsuite/g++.dg/cpp0x/pr118671.C 2025-01-27 21:46:43.379486760 +0100
-@@ -0,0 +1,61 @@
-+// PR c++/118671
-+// { dg-do run { target c++11 } }
-+// { dg-options "-O2" }
-+
-+namespace std {
-+template
-+struct initializer_list {
-+private:
-+ T *_M_array;
-+ decltype (sizeof 0) _M_len;
-+public:
-+ constexpr decltype (sizeof 0)
-+ size () const noexcept { return _M_len; }
-+ constexpr const T *
-+ begin () const noexcept { return _M_array; }
-+ constexpr const T *
-+ end () const noexcept { return begin () + size (); }
-+};
-+}
-+
-+struct A {} a;
-+
-+struct B {
-+ constexpr B (int x) : B (a, x) {}
-+ template
-+ constexpr B (A, T... x) : b(x...) {}
-+ int b;
-+};
-+
-+struct C {
-+ C (std::initializer_list x)
-+ {
-+ if (x.size () != 130)
-+ __builtin_abort ();
-+ unsigned int i = 1;
-+ for (auto a = x.begin (); a < x.end (); ++a)
-+ if (a->b != i)
-+ __builtin_abort ();
-+ else
-+ i = (i & 15) + 1;
-+ c = true;
-+ }
-+ bool c;
-+};
-+
-+C c { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-+ 1, 2 };
-+
-+int
-+main ()
-+{
-+ if (!c.c)
-+ __builtin_abort ();
-+}
diff --git a/sources b/sources
index a90cbaf..1d5e353 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250204.tar.xz) = 33b9175db47e892b60d9de6d2bbe48b44d7e44ac36f36e08a522cbf020919fe2dc2ef2239fa4c75be63c788fde9725106e64f76663ce1330f984ee3c03fc1ac9
+SHA512 (gcc-15.0.1-20250225.tar.xz) = 8c6c880dc779c075d4ae2fd27f587ad9e3b1b1aaf6ec418b7642e67578fbafebc755cff2c5df6283f88db29f90f5d118557495a3c0fe9c40059639aaa4d47bae
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 264b1809f7956a04301df5145529b229aca1f042 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 1 Mar 2025 13:02:22 +0100
Subject: [PATCH 26/71] 15.0.1-0.9
---
.gitignore | 1 +
gcc.spec | 31 ++++++++++++++++--
gcc15-pr118953.patch | 65 +++++++++++++++++++++++++++++++++++++
gcc15-pr119002.patch | 71 +++++++++++++++++++++++++++++++++++++++++
gcc15-pr119006.patch | 76 ++++++++++++++++++++++++++++++++++++++++++++
sources | 2 +-
6 files changed, 242 insertions(+), 4 deletions(-)
create mode 100644 gcc15-pr118953.patch
create mode 100644 gcc15-pr119002.patch
create mode 100644 gcc15-pr119006.patch
diff --git a/.gitignore b/.gitignore
index e2ec69c..75221f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/gcc-15.0.1-20250201.tar.xz
/gcc-15.0.1-20250204.tar.xz
/gcc-15.0.1-20250225.tar.xz
+/gcc-15.0.1-20250301.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 8349979..828b594 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250225
-%global gitrev c22206a9eb8110a2e8890b2851c5c170e1323889
+%global DATE 20250301
+%global gitrev 504a13588c3919101c7409909bbe2c6af9dcb829
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.8%{?dist}
+Release: %{gcc_release}.9%{?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
@@ -298,6 +298,9 @@ Patch8: gcc15-no-add-needed.patch
Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
+Patch12: gcc15-pr118953.patch
+Patch13: gcc15-pr119002.patch
+Patch14: gcc15-pr119006.patch
Patch50: isl-rh2155127.patch
@@ -912,6 +915,9 @@ so that there cannot be any synchronization problems.
%patch -P10 -p0 -b .rh1574936~
%endif
%patch -P11 -p0 -b .d-shared-libphobos~
+%patch -P12 -p0 -b .pr118953~
+%patch -P13 -p0 -b .pr119002~
+%patch -P14 -p0 -b .pr119006~
%patch -P50 -p0 -b .rh2155127~
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
@@ -3665,6 +3671,25 @@ end
%endif
%changelog
+* Sat Mar 1 2025 Jakub Jelinek 15.0.1-0.9
+- update from trunk
+ - PRs c/114870, c/119001, c++/110822, c++/114913, c++/118516, c++/118928,
+ c++/118986, c++/119038, c++/119045, d/116961, d/118654,
+ fortran/108233, fortran/108369, fortran/118730, fortran/118789,
+ ipa/111245, ipa/118243, jit/117047, libstdc++/93059, libstdc++/104606,
+ libstdc++/105609, libstdc++/106612, libstdc++/112490,
+ libstdc++/112803, libstdc++/118083, lto/91299, middle-end/66279,
+ middle-end/115871, middle-end/118819, middle-end/118860,
+ middle-end/119021, rtl-optimization/116336, rtl-optimization/117712,
+ rtl-optimization/119002, target/107635, target/109189, target/115458,
+ target/118931, target/118940, testsuite/115028, testsuite/116143,
+ translation/118991, tree-optimization/87984, tree-optimization/116855,
+ tree-optimization/118464, tree-optimization/119030
+- fix ranger related miscompilation (PR tree-optimization/118953)
+- fix miscompilation of floating point comparisons if NaNs can appear
+ (#2346233, PR rtl-optimization/119002)
+- fix ICF related miscompilation (PR ipa/119006)
+
* Tue Feb 25 2025 Jakub Jelinek 15.0.1-0.8
- update from trunk
- PRs analyzer/118300, c/117023, c/119000, c++/66519, c++/66878, c++/70037,
diff --git a/gcc15-pr118953.patch b/gcc15-pr118953.patch
new file mode 100644
index 0000000..736afac
--- /dev/null
+++ b/gcc15-pr118953.patch
@@ -0,0 +1,65 @@
+2025-02-27 Jakub Jelinek
+
+ PR tree-optimization/118953
+ * value-range.cc (irange::union_bitmask): Update m_bitmask if
+ get_bitmask () is unknown_p and m_bitmask is not even when the
+ semantic bitmask didn't change and returning false.
+
+ * gcc.dg/torture/pr118953.c: New test.
+
+--- gcc/value-range.cc.jj 2025-01-02 11:23:25.118396777 +0100
++++ gcc/value-range.cc 2025-02-26 18:49:10.713107905 +0100
+@@ -2447,7 +2447,7 @@ irange::union_bitmask (const irange &r)
+ irange_bitmask bm = get_bitmask ();
+ irange_bitmask save = bm;
+ bm.union_ (r.get_bitmask ());
+- if (save == bm)
++ if (save == bm && (!bm.unknown_p () || m_bitmask.unknown_p ()))
+ return false;
+
+ m_bitmask = bm;
+--- gcc/testsuite/gcc.dg/torture/pr118953.c.jj 2025-02-26 18:51:47.139936059 +0100
++++ gcc/testsuite/gcc.dg/torture/pr118953.c 2025-02-26 18:52:33.078298359 +0100
+@@ -0,0 +1,42 @@
++/* PR tree-optimization/118953 */
++/* { dg-do run { target int32plus } } */
++
++int a, d;
++long long b, c;
++
++int
++foo (int f, int g, unsigned long long h, long long j)
++{
++ unsigned long long i = 0;
++ if (g)
++ switch (f)
++ {
++ case 8:
++ i = b;
++ break;
++ case 6:
++ i = c;
++ break;
++ }
++ else
++ switch (f)
++ {
++ case 8:
++ i = h;
++ break;
++ case 24:
++ case 32:
++ i = j;
++ break;
++ }
++ return i;
++}
++
++int
++main ()
++{
++ int k = a * (409628 - 28);
++ d = foo (k - 1048524, 0, k - 1048487, k - 1048531ULL);
++ if (d)
++ __builtin_abort ();
++}
diff --git a/gcc15-pr119002.patch b/gcc15-pr119002.patch
new file mode 100644
index 0000000..aac548e
--- /dev/null
+++ b/gcc15-pr119002.patch
@@ -0,0 +1,71 @@
+2025-02-24 Jakub Jelinek
+
+ PR rtl-optimization/119002
+ * simplify-rtx.cc: Include tm_p.h.
+ (simplify_context::simplify_logical_relational_operation): Set
+ all = 15 also if op0's first operand has MODE_CC mode and it
+ is or could be floating point comparison which honors NaNs.
+
+ * gcc.c-torture/execute/ieee/pr119002.c: New test.
+
+--- gcc/simplify-rtx.cc.jj 2025-01-15 08:43:39.611918569 +0100
++++ gcc/simplify-rtx.cc 2025-02-24 21:16:09.980758481 +0100
+@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3.
+ #include "selftest-rtl.h"
+ #include "rtx-vector-builder.h"
+ #include "rtlanal.h"
++#include "tm_p.h"
+
+ /* Simplification and canonicalization of RTL. */
+
+@@ -2675,6 +2676,24 @@ simplify_context::simplify_logical_relat
+ /* See whether the operands might be unordered. */
+ if (HONOR_NANS (GET_MODE (XEXP (op0, 0))))
+ all = 15;
++ else if (GET_MODE_CLASS (GET_MODE (XEXP (op0, 0))) == MODE_CC
++ && !flag_finite_math_only)
++ {
++ /* HONOR_NANS will be false for MODE_CC comparisons, eventhough
++ they could actually be floating point. If the mode is
++ reversible, ask the backend if it could be unordered, otherwise
++ err on the side of caution and assume it could be unordered
++ if any supported floating mode honors NaNs. */
++ machine_mode mode = GET_MODE (XEXP (op0, 0));
++ if (!REVERSIBLE_CC_MODE (mode)
++ || REVERSE_CONDITION (GT, mode) != LE)
++ FOR_EACH_MODE_IN_CLASS (mode, MODE_FLOAT)
++ if (HONOR_NANS (mode))
++ {
++ all = 15;
++ break;
++ }
++ }
+ mask0 = comparison_to_mask (code0) & all;
+ mask1 = comparison_to_mask (code1) & all;
+ }
+--- gcc/testsuite/gcc.c-torture/execute/ieee/pr119002.c.jj 2025-02-24 21:18:45.880622627 +0100
++++ gcc/testsuite/gcc.c-torture/execute/ieee/pr119002.c 2025-02-24 21:19:02.418396051 +0100
+@@ -0,0 +1,23 @@
++/* PR rtl-optimization/119002 */
++
++__attribute__((noipa)) unsigned int
++foo (void *x, float y, float z)
++{
++ unsigned int a, b;
++ float c, d, e;
++ c = y;
++ d = z;
++ a = c < d;
++ d = y;
++ e = z;
++ b = d >= e;
++ a |= b;
++ return a;
++}
++
++int
++main ()
++{
++ if (foo ((void *) 0, 0.f, __builtin_nanf ("")))
++ __builtin_abort ();
++}
diff --git a/gcc15-pr119006.patch b/gcc15-pr119006.patch
new file mode 100644
index 0000000..dfbdaa9
--- /dev/null
+++ b/gcc15-pr119006.patch
@@ -0,0 +1,76 @@
+2025-02-27 Jakub Jelinek
+
+ PR ipa/119006
+ * ipa-icf-gimple.cc (func_checker::compare_operand): If t1 and t2
+ are ADDR_EXPRs, call operand_equal_p on their operands rather than on
+ the ADDR_EXPRs themselves. Formatting fix.
+
+ * g++.dg/opt/pr119006.C: New test.
+
+--- gcc/ipa-icf-gimple.cc.jj 2025-02-01 00:50:02.080774328 +0100
++++ gcc/ipa-icf-gimple.cc 2025-02-27 14:35:19.931183246 +0100
+@@ -437,12 +437,23 @@ func_checker::compare_operand (tree t1,
+ ("compare_ao_refs failed (dependence clique difference)");
+ gcc_unreachable ();
+ }
++ else if (TREE_CODE (t1) == ADDR_EXPR && TREE_CODE (t2) == ADDR_EXPR)
++ {
++ /* For ADDR_EXPR compare the operands of the ADDR_EXPR rather than
++ the ADDR_EXPRs themselves. operand_equal_p will compare the
++ operands with OEP_ADDRESS_OF and only care about the value
++ of the ADDR_EXPR, rather than e.g. types of MEM_REFs in there.
++ Some optimizations use such details though, see PR119006. */
++ if (operand_equal_p (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0),
++ OEP_MATCH_SIDE_EFFECTS))
++ return true;
++ return return_false_with_msg ("operand_equal_p failed");
++ }
+ else
+ {
+ if (operand_equal_p (t1, t2, OEP_MATCH_SIDE_EFFECTS))
+ return true;
+- return return_false_with_msg
+- ("operand_equal_p failed");
++ return return_false_with_msg ("operand_equal_p failed");
+ }
+ }
+
+--- gcc/testsuite/g++.dg/opt/pr119006.C.jj 2025-02-27 14:37:05.952707350 +0100
++++ gcc/testsuite/g++.dg/opt/pr119006.C 2025-02-27 14:36:29.251218260 +0100
+@@ -0,0 +1,36 @@
++// PR ipa/119006
++// { dg-do run { target c++11 } }
++// { dg-options "-O2 -fwhole-program" }
++
++struct A {
++ bool operator== (const char *x) const { return x && !__builtin_strcmp (a, x); }
++ char a[11];
++};
++
++struct B {
++ bool operator== (const char *x) const { return x && !__builtin_strcmp (a, x); }
++ bool operator!= (const char *x) const { return !(*this == x); }
++ char a[128];
++};
++
++[[gnu::noinline,gnu::used]] int
++foo (const A& lhs, const char* rhs)
++{
++ return lhs == rhs;
++}
++
++constexpr const char *t = "abcdefghijklmno";
++
++[[gnu::noinline,gnu::used]] void
++bar (B x)
++{
++ if (x != t) __builtin_abort ();
++}
++
++int
++main ()
++{
++ B b;
++ __builtin_strcpy (b.a, t);
++ bar (b);
++}
diff --git a/sources b/sources
index 1d5e353..2abd420 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250225.tar.xz) = 8c6c880dc779c075d4ae2fd27f587ad9e3b1b1aaf6ec418b7642e67578fbafebc755cff2c5df6283f88db29f90f5d118557495a3c0fe9c40059639aaa4d47bae
+SHA512 (gcc-15.0.1-20250301.tar.xz) = 9cef1e315d2be10651713caee6853cedb3c6e02b22d13f2bd105df1f6d35250806ec6be702be67ea74386941c11ef27c1b06051760e4ef9fdb0749dec6fb0de9
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From f7f61ee7eae116430a5d586d74758cbec987e89f Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 13 Mar 2025 13:28:27 +0100
Subject: [PATCH 27/71] 15.0.1-0.10
---
.gitignore | 1 +
gcc.spec | 71 ++++++++++++++++++++++++++++++--------------
gcc15-pr118953.patch | 65 ----------------------------------------
gcc15-pr119002.patch | 71 --------------------------------------------
sources | 2 +-
5 files changed, 50 insertions(+), 160 deletions(-)
delete mode 100644 gcc15-pr118953.patch
delete mode 100644 gcc15-pr119002.patch
diff --git a/.gitignore b/.gitignore
index 75221f5..5e47446 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
/gcc-15.0.1-20250204.tar.xz
/gcc-15.0.1-20250225.tar.xz
/gcc-15.0.1-20250301.tar.xz
+/gcc-15.0.1-20250313.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 828b594..74ddd77 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250301
-%global gitrev 504a13588c3919101c7409909bbe2c6af9dcb829
+%global DATE 20250313
+%global gitrev 4fe62f20633b8e1bf4d776d7f4644ce485efd0b2
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -143,7 +143,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.9%{?dist}
+Release: %{gcc_release}.10%{?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
@@ -298,9 +298,7 @@ Patch8: gcc15-no-add-needed.patch
Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
-Patch12: gcc15-pr118953.patch
-Patch13: gcc15-pr119002.patch
-Patch14: gcc15-pr119006.patch
+Patch12: gcc15-pr119006.patch
Patch50: isl-rh2155127.patch
@@ -898,32 +896,22 @@ so that there cannot be any synchronization problems.
%prep
%setup -q -n gcc-%{version}-%{DATE} -a 1 -a 2 -a 3
-%patch -P0 -p0 -b .hack~
-%patch -P2 -p0 -b .sparc-config-detection~
-%patch -P3 -p0 -b .libgomp-omp_h-multilib~
-%patch -P4 -p0 -b .libtool-no-rpath~
+%autopatch -p0 -m 0 -M 4
%if %{build_isl}
-%patch -P5 -p0 -b .isl-dl~
-%patch -P6 -p0 -b .isl-dl2~
+%autopatch -p0 -m 5 -M 6
%endif
%if %{build_libstdcxx_docs}
-%patch -P7 -p0 -b .libstdc++-docs~
+%autopatch -p0 7
%endif
-%patch -P8 -p0 -b .no-add-needed~
-%patch -P9 -p0 -b .Wno-format-security~
+%autopatch -p0 -m 8 -M 9
%if 0%{?fedora} >= 29 || 0%{?rhel} > 7
-%patch -P10 -p0 -b .rh1574936~
+%autopatch -p0 10
%endif
-%patch -P11 -p0 -b .d-shared-libphobos~
-%patch -P12 -p0 -b .pr118953~
-%patch -P13 -p0 -b .pr119002~
-%patch -P14 -p0 -b .pr119006~
-
-%patch -P50 -p0 -b .rh2155127~
+%autopatch -p0 -m 11 -M 99
touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
%if 0%{?rhel} >= 9
-%patch -P100 -p1 -b .fortran-fdec-duplicates~
+%autopatch -p1 100
%endif
%ifarch %{arm}
@@ -3671,6 +3659,43 @@ end
%endif
%changelog
+* Thu Mar 13 2025 Jakub Jelinek 15.0.1-0.10
+- update from trunk
+ - PRs analyzer/117262, c/60440, c/67301, c/112960, c/113515, c/117029,
+ c/117178, c/118579, c/119183, c++/98533, c++/100589, c++/109431,
+ c++/110584, c++/114795, c++/115580, c++/116740, c++/117364,
+ c++/117504, c++/117512, c++/118775, c++/118787, c++/118799,
+ c++/118874, c++/119073, c++/119076, c++/119102, c++/119123,
+ c++/119134, c++/119138, c++/119150, c++/119154, c++/119162,
+ cobol/119216, cobol/119229, d/119139, debug/119190, fortran/47928,
+ fortran/77872, fortran/98903, fortran/101577, fortran/103391,
+ fortran/104684, fortran/104826, fortran/107143, fortran/118747,
+ fortran/119049, fortran/119054, fortran/119074, fortran/119078,
+ fortran/119118, fortran/119157, fortran/119199, ipa/118318,
+ ipa/118785, ipa/119067, libgcc/119151, libstdc++/108053,
+ libstdc++/113310, libstdc++/115215, libstdc++/115218,
+ libstdc++/119081, libstdc++/119110, libstdc++/119121,
+ libstdc++/119144, lto/114501, middle-end/97323, middle-end/118457,
+ middle-end/118801, middle-end/119119, middle-end/119204,
+ middle-end/119219, middle-end/119226, modula2/118998, modula2/119088,
+ modula2/119192, other/38768, other/119052, preprocessor/119202,
+ rtl-optimization/114492, rtl-optimization/116564,
+ rtl-optimization/117477, rtl-optimization/118739,
+ rtl-optimization/119046, rtl-optimization/119071,
+ rtl-optimization/119099, sanitizer/56682, target/114222,
+ target/114991, target/115258, target/115439, target/115485,
+ target/115835, target/116708, target/116901, target/117931,
+ target/117955, target/118351, target/118892, target/118906,
+ target/118934, target/118942, target/118956, target/119084,
+ target/119115, target/119127, target/119131, target/119133,
+ target/119171, target/119238, testsuite/115248,
+ tree-optimization/116125, tree-optimization/116901,
+ tree-optimization/117919, tree-optimization/118922,
+ tree-optimization/118976, tree-optimization/119057,
+ tree-optimization/119096, tree-optimization/119145,
+ tree-optimization/119166
+- use %%autopatch in the spec file
+
* Sat Mar 1 2025 Jakub Jelinek 15.0.1-0.9
- update from trunk
- PRs c/114870, c/119001, c++/110822, c++/114913, c++/118516, c++/118928,
diff --git a/gcc15-pr118953.patch b/gcc15-pr118953.patch
deleted file mode 100644
index 736afac..0000000
--- a/gcc15-pr118953.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-2025-02-27 Jakub Jelinek
-
- PR tree-optimization/118953
- * value-range.cc (irange::union_bitmask): Update m_bitmask if
- get_bitmask () is unknown_p and m_bitmask is not even when the
- semantic bitmask didn't change and returning false.
-
- * gcc.dg/torture/pr118953.c: New test.
-
---- gcc/value-range.cc.jj 2025-01-02 11:23:25.118396777 +0100
-+++ gcc/value-range.cc 2025-02-26 18:49:10.713107905 +0100
-@@ -2447,7 +2447,7 @@ irange::union_bitmask (const irange &r)
- irange_bitmask bm = get_bitmask ();
- irange_bitmask save = bm;
- bm.union_ (r.get_bitmask ());
-- if (save == bm)
-+ if (save == bm && (!bm.unknown_p () || m_bitmask.unknown_p ()))
- return false;
-
- m_bitmask = bm;
---- gcc/testsuite/gcc.dg/torture/pr118953.c.jj 2025-02-26 18:51:47.139936059 +0100
-+++ gcc/testsuite/gcc.dg/torture/pr118953.c 2025-02-26 18:52:33.078298359 +0100
-@@ -0,0 +1,42 @@
-+/* PR tree-optimization/118953 */
-+/* { dg-do run { target int32plus } } */
-+
-+int a, d;
-+long long b, c;
-+
-+int
-+foo (int f, int g, unsigned long long h, long long j)
-+{
-+ unsigned long long i = 0;
-+ if (g)
-+ switch (f)
-+ {
-+ case 8:
-+ i = b;
-+ break;
-+ case 6:
-+ i = c;
-+ break;
-+ }
-+ else
-+ switch (f)
-+ {
-+ case 8:
-+ i = h;
-+ break;
-+ case 24:
-+ case 32:
-+ i = j;
-+ break;
-+ }
-+ return i;
-+}
-+
-+int
-+main ()
-+{
-+ int k = a * (409628 - 28);
-+ d = foo (k - 1048524, 0, k - 1048487, k - 1048531ULL);
-+ if (d)
-+ __builtin_abort ();
-+}
diff --git a/gcc15-pr119002.patch b/gcc15-pr119002.patch
deleted file mode 100644
index aac548e..0000000
--- a/gcc15-pr119002.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-2025-02-24 Jakub Jelinek
-
- PR rtl-optimization/119002
- * simplify-rtx.cc: Include tm_p.h.
- (simplify_context::simplify_logical_relational_operation): Set
- all = 15 also if op0's first operand has MODE_CC mode and it
- is or could be floating point comparison which honors NaNs.
-
- * gcc.c-torture/execute/ieee/pr119002.c: New test.
-
---- gcc/simplify-rtx.cc.jj 2025-01-15 08:43:39.611918569 +0100
-+++ gcc/simplify-rtx.cc 2025-02-24 21:16:09.980758481 +0100
-@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3.
- #include "selftest-rtl.h"
- #include "rtx-vector-builder.h"
- #include "rtlanal.h"
-+#include "tm_p.h"
-
- /* Simplification and canonicalization of RTL. */
-
-@@ -2675,6 +2676,24 @@ simplify_context::simplify_logical_relat
- /* See whether the operands might be unordered. */
- if (HONOR_NANS (GET_MODE (XEXP (op0, 0))))
- all = 15;
-+ else if (GET_MODE_CLASS (GET_MODE (XEXP (op0, 0))) == MODE_CC
-+ && !flag_finite_math_only)
-+ {
-+ /* HONOR_NANS will be false for MODE_CC comparisons, eventhough
-+ they could actually be floating point. If the mode is
-+ reversible, ask the backend if it could be unordered, otherwise
-+ err on the side of caution and assume it could be unordered
-+ if any supported floating mode honors NaNs. */
-+ machine_mode mode = GET_MODE (XEXP (op0, 0));
-+ if (!REVERSIBLE_CC_MODE (mode)
-+ || REVERSE_CONDITION (GT, mode) != LE)
-+ FOR_EACH_MODE_IN_CLASS (mode, MODE_FLOAT)
-+ if (HONOR_NANS (mode))
-+ {
-+ all = 15;
-+ break;
-+ }
-+ }
- mask0 = comparison_to_mask (code0) & all;
- mask1 = comparison_to_mask (code1) & all;
- }
---- gcc/testsuite/gcc.c-torture/execute/ieee/pr119002.c.jj 2025-02-24 21:18:45.880622627 +0100
-+++ gcc/testsuite/gcc.c-torture/execute/ieee/pr119002.c 2025-02-24 21:19:02.418396051 +0100
-@@ -0,0 +1,23 @@
-+/* PR rtl-optimization/119002 */
-+
-+__attribute__((noipa)) unsigned int
-+foo (void *x, float y, float z)
-+{
-+ unsigned int a, b;
-+ float c, d, e;
-+ c = y;
-+ d = z;
-+ a = c < d;
-+ d = y;
-+ e = z;
-+ b = d >= e;
-+ a |= b;
-+ return a;
-+}
-+
-+int
-+main ()
-+{
-+ if (foo ((void *) 0, 0.f, __builtin_nanf ("")))
-+ __builtin_abort ();
-+}
diff --git a/sources b/sources
index 2abd420..13bc153 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250301.tar.xz) = 9cef1e315d2be10651713caee6853cedb3c6e02b22d13f2bd105df1f6d35250806ec6be702be67ea74386941c11ef27c1b06051760e4ef9fdb0749dec6fb0de9
+SHA512 (gcc-15.0.1-20250313.tar.xz) = 09aeb1bdab2a8bb6081262e8a2a3141e0be93e03ac0895179de2b8d23e1307e0124ed157a8ddc6161fb61385384fe254100502bf08f35a187f50e9c70c677cc4
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 2d6ea7bce26589f48b2bc9f2a5b24316a0737cfd Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 13 Mar 2025 13:40:46 +0100
Subject: [PATCH 28/71] 15.0.1-0.10
---
gcc.spec | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/gcc.spec b/gcc.spec
index 74ddd77..225267a 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -324,7 +324,7 @@ Patch100: gcc15-fortran-fdec-duplicates.patch
%if %{build_go}
# Avoid stripping these libraries and binaries.
%global __os_install_post \
-chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.23.* \
+chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.24.* \
chmod 644 %{buildroot}%{_prefix}/bin/go.gcc \
chmod 644 %{buildroot}%{_prefix}/bin/gofmt.gcc \
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo \
@@ -332,7 +332,7 @@ chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/test2json \
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/vet \
%__os_install_post \
-chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgo.so.23.* \
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgo.so.24.* \
chmod 755 %{buildroot}%{_prefix}/bin/go.gcc \
chmod 755 %{buildroot}%{_prefix}/bin/gofmt.gcc \
chmod 755 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo \
@@ -1711,7 +1711,7 @@ ln -sf ../../../libstdc++.so.6.*[0-9] libstdc++.so
ln -sf ../../../libgfortran.so.5.* libgfortran.so
ln -sf ../../../libgomp.so.1.* libgomp.so
%if %{build_go}
-ln -sf ../../../libgo.so.23.* libgo.so
+ln -sf ../../../libgo.so.24.* libgo.so
%endif
%if %{build_libquadmath}
ln -sf ../../../libquadmath.so.0.* libquadmath.so
@@ -1746,7 +1746,7 @@ ln -sf ../../../../%{_lib}/libstdc++.so.6.*[0-9] libstdc++.so
ln -sf ../../../../%{_lib}/libgfortran.so.5.* libgfortran.so
ln -sf ../../../../%{_lib}/libgomp.so.1.* libgomp.so
%if %{build_go}
-ln -sf ../../../../%{_lib}/libgo.so.23.* libgo.so
+ln -sf ../../../../%{_lib}/libgo.so.24.* libgo.so
%endif
%if %{build_libquadmath}
ln -sf ../../../../%{_lib}/libquadmath.so.0.* libquadmath.so
@@ -1888,8 +1888,8 @@ ln -sf ../`echo ../../../../lib/libgfortran.so.5.* | sed s~/lib/~/lib64/~` 64/li
ln -sf ../`echo ../../../../lib/libgomp.so.1.* | sed s~/lib/~/lib64/~` 64/libgomp.so
%if %{build_go}
rm -f libgo.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgo.so.23.* | sed 's,^.*libg,libg,'`' )' > libgo.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgo.so.23.* | sed 's,^.*libg,libg,'`' )' > 64/libgo.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgo.so.24.* | sed 's,^.*libg,libg,'`' )' > libgo.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgo.so.24.* | sed 's,^.*libg,libg,'`' )' > 64/libgo.so
%endif
%if %{build_libquadmath}
rm -f libquadmath.so
@@ -2005,8 +2005,8 @@ ln -sf ../`echo ../../../../lib64/libgfortran.so.5.* | sed s~/../lib64/~/~` 32/l
ln -sf ../`echo ../../../../lib64/libgomp.so.1.* | sed s~/../lib64/~/~` 32/libgomp.so
%if %{build_go}
rm -f libgo.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgo.so.23.* | sed 's,^.*libg,libg,'`' )' > libgo.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgo.so.23.* | sed 's,^.*libg,libg,'`' )' > 32/libgo.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgo.so.24.* | sed 's,^.*libg,libg,'`' )' > libgo.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgo.so.24.* | sed 's,^.*libg,libg,'`' )' > 32/libgo.so
%endif
%if %{build_libquadmath}
rm -f libquadmath.so
@@ -2226,7 +2226,7 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/liblsan.so.0.*
%endif
%if %{build_go}
# Avoid stripping these libraries and binaries.
-chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.23.*
+chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.24.*
chmod 644 %{buildroot}%{_prefix}/bin/go.gcc
chmod 644 %{buildroot}%{_prefix}/bin/gofmt.gcc
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo
@@ -3507,7 +3507,7 @@ end
%doc rpm.doc/go/*
%files -n libgo
-%attr(755,root,root) %{_prefix}/%{_lib}/libgo.so.23*
+%attr(755,root,root) %{_prefix}/%{_lib}/libgo.so.24*
%doc rpm.doc/libgo/*
%files -n libgo-devel
From f659fed8f809edd2626e75fa524ee45a4ea65c4f Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 13 Mar 2025 21:39:31 +0100
Subject: [PATCH 29/71] 15.0.1-0.10
---
gcc.spec | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index 225267a..75ae5a6 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1588,7 +1588,7 @@ cp -r -p ../libstdc++-v3/doc/html ../rpm.doc/libstdc++-v3/html
cp -r -p $libstdcxx_doc_builddir/html ../rpm.doc/libstdc++-v3/html/api
mkdir -p %{buildroot}%{_mandir}/man3
cp -r -p $libstdcxx_doc_builddir/man/man3/* %{buildroot}%{_mandir}/man3/
-find ../rpm.doc/libstdc++-v3 -name \*~ | xargs rm
+find ../rpm.doc/libstdc++-v3 -name \*~ -o -name \*.orig | xargs rm -f
%endif
%ifarch sparcv9 sparc64
From 6a75c861d441eff5516c01a308f3a0b249fadde2 Mon Sep 17 00:00:00 2001
From: Siddhesh Poyarekar
Date: Mon, 3 Mar 2025 10:33:50 -0500
Subject: [PATCH 30/71] Add version for libmudflap, etc.
Fix warnings that fedpkg prep throws whenever gcc sources are prepped.
---
gcc.spec | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/gcc.spec b/gcc.spec
index 75ae5a6..fe1f90b 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -352,17 +352,17 @@ Autoreq: false
%if !%{build_ada}
Obsoletes: libgnat < %{version}-%{release}
%endif
-Obsoletes: libmudflap
-Obsoletes: libmudflap-devel
-Obsoletes: libmudflap-static
+Obsoletes: libmudflap < %{version}-%{release}
+Obsoletes: libmudflap-devel < %{version}-%{release}
+Obsoletes: libmudflap-static < %{version}-%{release}
Obsoletes: libgcj < %{version}-%{release}
Obsoletes: libgcj-devel < %{version}-%{release}
Obsoletes: libgcj-src < %{version}-%{release}
%ifarch %{ix86} x86_64
-Obsoletes: libcilkrts
-Obsoletes: libcilkrts-static
-Obsoletes: libmpx
-Obsoletes: libmpx-static
+Obsoletes: libcilkrts < %{version}-%{release}
+Obsoletes: libcilkrts-static < %{version}-%{release}
+Obsoletes: libmpx < %{version}-%{release}
+Obsoletes: libmpx-static < %{version}-%{release}
%endif
%description -n libgcc
From d831ac9ded9f251aff91736b3877b7d4e129a5ca Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 29 Mar 2025 13:04:21 +0100
Subject: [PATCH 31/71] 15.0.1-0.11
---
.gitignore | 1 +
gcc.spec | 163 +++++++++++++++++++++++++++++++++++++++--
gcc15-pr119291-1.patch | 81 ++++++++++++++++++++
gcc15-pr119291-2.patch | 51 +++++++++++++
gcc15-pr119327.patch | 47 ++++++++++++
sources | 2 +-
6 files changed, 337 insertions(+), 8 deletions(-)
create mode 100644 gcc15-pr119291-1.patch
create mode 100644 gcc15-pr119291-2.patch
create mode 100644 gcc15-pr119327.patch
diff --git a/.gitignore b/.gitignore
index 5e47446..c887ae7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
/gcc-15.0.1-20250225.tar.xz
/gcc-15.0.1-20250301.tar.xz
/gcc-15.0.1-20250313.tar.xz
+/gcc-15.0.1-20250329.tar.xz
diff --git a/gcc.spec b/gcc.spec
index fe1f90b..9f666cd 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250313
-%global gitrev 4fe62f20633b8e1bf4d776d7f4644ce485efd0b2
+%global DATE 20250329
+%global gitrev 3d14ac28b1c0233636b21171759b471b39ecee35
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -37,6 +37,7 @@
%global build_go 0
%global build_d 0
%global build_m2 0
+%global build_cobol 0
%else
%ifarch %{ix86} x86_64 ia64 ppc %{power64} alpha s390x %{arm} aarch64 riscv64
%global build_ada 1
@@ -59,6 +60,11 @@
%else
%global build_m2 0
%endif
+%ifarch x86_64 aarch64
+%global build_cobol 1
+%else
+%global build_cobol 0
+%endif
%endif
%ifarch %{ix86} x86_64 ia64 ppc64le
%global build_libquadmath 1
@@ -143,7 +149,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.10%{?dist}
+Release: %{gcc_release}.11%{?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
@@ -299,6 +305,9 @@ Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr119006.patch
+Patch13: gcc15-pr119291-1.patch
+Patch14: gcc15-pr119291-2.patch
+Patch15: gcc15-pr119327.patch
Patch50: isl-rh2155127.patch
@@ -547,6 +556,32 @@ Requires: gcc-gm2 = %{version}-%{release}
%description -n libgm2-static
This package contains static Modula-2 libraries.
+%package gcobol
+Summary: COBOL support
+Requires: gcc = %{version}-%{release}
+Requires: libgcobol = %{version}-%{release}
+Autoreq: true
+
+%description gcobol
+The gcc-gcobol package provides support for compiling COBOL
+programs with the GNU Compiler Collection.
+
+%package -n libgcobol
+Summary: COBOL runtime
+Autoreq: true
+
+%description -n libgcobol
+This package contains COBOL shared libraries which are needed to run
+COBOL dynamically linked programs.
+
+%package -n libgcobol-static
+Summary: Static COBOL libraries
+Requires: libgcobol = %{version}-%{release}
+Requires: gcc-gcobol = %{version}-%{release}
+
+%description -n libgcobol-static
+This package contains static COBOL libraries.
+
%package -n libgomp
Summary: GCC OpenMP v4.5 shared support library
@@ -1105,6 +1140,9 @@ enableld=,d
%if %{build_m2}
enablelm2=,m2
%endif
+%if %{build_cobol}
+enablelm2=,cobol
+%endif
offloadtgts=
%if %{build_offload_nvptx}
offloadtgts=nvptx-none
@@ -1339,7 +1377,7 @@ cd ../..
# Copy various doc files here and there
cd ..
-mkdir -p rpm.doc/{gfortran,objc,gdc,libphobos,gm2,libgm2,libgdiagnostics-devel}
+mkdir -p rpm.doc/{gfortran,objc,gdc,libphobos,gm2,libgm2,libgdiagnostics-devel,gcobol,libgcobol}
mkdir -p rpm.doc/go rpm.doc/libgo rpm.doc/libquadmath rpm.doc/libitm
mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/ada,gcc/jit,libstdc++-v3,libobjc,libgomp,libcc1,libatomic,libsanitizer}
@@ -1375,10 +1413,21 @@ done)
cp -p $i ../rpm.doc/libgm2/$i.libgm2
done)
%endif
+%if %{build_cobol}
+(cd gcc/cobol; for i in ChangeLog* LICENSE; do
+ cp -p $i ../../rpm.doc/gcobol/$i.gcobol
+done
+cp -p LICENSE ../../rpm.doc/libgcobol/$i.libgcobol)
+(cd libgcobol; for i in ChangeLog*; do
+ cp -p $i ../rpm.doc/libgcobol/$i.libgcobol
+done)
+%endif
%if %{build_libquadmath}
(cd libquadmath; for i in ChangeLog* COPYING.LIB; do
cp -p $i ../rpm.doc/libquadmath/$i.libquadmath
-done)
+done;
+sed -n '/==========/,/==========/{/==========/d;s/^ \* *//p}' math/cosq.c \
+ > ../rpm.doc/libquadmath/LICENSE.SunPro)
%endif
%if %{build_libitm}
(cd libitm; for i in ChangeLog*; do
@@ -1725,6 +1774,9 @@ for i in cor iso log min pim; do
ln -sf ../../../libm2$i.so.20.* libm2$i.so
done
%endif
+%if %{build_cobol}
+ln -sf ../../../libgcobol.so.1.* libgcobol.so
+%endif
%if %{build_libitm}
ln -sf ../../../libitm.so.1.* libitm.so
%endif
@@ -1760,6 +1812,9 @@ for i in cor iso log min pim; do
ln -sf ../../../../%{_lib}/libm2$i.so.20.* libm2$i.so
done
%endif
+%if %{build_cobol}
+ln -sf ../../../../%{_lib}/libgcobol.so.1.* libgcobol.so
+%endif
%if %{build_libitm}
ln -sf ../../../../%{_lib}/libitm.so.1.* libitm.so
%endif
@@ -1813,6 +1868,9 @@ for i in cor iso log min pim; do
ln -sf ../../libm2$i.a m2/m2$i/
done
%endif
+%if %{build_cobol}
+mv -f %{buildroot}%{_prefix}/%{_lib}/libgcobol.*a $FULLLPATH/
+%endif
%if %{build_libitm}
mv -f %{buildroot}%{_prefix}/%{_lib}/libitm.*a $FULLLPATH/
%endif
@@ -1913,6 +1971,11 @@ for i in cor iso log min pim; do
ln -sf ../../libm2$i.a 64/m2/m2$i/
done
%endif
+%if %{build_cobol}
+rm -f libgcobol.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgcobol.so.1.* | sed 's,^.*libg,libg,'`' )' > libgcobol.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgcobol.so.1.* | sed 's,^.*libg,libg,'`' )' > 64/libgcobol.so
+%endif
%if %{build_libitm}
rm -f libitm.so
echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libitm.so.1.* | sed 's,^.*libi,libi,'`' )' > libitm.so
@@ -1964,6 +2027,10 @@ for i in cor iso log min pim; do
ln -sf ../lib64/libm2$i.a 64/libm2$i.a
done
%endif
+%if %{build_cobol}
+ln -sf lib32/libgcobol.a libgcobol.a
+ln -sf ../lib64/libgcobol.a 64/libgcobol.a
+%endif
%if %{build_libitm}
ln -sf lib32/libitm.a libitm.a
ln -sf ../lib64/libitm.a 64/libitm.a
@@ -2030,6 +2097,11 @@ for i in cor iso log min pim; do
ln -sf ../../libm2$i.a 32/m2/m2$i/
done
%endif
+%if %{build_cobol}
+rm -f libgcobol.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgcobol.so.1.* | sed 's,^.*libg,libg,'`' )' > libgcobol.so
+#echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgcobol.so.1.* | sed 's,^.*libg,libg,'`' )' > 32/libgcobol.so
+%endif
%if %{build_libitm}
rm -f libitm.so
echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libitm.so.1.* | sed 's,^.*libi,libi,'`' )' > libitm.so
@@ -2083,6 +2155,10 @@ for i in cor iso log min pim; do
ln -sf lib64/libm2$i.a libm2$i.a
done
%endif
+%if %{build_cobol}
+ln -sf ../lib32/libgcobol.a 32/libgcobol.a
+ln -sf lib64/libgcobol.a libgcobol.a
+%endif
%if %{build_libitm}
ln -sf ../lib32/libitm.a 32/libitm.a
ln -sf lib64/libitm.a libitm.a
@@ -2132,6 +2208,9 @@ for i in cor iso log min pim; do
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libm2$i.a 32/libm2$i.a
done
%endif
+%if %{build_cobol}
+#ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libgcobol.a 32/libgcobol.a
+%endif
%if %{build_libitm}
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libitm.a 32/libitm.a
%endif
@@ -2172,7 +2251,7 @@ for d in . $FULLLSUBDIR; do
-o -name libobjc.a -o -name libgdruntime.a -o -name libgphobos.a \
-o -name libm2\*.a -o -name libquadmath.a -o -name libstdc++.a \
-o -name libstdc++fs.a -o -name libstdc++exp.a \
- -o -name libsupc++.a \
+ -o -name libsupc++.a -o -name libgcobol.a \
-o -name libtsan.a -o -name libubsan.a \) -a -type f`; do
cp -a $f $RPM_BUILD_ROOT%{_prefix}/lib/debug%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/$d/
done
@@ -2185,7 +2264,8 @@ strip -g `find . \( -name libgfortran.a -o -name libobjc.a -o -name libgomp.a \
-o -name libgdruntime.a -o -name libgphobos.a -o -name libm2\*.a \
-o -name libitm.a -o -name libgo.a -o -name libcaf\*.a \
-o -name libatomic.a -o -name libasan.a -o -name libtsan.a \
- -o -name libubsan.a -o -name liblsan.a -o -name libcc1.a \) \
+ -o -name libubsan.a -o -name liblsan.a -o -name libcc1.a \
+ -o -name libgcobol.a \) \
-a -type f`
popd
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgfortran.so.5.*
@@ -2203,6 +2283,9 @@ for i in cor iso log min pim; do
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libm2$i.so.20.*
done
%endif
+%if %{build_cobol}
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgcobol.so.1.*
+%endif
%if %{build_libitm}
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libitm.so.1.*
%endif
@@ -3191,6 +3274,31 @@ end
%endif
%endif
+%if %{build_cobol}
+%files gcobol
+%{_prefix}/bin/gcobol
+%{_prefix}/bin/gcobc
+%{_mandir}/man1/gcobol.1*
+%{_mandir}/man3/gcobol.3*
+%dir %{_prefix}/libexec/gcc
+%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
+%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cobol1
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcobol.so
+%{_datadir}/gcobol
+%doc rpm.doc/gcobol/*
+
+%files -n libgcobol
+%{_prefix}/%{_lib}/libgcobol.so.1*
+%doc rpm.doc/libgcobol/*
+
+%files -n libgcobol-static
+%dir %{_prefix}/lib/gcc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcobol.a
+%endif
+
%if %{build_ada}
%files gnat
%{_prefix}/bin/gnat
@@ -3659,6 +3767,47 @@ end
%endif
%changelog
+* Sat Mar 29 2025 Jakub Jelinek 15.0.1-0.11
+- update from trunk
+ - PRs ada/119265, ada/119440, analyzer/119278, bootstrap/119513, c/116545,
+ c/118061, c/118765, c/119311, c/119350, c/119366, c++/101881,
+ c++/114525, c++/114992, c++/118104, c++/118920, c++/118961,
+ c++/119194, c++/119233, c++/119316, c++/119344, c++/119370,
+ c++/119378, c++/119379, cobol/119213, cobol/119214, cobol/119241,
+ cobol/119242, cobol/119244, cobol/119290, cobol/119301, cobol/119390,
+ d/117621, d/118545, debug/101533, driver/101544, fortran/60560,
+ fortran/85836, fortran/116706, fortran/118796, fortran/119272,
+ fortran/119338, fortran/119349, fortran/119380, fortran/119403,
+ fortran/119406, fortran/119419, gcov-profile/118442, ipa/98265,
+ ipa/116572, ipa/119147, ipa/119376, ipa/119484, libfortran/85836,
+ libgomp/96835, libitm/88319, libstdc++/101527, libstdc++/101587,
+ libstdc++/108487, libstdc++/111055, libstdc++/111138,
+ libstdc++/116440, libstdc++/117214, libstdc++/117983,
+ libstdc++/118699, libstdc++/119135, libstdc++/119282,
+ libstdc++/119358, libstdc++/119415, libstdc++/119429,
+ libstdc++/119469, libstdc++/119488, middle-end/93437,
+ middle-end/112938, middle-end/113546, middle-end/117811,
+ middle-end/118627, middle-end/118795, middle-end/119325,
+ modula2/115111, modula2/118045, modula2/118600, modula2/119449,
+ modula2/119504, other/42270, other/119218, other/119250, other/119510,
+ preprocessor/108900, rtl-optimization/118615, rtl-optimization/118914,
+ rtl-optimization/119285, rtl-optimization/119307, rust/119333,
+ target/55583, target/91614, target/92713, target/96226, target/98743,
+ target/101544, target/112980, target/117069, target/117092,
+ target/117452, target/118068, target/119010, target/119114,
+ target/119120, target/119172, target/119224, target/119235,
+ target/119270, target/119286, target/119355, target/119357,
+ target/119408, target/119421, target/119425, target/119428,
+ target/119450, target/119465, testsuite/113634, testsuite/113965,
+ testsuite/116163, testsuite/119220, testsuite/119382,
+ testsuite/119489, tree-optimization/37143, tree-optimization/105820,
+ tree-optimization/118616, tree-optimization/119155,
+ tree-optimization/119274, tree-optimization/119287,
+ tree-optimization/119389, tree-optimization/119417,
+ tree-optimization/119483
+- package gcc-gcobol on x86_64 and aarch64 so far
+- turn unversioned obsoletes into versioned ones
+
* Thu Mar 13 2025 Jakub Jelinek 15.0.1-0.10
- update from trunk
- PRs analyzer/117262, c/60440, c/67301, c/112960, c/113515, c/117029,
diff --git a/gcc15-pr119291-1.patch b/gcc15-pr119291-1.patch
new file mode 100644
index 0000000..c9b37a0
--- /dev/null
+++ b/gcc15-pr119291-1.patch
@@ -0,0 +1,81 @@
+2025-03-28 Jakub Jelinek
+
+ PR rtl-optimization/119291
+ * combine.cc (try_combine): For splitting of PARALLEL with
+ 2 independent SETs into i2 and i3 sets check reg_used_between_p
+ of the SET_DESTs rather than just modified_between_p.
+
+ * gcc.c-torture/execute/pr119291.c: New test.
+
+--- gcc/combine.cc.jj 2025-03-25 09:34:33.469102343 +0100
++++ gcc/combine.cc 2025-03-27 09:50:15.768567383 +0100
+@@ -4012,18 +4012,18 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
+ rtx set1 = XVECEXP (newpat, 0, 1);
+
+ /* Normally, it doesn't matter which of the two is done first, but
+- one which uses any regs/memory set in between i2 and i3 can't
+- be first. The PARALLEL might also have been pre-existing in i3,
+- so we need to make sure that we won't wrongly hoist a SET to i2
+- that would conflict with a death note present in there, or would
+- have its dest modified between i2 and i3. */
++ one which uses any regs/memory set or used in between i2 and i3
++ can't be first. The PARALLEL might also have been pre-existing
++ in i3, so we need to make sure that we won't wrongly hoist a SET
++ to i2 that would conflict with a death note present in there, or
++ would have its dest modified or used between i2 and i3. */
+ if (!modified_between_p (SET_SRC (set1), i2, i3)
+ && !(REG_P (SET_DEST (set1))
+ && find_reg_note (i2, REG_DEAD, SET_DEST (set1)))
+ && !(GET_CODE (SET_DEST (set1)) == SUBREG
+ && find_reg_note (i2, REG_DEAD,
+ SUBREG_REG (SET_DEST (set1))))
+- && !modified_between_p (SET_DEST (set1), i2, i3)
++ && !reg_used_between_p (SET_DEST (set1), i2, i3)
+ /* If I3 is a jump, ensure that set0 is a jump so that
+ we do not create invalid RTL. */
+ && (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx)
+@@ -4038,7 +4038,7 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
+ && !(GET_CODE (SET_DEST (set0)) == SUBREG
+ && find_reg_note (i2, REG_DEAD,
+ SUBREG_REG (SET_DEST (set0))))
+- && !modified_between_p (SET_DEST (set0), i2, i3)
++ && !reg_used_between_p (SET_DEST (set0), i2, i3)
+ /* If I3 is a jump, ensure that set1 is a jump so that
+ we do not create invalid RTL. */
+ && (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx)
+--- gcc/testsuite/gcc.c-torture/execute/pr119291.c.jj 2025-03-27 09:48:01.917407084 +0100
++++ gcc/testsuite/gcc.c-torture/execute/pr119291.c 2025-03-27 09:47:48.020598094 +0100
+@@ -0,0 +1,33 @@
++/* PR rtl-optimization/119291 */
++
++int a;
++long c;
++
++__attribute__((noipa)) void
++foo (int x)
++{
++ if (x != 0)
++ __builtin_abort ();
++ a = 42;
++}
++
++int
++main ()
++{
++ int e = 1;
++lab:
++ if (a < 2)
++ {
++ int b = e;
++ _Bool d = a != 0;
++ _Bool f = b != 0;
++ unsigned long g = -(d & f);
++ unsigned long h = c & g;
++ unsigned long i = ~c;
++ e = -(i & h);
++ c = e != 0;
++ a = ~e + b;
++ foo (e);
++ goto lab;
++ }
++}
diff --git a/gcc15-pr119291-2.patch b/gcc15-pr119291-2.patch
new file mode 100644
index 0000000..8e8e51f
--- /dev/null
+++ b/gcc15-pr119291-2.patch
@@ -0,0 +1,51 @@
+2025-03-28 Jakub Jelinek
+
+ * combine.cc (try_combine): Sets which satisfy set_noop_p can go
+ to i2 unless i3 is a jump and the other set is not.
+
+--- gcc/combine.cc.jj 2025-03-28 11:44:15.491458700 +0100
++++ gcc/combine.cc 2025-03-28 12:11:49.505835983 +0100
+@@ -4017,13 +4017,14 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
+ in i3, so we need to make sure that we won't wrongly hoist a SET
+ to i2 that would conflict with a death note present in there, or
+ would have its dest modified or used between i2 and i3. */
+- if (!modified_between_p (SET_SRC (set1), i2, i3)
+- && !(REG_P (SET_DEST (set1))
+- && find_reg_note (i2, REG_DEAD, SET_DEST (set1)))
+- && !(GET_CODE (SET_DEST (set1)) == SUBREG
+- && find_reg_note (i2, REG_DEAD,
+- SUBREG_REG (SET_DEST (set1))))
+- && !reg_used_between_p (SET_DEST (set1), i2, i3)
++ if ((set_noop_p (set1)
++ || (!modified_between_p (SET_SRC (set1), i2, i3)
++ && !(REG_P (SET_DEST (set1))
++ && find_reg_note (i2, REG_DEAD, SET_DEST (set1)))
++ && !(GET_CODE (SET_DEST (set1)) == SUBREG
++ && find_reg_note (i2, REG_DEAD,
++ SUBREG_REG (SET_DEST (set1))))
++ && !reg_used_between_p (SET_DEST (set1), i2, i3)))
+ /* If I3 is a jump, ensure that set0 is a jump so that
+ we do not create invalid RTL. */
+ && (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx)
+@@ -4032,13 +4033,14 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
+ newi2pat = set1;
+ newpat = set0;
+ }
+- else if (!modified_between_p (SET_SRC (set0), i2, i3)
+- && !(REG_P (SET_DEST (set0))
+- && find_reg_note (i2, REG_DEAD, SET_DEST (set0)))
+- && !(GET_CODE (SET_DEST (set0)) == SUBREG
+- && find_reg_note (i2, REG_DEAD,
+- SUBREG_REG (SET_DEST (set0))))
+- && !reg_used_between_p (SET_DEST (set0), i2, i3)
++ else if ((set_noop_p (set0)
++ || (!modified_between_p (SET_SRC (set0), i2, i3)
++ && !(REG_P (SET_DEST (set0))
++ && find_reg_note (i2, REG_DEAD, SET_DEST (set0)))
++ && !(GET_CODE (SET_DEST (set0)) == SUBREG
++ && find_reg_note (i2, REG_DEAD,
++ SUBREG_REG (SET_DEST (set0))))
++ && !reg_used_between_p (SET_DEST (set0), i2, i3)))
+ /* If I3 is a jump, ensure that set1 is a jump so that
+ we do not create invalid RTL. */
+ && (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx)
diff --git a/gcc15-pr119327.patch b/gcc15-pr119327.patch
new file mode 100644
index 0000000..a9fdd77
--- /dev/null
+++ b/gcc15-pr119327.patch
@@ -0,0 +1,47 @@
+2025-03-26 Jakub Jelinek
+
+ PR target/119327
+ * config/rs6000/rs6000.cc (rs6000_can_inline_p): Ignore also
+ OPTION_MASK_SAVE_TOC_INDIRECT differences.
+
+ * g++.dg/opt/pr119327.C: New test.
+
+--- gcc/config/rs6000/rs6000.cc.jj 2025-03-18 14:56:37.990023768 +0100
++++ gcc/config/rs6000/rs6000.cc 2025-03-25 13:21:33.174568536 +0100
+@@ -25765,10 +25765,13 @@ rs6000_can_inline_p (tree caller, tree c
+ }
+ }
+
+- /* Ignore -mpower8-fusion and -mpower10-fusion options for inlining
+- purposes. */
+- callee_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION);
+- explicit_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION);
++ /* Ignore -mpower8-fusion, -mpower10-fusion and -msave-toc-indirect options
++ for inlining purposes. */
++ HOST_WIDE_INT ignored_isas = (OPTION_MASK_P8_FUSION
++ | OPTION_MASK_P10_FUSION
++ | OPTION_MASK_SAVE_TOC_INDIRECT);
++ callee_isa &= ~ignored_isas;
++ explicit_isa &= ~ignored_isas;
+
+ /* The callee's options must be a subset of the caller's options, i.e.
+ a vsx function may inline an altivec function, but a no-vsx function
+--- gcc/testsuite/g++.dg/opt/pr119327.C.jj 2025-03-25 13:24:45.129988649 +0100
++++ gcc/testsuite/g++.dg/opt/pr119327.C 2025-03-25 13:25:09.513661266 +0100
+@@ -0,0 +1,16 @@
++// PR target/119327
++// { dg-do compile { target c++11 } }
++// { dg-options "-Os" }
++
++#pragma GCC optimize "fp-contract=off"
++
++template
++void
++foo (T f)
++{
++ f ();
++}
++
++struct S {
++ S () { [] {}; foo ([] __attribute__((always_inline)) {}); }
++} s;
diff --git a/sources b/sources
index 13bc153..cd6e23e 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250313.tar.xz) = 09aeb1bdab2a8bb6081262e8a2a3141e0be93e03ac0895179de2b8d23e1307e0124ed157a8ddc6161fb61385384fe254100502bf08f35a187f50e9c70c677cc4
+SHA512 (gcc-15.0.1-20250329.tar.xz) = 5180ad4bef3acec74fa713043270eebc6504dec4812ec150caf46715486215a48c561c26cdad21a93b15bed9d7fe79839769e7afb0c4e657b5c37158e2d76d75
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From f4a22ed0935aa1f4a0a68b1a171fb112b3d00911 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 29 Mar 2025 19:16:28 +0100
Subject: [PATCH 32/71] 15.0.1-0.11
---
gcc.spec | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/gcc.spec b/gcc.spec
index 9f666cd..ec5e4d5 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1125,6 +1125,8 @@ enablelgo=
enablelada=
enablelobjc=
enableld=
+enablelm2=
+enablelcob=
%if %{build_objc}
enablelobjc=,objc,obj-c++
%endif
@@ -1141,7 +1143,7 @@ enableld=,d
enablelm2=,m2
%endif
%if %{build_cobol}
-enablelm2=,cobol
+enablelcob=,cobol
%endif
offloadtgts=
%if %{build_offload_nvptx}
@@ -1321,7 +1323,7 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
| sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \
XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
../configure --enable-bootstrap \
- --enable-languages=c,c++,fortran${enablelobjc}${enablelada}${enablelgo}${enableld}${enablelm2},lto \
+ --enable-languages=c,c++,fortran${enablelobjc}${enablelada}${enablelgo}${enableld}${enablelm2}${enablelcob},lto \
$CONFIGURE_OPTS
%ifarch sparc sparcv9 sparc64
@@ -2729,7 +2731,6 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2copyintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2mediaintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2minmaxintrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2roundingintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2satcvtintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/movrsintrin.h
%endif
From 82d154466dd372d35a11bc9718c7cc09f6cbad40 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 10 Apr 2025 09:23:14 +0200
Subject: [PATCH 33/71] 15.0.1-0.12
---
.gitignore | 2 ++
gcc.spec | 49 +++++++++++++++++++++----
gcc15-pr119291-1.patch | 81 ------------------------------------------
gcc15-pr119291-2.patch | 51 --------------------------
sources | 4 +--
5 files changed, 46 insertions(+), 141 deletions(-)
delete mode 100644 gcc15-pr119291-1.patch
delete mode 100644 gcc15-pr119291-2.patch
diff --git a/.gitignore b/.gitignore
index c887ae7..a126b84 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,5 @@
/gcc-15.0.1-20250301.tar.xz
/gcc-15.0.1-20250313.tar.xz
/gcc-15.0.1-20250329.tar.xz
+/gcc-15.0.1-20250410.tar.xz
+/newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz
diff --git a/gcc.spec b/gcc.spec
index ec5e4d5..d5797aa 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,12 +1,12 @@
-%global DATE 20250329
-%global gitrev 3d14ac28b1c0233636b21171759b471b39ecee35
+%global DATE 20250410
+%global gitrev 5f1acb12c814822a776336abcae1988c1e42858e
%global gcc_version 15.0.1
%global gcc_major 15
# 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 nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
-%global newlib_cygwin_gitrev 2e4db338ac125579d555aeee516e48588a628a16
+%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
%if 0%{?fedora:1}
%global _performance_build 1
@@ -149,7 +149,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.11%{?dist}
+Release: %{gcc_release}.12%{?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
@@ -305,9 +305,7 @@ Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr119006.patch
-Patch13: gcc15-pr119291-1.patch
-Patch14: gcc15-pr119291-2.patch
-Patch15: gcc15-pr119327.patch
+Patch13: gcc15-pr119327.patch
Patch50: isl-rh2155127.patch
@@ -559,6 +557,7 @@ This package contains static Modula-2 libraries.
%package gcobol
Summary: COBOL support
Requires: gcc = %{version}-%{release}
+Requires: gcc-c++ = %{version}-%{release}
Requires: libgcobol = %{version}-%{release}
Autoreq: true
@@ -3768,6 +3767,42 @@ end
%endif
%changelog
+* Thu Apr 10 2025 Jakub Jelinek 15.0.1-0.12
+- update from trunk
+ - PRs ada/119571, analyzer/113253, bootstrap/119680, c/78008, c/81831,
+ c/101440, c/114957, c/117689, c/118118, c/119173, c/119582, c/119612,
+ c++/60972, c++/64500, c++/90468, c++/99546, c++/106976, c++/109961,
+ c++/113925, c++/116285, c++/116960, c++/117336, c++/117530,
+ c++/117849, c++/118249, c++/118626, c++/118629, c++/118698,
+ c++/118982, c++/119303, c++/119383, c++/119387, c++/119401,
+ c++/119462, c++/119518, c++/119551, c++/119563, c++/119564,
+ c++/119574, c++/119608, c++/119652, cobol/119283, cobol/119295,
+ cobol/119364, cobol/119414, cobol/119521, cobol/119682, d/117002,
+ d/117832, d/118309, driver/58973, fortran/101602, fortran/119460,
+ fortran/119656, gcov-profile/119535, gcov-profile/119553,
+ gcov-profile/119618, ipa/119599, libfortran/119460, libstdc++/109162,
+ libstdc++/110498, libstdc++/114758, libstdc++/114945,
+ libstdc++/115046, libstdc++/119517, libstdc++/119545,
+ libstdc++/119550, libstdc++/119593, libstdc++/119620,
+ libstdc++/119642, libstdc++/119671, middle-end/78874,
+ middle-end/101018, middle-end/112589, middle-end/116595,
+ middle-end/118965, middle-end/119442, middle-end/119482,
+ middle-end/119537, middle-end/119541, middle-end/119559,
+ middle-end/119613, middle-end/119662, preprocessor/118674,
+ preprocessor/119391, rtl-optimization/119291, rtl-optimization/119594,
+ rtl-optimization/119672, rtl-optimization/119689, target/117759,
+ target/119308, target/119369, target/119473, target/119539,
+ target/119549, target/119556, target/119572, target/119573,
+ target/119645, target/119664, target/119678, testsuite/116398,
+ testsuite/118597, tree-optimization/80331, tree-optimization/87502,
+ tree-optimization/103827, tree-optimization/113281,
+ tree-optimization/118924, tree-optimization/119491,
+ tree-optimization/119493, tree-optimization/119532,
+ tree-optimization/119534, tree-optimization/119586,
+ tree-optimization/119614, tree-optimization/119616,
+ tree-optimization/119640, web/119227
+ - fix up LTO opts handling (##2356219, PR lto/119625)
+
* Sat Mar 29 2025 Jakub Jelinek 15.0.1-0.11
- update from trunk
- PRs ada/119265, ada/119440, analyzer/119278, bootstrap/119513, c/116545,
diff --git a/gcc15-pr119291-1.patch b/gcc15-pr119291-1.patch
deleted file mode 100644
index c9b37a0..0000000
--- a/gcc15-pr119291-1.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-2025-03-28 Jakub Jelinek
-
- PR rtl-optimization/119291
- * combine.cc (try_combine): For splitting of PARALLEL with
- 2 independent SETs into i2 and i3 sets check reg_used_between_p
- of the SET_DESTs rather than just modified_between_p.
-
- * gcc.c-torture/execute/pr119291.c: New test.
-
---- gcc/combine.cc.jj 2025-03-25 09:34:33.469102343 +0100
-+++ gcc/combine.cc 2025-03-27 09:50:15.768567383 +0100
-@@ -4012,18 +4012,18 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
- rtx set1 = XVECEXP (newpat, 0, 1);
-
- /* Normally, it doesn't matter which of the two is done first, but
-- one which uses any regs/memory set in between i2 and i3 can't
-- be first. The PARALLEL might also have been pre-existing in i3,
-- so we need to make sure that we won't wrongly hoist a SET to i2
-- that would conflict with a death note present in there, or would
-- have its dest modified between i2 and i3. */
-+ one which uses any regs/memory set or used in between i2 and i3
-+ can't be first. The PARALLEL might also have been pre-existing
-+ in i3, so we need to make sure that we won't wrongly hoist a SET
-+ to i2 that would conflict with a death note present in there, or
-+ would have its dest modified or used between i2 and i3. */
- if (!modified_between_p (SET_SRC (set1), i2, i3)
- && !(REG_P (SET_DEST (set1))
- && find_reg_note (i2, REG_DEAD, SET_DEST (set1)))
- && !(GET_CODE (SET_DEST (set1)) == SUBREG
- && find_reg_note (i2, REG_DEAD,
- SUBREG_REG (SET_DEST (set1))))
-- && !modified_between_p (SET_DEST (set1), i2, i3)
-+ && !reg_used_between_p (SET_DEST (set1), i2, i3)
- /* If I3 is a jump, ensure that set0 is a jump so that
- we do not create invalid RTL. */
- && (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx)
-@@ -4038,7 +4038,7 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
- && !(GET_CODE (SET_DEST (set0)) == SUBREG
- && find_reg_note (i2, REG_DEAD,
- SUBREG_REG (SET_DEST (set0))))
-- && !modified_between_p (SET_DEST (set0), i2, i3)
-+ && !reg_used_between_p (SET_DEST (set0), i2, i3)
- /* If I3 is a jump, ensure that set1 is a jump so that
- we do not create invalid RTL. */
- && (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx)
---- gcc/testsuite/gcc.c-torture/execute/pr119291.c.jj 2025-03-27 09:48:01.917407084 +0100
-+++ gcc/testsuite/gcc.c-torture/execute/pr119291.c 2025-03-27 09:47:48.020598094 +0100
-@@ -0,0 +1,33 @@
-+/* PR rtl-optimization/119291 */
-+
-+int a;
-+long c;
-+
-+__attribute__((noipa)) void
-+foo (int x)
-+{
-+ if (x != 0)
-+ __builtin_abort ();
-+ a = 42;
-+}
-+
-+int
-+main ()
-+{
-+ int e = 1;
-+lab:
-+ if (a < 2)
-+ {
-+ int b = e;
-+ _Bool d = a != 0;
-+ _Bool f = b != 0;
-+ unsigned long g = -(d & f);
-+ unsigned long h = c & g;
-+ unsigned long i = ~c;
-+ e = -(i & h);
-+ c = e != 0;
-+ a = ~e + b;
-+ foo (e);
-+ goto lab;
-+ }
-+}
diff --git a/gcc15-pr119291-2.patch b/gcc15-pr119291-2.patch
deleted file mode 100644
index 8e8e51f..0000000
--- a/gcc15-pr119291-2.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-2025-03-28 Jakub Jelinek
-
- * combine.cc (try_combine): Sets which satisfy set_noop_p can go
- to i2 unless i3 is a jump and the other set is not.
-
---- gcc/combine.cc.jj 2025-03-28 11:44:15.491458700 +0100
-+++ gcc/combine.cc 2025-03-28 12:11:49.505835983 +0100
-@@ -4017,13 +4017,14 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
- in i3, so we need to make sure that we won't wrongly hoist a SET
- to i2 that would conflict with a death note present in there, or
- would have its dest modified or used between i2 and i3. */
-- if (!modified_between_p (SET_SRC (set1), i2, i3)
-- && !(REG_P (SET_DEST (set1))
-- && find_reg_note (i2, REG_DEAD, SET_DEST (set1)))
-- && !(GET_CODE (SET_DEST (set1)) == SUBREG
-- && find_reg_note (i2, REG_DEAD,
-- SUBREG_REG (SET_DEST (set1))))
-- && !reg_used_between_p (SET_DEST (set1), i2, i3)
-+ if ((set_noop_p (set1)
-+ || (!modified_between_p (SET_SRC (set1), i2, i3)
-+ && !(REG_P (SET_DEST (set1))
-+ && find_reg_note (i2, REG_DEAD, SET_DEST (set1)))
-+ && !(GET_CODE (SET_DEST (set1)) == SUBREG
-+ && find_reg_note (i2, REG_DEAD,
-+ SUBREG_REG (SET_DEST (set1))))
-+ && !reg_used_between_p (SET_DEST (set1), i2, i3)))
- /* If I3 is a jump, ensure that set0 is a jump so that
- we do not create invalid RTL. */
- && (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx)
-@@ -4032,13 +4033,14 @@ try_combine (rtx_insn *i3, rtx_insn *i2,
- newi2pat = set1;
- newpat = set0;
- }
-- else if (!modified_between_p (SET_SRC (set0), i2, i3)
-- && !(REG_P (SET_DEST (set0))
-- && find_reg_note (i2, REG_DEAD, SET_DEST (set0)))
-- && !(GET_CODE (SET_DEST (set0)) == SUBREG
-- && find_reg_note (i2, REG_DEAD,
-- SUBREG_REG (SET_DEST (set0))))
-- && !reg_used_between_p (SET_DEST (set0), i2, i3)
-+ else if ((set_noop_p (set0)
-+ || (!modified_between_p (SET_SRC (set0), i2, i3)
-+ && !(REG_P (SET_DEST (set0))
-+ && find_reg_note (i2, REG_DEAD, SET_DEST (set0)))
-+ && !(GET_CODE (SET_DEST (set0)) == SUBREG
-+ && find_reg_note (i2, REG_DEAD,
-+ SUBREG_REG (SET_DEST (set0))))
-+ && !reg_used_between_p (SET_DEST (set0), i2, i3)))
- /* If I3 is a jump, ensure that set1 is a jump so that
- we do not create invalid RTL. */
- && (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx)
diff --git a/sources b/sources
index cd6e23e..af001ca 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250329.tar.xz) = 5180ad4bef3acec74fa713043270eebc6504dec4812ec150caf46715486215a48c561c26cdad21a93b15bed9d7fe79839769e7afb0c4e657b5c37158e2d76d75
+SHA512 (gcc-15.0.1-20250410.tar.xz) = 5123e10184cc095ba8f7ed563b8485047b1588e75bd50d2a9247011f258309579539e97b5b72a6c39e01f6643f231de8620c528af101b113a816ad8a49731ba6
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
-SHA512 (newlib-cygwin-2e4db338ac125579d555aeee516e48588a628a16.tar.xz) = 839bb0c45b5023a83e1a5bf8773050af46bd075754502fc49a62ab860144c9a6bdc0a7d52e6c7ded87ba13ce58192755dd3f83333bc7c61ffb184fef4142a808
+SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 222db06f798a38bc656d1d3dd4c1f511f1ddd316 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 17 Apr 2025 20:40:55 +0200
Subject: [PATCH 34/71] 15.0.1-0.13
---
.gitignore | 1 +
gcc.spec | 40 +++++++++++++++++++++++++++++++++-------
sources | 2 +-
3 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/.gitignore b/.gitignore
index a126b84..81464dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@
/gcc-15.0.1-20250329.tar.xz
/gcc-15.0.1-20250410.tar.xz
/newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz
+/gcc-15.0.1-20250417.tar.xz
diff --git a/gcc.spec b/gcc.spec
index d5797aa..60ce465 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250410
-%global gitrev 5f1acb12c814822a776336abcae1988c1e42858e
+%global DATE 20250417
+%global gitrev dd2ccfe5989486cafb7f6108ff0c4e9f5a93f5a1
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -149,7 +149,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.12%{?dist}
+Release: %{gcc_release}.13%{?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
@@ -1415,10 +1415,9 @@ done)
done)
%endif
%if %{build_cobol}
-(cd gcc/cobol; for i in ChangeLog* LICENSE; do
+(cd gcc/cobol; for i in ChangeLog*; do
cp -p $i ../../rpm.doc/gcobol/$i.gcobol
-done
-cp -p LICENSE ../../rpm.doc/libgcobol/$i.libgcobol)
+done)
(cd libgcobol; for i in ChangeLog*; do
cp -p $i ../rpm.doc/libgcobol/$i.libgcobol
done)
@@ -3279,7 +3278,7 @@ end
%{_prefix}/bin/gcobol
%{_prefix}/bin/gcobc
%{_mandir}/man1/gcobol.1*
-%{_mandir}/man3/gcobol.3*
+%{_mandir}/man3/gcobol-io.3*
%dir %{_prefix}/libexec/gcc
%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
@@ -3767,6 +3766,33 @@ end
%endif
%changelog
+* Thu Apr 17 2025 Jakub Jelinek 15.0.1-0.13
+- update from trunk and releases/gcc-14 branch
+ - PRs ada/119643, c/88382, c/119717, c++/99214, c++/101180, c++/106618,
+ c++/111075, c++/112288, c++/113360, c++/113835, c++/114772,
+ c++/114970, c++/115639, c++/116416, c++/116954, c++/119175,
+ c++/119345, c++/119687, c++/119692, c++/119755, c++/119807,
+ cobol/119217, cobol/119302, cobol/119694, cobol/119759, cobol/119776,
+ cobol/119777, d/109023, d/119758, d/119761, d/119799, d/119817,
+ d/119826, driver/90465, driver/119727, fortran/106948, fortran/119669,
+ ipa/113203, ipa/119318, ipa/119803, libfortran/119502, libgcc/101075,
+ libgcc/119796, libgomp/119849, libstdc++/21334, libstdc++/119725,
+ libstdc++/119748, libstdc++/119840, lto/119792, middle-end/14708,
+ middle-end/105548, middle-end/119706, middle-end/119808,
+ modula2/119735, modula2/119779, rtl-optimization/118502,
+ rtl-optimization/119785, rust/119341, rust/119342, sanitizer/119801,
+ target/42683, target/97106, target/97585, target/106445,
+ target/108134, target/113633, target/116827, target/118794,
+ target/119298, target/119386, target/119533, target/119547,
+ target/119673, target/119784, target/119834, testsuite/117706,
+ translation/119684, tree-optimization/71094, tree-optimization/87909,
+ tree-optimization/112822, tree-optimization/116093,
+ tree-optimization/118476, tree-optimization/119351,
+ tree-optimization/119399, tree-optimization/119706,
+ tree-optimization/119707, tree-optimization/119718,
+ tree-optimization/119722, tree-optimization/119757,
+ tree-optimization/119778
+
* Thu Apr 10 2025 Jakub Jelinek 15.0.1-0.12
- update from trunk
- PRs ada/119571, analyzer/113253, bootstrap/119680, c/78008, c/81831,
diff --git a/sources b/sources
index af001ca..e1d7c12 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250410.tar.xz) = 5123e10184cc095ba8f7ed563b8485047b1588e75bd50d2a9247011f258309579539e97b5b72a6c39e01f6643f231de8620c528af101b113a816ad8a49731ba6
+SHA512 (gcc-15.0.1-20250417.tar.xz) = 97ec080cb488806be48ebfac6f712ea0019376f6ab9cb9be8055d65b23bd6b4436994f34e9647cfe926829bf284e33d631b7f8ae7881e7e88dcab3e04b7869d0
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 976f3a74410cc70677a969b7c5838d997229c294 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Fri, 18 Apr 2025 20:33:24 +0200
Subject: [PATCH 35/71] 15.0.1-0.14
---
.gitignore | 1 +
gcc.spec | 11 ++++++++---
sources | 2 +-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/.gitignore b/.gitignore
index 81464dd..404e9d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
/gcc-15.0.1-20250410.tar.xz
/newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz
/gcc-15.0.1-20250417.tar.xz
+/gcc-15.0.1-20250418.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 60ce465..ad52cb5 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250417
-%global gitrev dd2ccfe5989486cafb7f6108ff0c4e9f5a93f5a1
+%global DATE 20250418
+%global gitrev 8f87d3d9a9a578fdc32786927721e4598ca115a3
%global gcc_version 15.0.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -149,7 +149,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.13%{?dist}
+Release: %{gcc_release}.14%{?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
@@ -3766,6 +3766,11 @@ end
%endif
%changelog
+* Fri Apr 18 2025 Jakub Jelinek 15.0.1-0.14
+- update from releases/gcc-14 branch
+ - GCC 15.1.0-rc1
+ - PRs tree-optimization/119858
+
* Thu Apr 17 2025 Jakub Jelinek 15.0.1-0.13
- update from trunk and releases/gcc-14 branch
- PRs ada/119643, c/88382, c/119717, c++/99214, c++/101180, c++/106618,
diff --git a/sources b/sources
index e1d7c12..545945e 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250417.tar.xz) = 97ec080cb488806be48ebfac6f712ea0019376f6ab9cb9be8055d65b23bd6b4436994f34e9647cfe926829bf284e33d631b7f8ae7881e7e88dcab3e04b7869d0
+SHA512 (gcc-15.0.1-20250418.tar.xz) = 6d3b447993f28d21cac3e3c191d0482ba8d2bc1e550b304f805259eecb67f3ea0b9cdf029afe5e6e7abb9abea88c420d15e66334c9aae760427341ffed72d9f9
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 09b578c3e50a419c723566c4ad27a23783364406 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Fri, 25 Apr 2025 13:49:40 +0200
Subject: [PATCH 36/71] 15.1.1-1
---
.gitignore | 1 +
gcc.spec | 16 ++++++++-----
gcc15-libstdc++-docs.patch | 4 ++--
gcc15-pr119327.patch | 47 --------------------------------------
sources | 2 +-
5 files changed, 14 insertions(+), 56 deletions(-)
delete mode 100644 gcc15-pr119327.patch
diff --git a/.gitignore b/.gitignore
index 404e9d5..d980d51 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
/newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz
/gcc-15.0.1-20250417.tar.xz
/gcc-15.0.1-20250418.tar.xz
+/gcc-15.1.1-20250425.tar.xz
diff --git a/gcc.spec b/gcc.spec
index ad52cb5..3231511 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20250418
-%global gitrev 8f87d3d9a9a578fdc32786927721e4598ca115a3
-%global gcc_version 15.0.1
+%global DATE 20250425
+%global gitrev ac84ab7066626410dfe17804c7abd090e875ba3b
+%global gcc_version 15.1.1
%global gcc_major 15
# 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 87ce9dc5999e5fca2e1d3478a30888d9864c9804
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
@@ -149,7 +149,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.14%{?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
@@ -305,7 +305,6 @@ Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr119006.patch
-Patch13: gcc15-pr119327.patch
Patch50: isl-rh2155127.patch
@@ -3766,6 +3765,11 @@ end
%endif
%changelog
+* Fri Apr 25 2025 Jakub Jelinek 15.1.1-1
+- update from releases/gcc-15 branch
+ - GCC 15.1 release
+ - PRs fortran/119836, target/119327, target/119873, tree-optimization/118407
+
* Fri Apr 18 2025 Jakub Jelinek 15.0.1-0.14
- update from releases/gcc-14 branch
- GCC 15.1.0-rc1
diff --git a/gcc15-libstdc++-docs.patch b/gcc15-libstdc++-docs.patch
index 829bb97..15bb496 100644
--- a/gcc15-libstdc++-docs.patch
+++ b/gcc15-libstdc++-docs.patch
@@ -4,7 +4,7 @@
FSF
-+ Release 15.0.1
++ Release 15.1.1
+
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
@@ -17,7 +17,7 @@
- The API documentation, rendered into HTML, can be viewed online
+ The API documentation, rendered into HTML, can be viewed locally
-+ for the 15.0.1 release,
++ for the 15.1.1 release,
+ online
for each GCC release
and
diff --git a/gcc15-pr119327.patch b/gcc15-pr119327.patch
deleted file mode 100644
index a9fdd77..0000000
--- a/gcc15-pr119327.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-2025-03-26 Jakub Jelinek
-
- PR target/119327
- * config/rs6000/rs6000.cc (rs6000_can_inline_p): Ignore also
- OPTION_MASK_SAVE_TOC_INDIRECT differences.
-
- * g++.dg/opt/pr119327.C: New test.
-
---- gcc/config/rs6000/rs6000.cc.jj 2025-03-18 14:56:37.990023768 +0100
-+++ gcc/config/rs6000/rs6000.cc 2025-03-25 13:21:33.174568536 +0100
-@@ -25765,10 +25765,13 @@ rs6000_can_inline_p (tree caller, tree c
- }
- }
-
-- /* Ignore -mpower8-fusion and -mpower10-fusion options for inlining
-- purposes. */
-- callee_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION);
-- explicit_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION);
-+ /* Ignore -mpower8-fusion, -mpower10-fusion and -msave-toc-indirect options
-+ for inlining purposes. */
-+ HOST_WIDE_INT ignored_isas = (OPTION_MASK_P8_FUSION
-+ | OPTION_MASK_P10_FUSION
-+ | OPTION_MASK_SAVE_TOC_INDIRECT);
-+ callee_isa &= ~ignored_isas;
-+ explicit_isa &= ~ignored_isas;
-
- /* The callee's options must be a subset of the caller's options, i.e.
- a vsx function may inline an altivec function, but a no-vsx function
---- gcc/testsuite/g++.dg/opt/pr119327.C.jj 2025-03-25 13:24:45.129988649 +0100
-+++ gcc/testsuite/g++.dg/opt/pr119327.C 2025-03-25 13:25:09.513661266 +0100
-@@ -0,0 +1,16 @@
-+// PR target/119327
-+// { dg-do compile { target c++11 } }
-+// { dg-options "-Os" }
-+
-+#pragma GCC optimize "fp-contract=off"
-+
-+template
-+void
-+foo (T f)
-+{
-+ f ();
-+}
-+
-+struct S {
-+ S () { [] {}; foo ([] __attribute__((always_inline)) {}); }
-+} s;
diff --git a/sources b/sources
index 545945e..f005e22 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.0.1-20250418.tar.xz) = 6d3b447993f28d21cac3e3c191d0482ba8d2bc1e550b304f805259eecb67f3ea0b9cdf029afe5e6e7abb9abea88c420d15e66334c9aae760427341ffed72d9f9
+SHA512 (gcc-15.1.1-20250425.tar.xz) = 008506c6bc101f814e8ea8f563931696e2c8e51e2bd6c9bd7614b4a512d25e7b8d1cff41ccc8f8d4424d683b660c5870f35c2e69022e0c75f85a0c251c1e23b3
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 789e812095a434506b600634b38d9051322ee969 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Wed, 21 May 2025 14:53:58 +0200
Subject: [PATCH 37/71] 15.1.1-2
---
.gitignore | 1 +
gcc.spec | 26 +++++++++++++++++++++++---
sources | 2 +-
3 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/.gitignore b/.gitignore
index d980d51..62a4252 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,4 @@
/gcc-15.0.1-20250417.tar.xz
/gcc-15.0.1-20250418.tar.xz
/gcc-15.1.1-20250425.tar.xz
+/gcc-15.1.1-20250521.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 3231511..ae42dfb 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20250425
-%global gitrev ac84ab7066626410dfe17804c7abd090e875ba3b
+%global DATE 20250521
+%global gitrev b9def1721b12cae307c1a1ebc49030fce6531dfa
%global gcc_version 15.1.1
%global gcc_major 15
# 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 1
+%global gcc_release 2
%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
@@ -3765,6 +3765,26 @@ end
%endif
%changelog
+* Wed May 21 2025 Jakub Jelinek 15.1.1-2
+- update from releases/gcc-15 branch
+ - PRs ada/112958, ada/120104, c/120057, c++/119863, c++/119864, c++/119938,
+ c++/119939, c++/119981, c++/119996, c++/120012, c++/120013,
+ c++/120023, c++/120125, c++/120161, c++/120350, fortran/102891,
+ fortran/102900, fortran/119928, fortran/119986, fortran/120049,
+ fortran/120107, fortran/120139, fortran/120163, fortran/120179,
+ fortran/120191, ipa/119852, ipa/119973, ipa/120006, ipa/120146,
+ libfortran/120152, libfortran/120153, libfortran/120158,
+ libfortran/120196, libstdc++/118260, libstdc++/119427,
+ libstdc++/119714, libstdc++/120029, libstdc++/120114,
+ libstdc++/120159, libstdc++/120187, libstdc++/120190,
+ libstdc++/120198, libstdc++/120293, modula2/115276, modula2/119914,
+ modula2/119915, modula2/120117, modula2/120188, preprocessor/116047,
+ preprocessor/120061, target/119610, testsuite/119909,
+ tree-optimization/111873, tree-optimization/119712,
+ tree-optimization/120043, tree-optimization/120048,
+ tree-optimization/120074, tree-optimization/120089,
+ tree-optimization/120143, tree-optimization/120211
+
* Fri Apr 25 2025 Jakub Jelinek 15.1.1-1
- update from releases/gcc-15 branch
- GCC 15.1 release
diff --git a/sources b/sources
index f005e22..5bf974f 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.1.1-20250425.tar.xz) = 008506c6bc101f814e8ea8f563931696e2c8e51e2bd6c9bd7614b4a512d25e7b8d1cff41ccc8f8d4424d683b660c5870f35c2e69022e0c75f85a0c251c1e23b3
+SHA512 (gcc-15.1.1-20250521.tar.xz) = 86b06902e10aa6eba4ccbe54e97fee17838e21484e4f6d4aef2e93d0687b04e82f00655828ac0233f4026cd0d2df08bbdfe7dc2eeafc8908cab183584d2fb8ee
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 81055b7d4d6bf3e4f7d09e4ff13c7fdbb42b6bd0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?=
Date: Thu, 22 May 2025 10:51:03 +0200
Subject: [PATCH 38/71] Downstream tests moved to CentOS
---
plans/ci.fmf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plans/ci.fmf b/plans/ci.fmf
index b6a344d..b661134 100644
--- a/plans/ci.fmf
+++ b/plans/ci.fmf
@@ -1,7 +1,7 @@
summary: CI Gating Plan
discover:
how: fmf
- url: https://src.fedoraproject.org/tests/gcc.git
+ url: https://gitlab.com/redhat/centos-stream/tests/gcc.git
filter: 'tag: Fedora-CI-gating'
execute:
how: tmt
From fcc453986e9f2c0056211aa0cbb2e761bc3207e3 Mon Sep 17 00:00:00 2001
From: Siddhesh Poyarekar
Date: Fri, 20 Jun 2025 06:25:45 -0400
Subject: [PATCH 39/71] Update bug reporting URL
Use %dist_bug_report_url instead of the hardcoded URL.
---
gcc.spec | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/gcc.spec b/gcc.spec
index ae42dfb..aa3f48b 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -26,6 +26,13 @@
%if 0%{?__brp_strip_lto:1}
%global __brp_strip_lto %{__brp_strip_lto} || :
%endif
+%if 0%{?rhel} > 0
+%define bugurl https://issues.redhat.com
+%else
+%define bugurl https://bugzilla.redhat.com/bugzilla
+%endif
+%{!?dist_bug_report_url: %global dist_bug_report_url %bugurl}
+
%if 0%{?fedora} < 32 && 0%{?rhel} < 8
%global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
%else
@@ -1042,7 +1049,7 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
--target nvptx-none --enable-as-accelerator-for=%{gcc_target_platform} \
--enable-languages=c,c++,fortran,lto \
--prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
- --with-bugurl=http://bugzilla.redhat.com/bugzilla \
+ --with-bugurl=%dist_bug_report_url \
--enable-checking=release --with-system-zlib \
--with-gcc-major-version-only --without-isl
make %{?_smp_mflags}
@@ -1078,7 +1085,7 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
--target amdgcn-amdhsa --enable-as-accelerator-for=%{gcc_target_platform} \
--enable-languages=c,c++,fortran,lto \
--prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
- --with-bugurl=http://bugzilla.redhat.com/bugzilla \
+ --with-bugurl=%dist_bug_report_url \
--enable-checking=release --with-system-zlib \
--with-gcc-major-version-only --without-isl --disable-libquadmath
make %{?_smp_mflags}
@@ -1152,7 +1159,7 @@ offloadtgts=${offloadtgts:+${offloadtgts},}amdgcn-amdhsa
%endif
CONFIGURE_OPTS="\
--prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
- --with-bugurl=http://bugzilla.redhat.com/bugzilla \
+ --with-bugurl=%dist_bug_report_url \
--enable-shared --enable-threads=posix --enable-checking=release \
%ifarch ppc64le
--enable-targets=powerpcle-linux \
From 017683460653027c00aca7fa13b37030c232a859 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Mon, 7 Jul 2025 12:07:31 +0200
Subject: [PATCH 40/71] 15.1.1-3
---
.gitignore | 1 +
gcc.spec | 38 +++++++++++++---
gcc15-pr120837.patch | 103 +++++++++++++++++++++++++++++++++++++++++++
sources | 2 +-
4 files changed, 138 insertions(+), 6 deletions(-)
create mode 100644 gcc15-pr120837.patch
diff --git a/.gitignore b/.gitignore
index 62a4252..011212c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
/gcc-15.0.1-20250418.tar.xz
/gcc-15.1.1-20250425.tar.xz
/gcc-15.1.1-20250521.tar.xz
+/gcc-15.1.1-20250707.tar.xz
diff --git a/gcc.spec b/gcc.spec
index ae42dfb..b5422ab 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20250521
-%global gitrev b9def1721b12cae307c1a1ebc49030fce6531dfa
+%global DATE 20250707
+%global gitrev c138e88e24a87a165b741b7c6e3452a430aca820
%global gcc_version 15.1.1
%global gcc_major 15
# 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 2
+%global gcc_release 3
%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
@@ -305,6 +305,7 @@ Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr119006.patch
+Patch13: gcc15-pr120837.patch
Patch50: isl-rh2155127.patch
@@ -2432,9 +2433,9 @@ cd obj-%{gcc_target_platform}
# run the tests.
LC_ALL=C make %{?_smp_mflags} -k check ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++ \
%if 0%{?fedora} >= 20 || 0%{?rhel} > 7
- RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector-strong}'" || :
+ RUNTESTFLAGS="--target_board=unix/'{-foffload=disable,-fstack-protector-strong/-foffload=disable}'" || :
%else
- RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector}'" || :
+ RUNTESTFLAGS="--target_board=unix/'{-foffload=disable,-fstack-protector/-foffload=disable}'" || :
%endif
%if !%{build_annobin_plugin}
if [ -f %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/plugin/annobin.so ]; then
@@ -3765,6 +3766,33 @@ end
%endif
%changelog
+* Mon Jul 7 2025 Jakub Jelinek 15.1.1-3
+- update from releases/gcc-15 branch
+ - PRs ada/120665, ada/120705, ada/120854, c/120180, c++/116064, c++/120123,
+ c++/120363, c++/120413, c++/120414, c++/120471, c++/120502,
+ c++/120555, c++/120575, c++/120684, c++/120940, fortran/51961,
+ fortran/85750, fortran/99838, fortran/101735, fortran/102599,
+ fortran/114022, fortran/119856, fortran/119948, fortran/120193,
+ fortran/120355, fortran/120483, fortran/120711, fortran/120784,
+ ipa/120295, libfortran/119856, libstdc++/99832, libstdc++/120367,
+ libstdc++/120432, libstdc++/120465, libstdc++/120548,
+ libstdc++/120625, libstdc++/120648, libstdc++/120650,
+ libstdc++/120931, libstdc++/120934, middle-end/118694,
+ middle-end/120369, middle-end/120547, middle-end/120608,
+ middle-end/120631, rtl-optimization/116389, rtl-optimization/120050,
+ rtl-optimization/120182, rtl-optimization/120347,
+ rtl-optimization/120423, rtl-optimization/120550,
+ rtl-optimization/120795, target/86772, target/119971, target/120042,
+ target/120441, target/120442, target/120480, target/120624,
+ testsuite/52641, testsuite/120082, testsuite/120919,
+ tree-optimization/116352, tree-optimization/119960,
+ tree-optimization/120003, tree-optimization/120341,
+ tree-optimization/120357, tree-optimization/120638,
+ tree-optimization/120654, tree-optimization/120677,
+ tree-optimization/120729, tree-optimization/120927
+- fix up FE lowering of pointer arith (PR c/120837)
+- perform %%check with -foffload=disable flag
+
* Wed May 21 2025 Jakub Jelinek 15.1.1-2
- update from releases/gcc-15 branch
- PRs ada/112958, ada/120104, c/120057, c++/119863, c++/119864, c++/119938,
diff --git a/gcc15-pr120837.patch b/gcc15-pr120837.patch
new file mode 100644
index 0000000..463aa21
--- /dev/null
+++ b/gcc15-pr120837.patch
@@ -0,0 +1,103 @@
+2025-07-04 Jakub Jelinek
+
+ PR c/120837
+ * c-common.cc (pointer_int_sum): Rewrite the intop PLUS_EXPR or
+ MINUS_EXPR optimization into extension of both intop operands,
+ their separate multiplication and then addition/subtraction followed
+ by rest of pointer_int_sum handling after the multiplication.
+
+ * gcc.dg/ubsan/pr120837.c: New test.
+
+--- gcc/c-family/c-common.cc
++++ gcc/c-family/c-common.cc
+@@ -3438,20 +3438,41 @@ pointer_int_sum (location_t loc, enum tree_code resultcode,
+ an overflow error if the constant is negative but INTOP is not. */
+ && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (intop))
+ || (TYPE_PRECISION (TREE_TYPE (intop))
+- == TYPE_PRECISION (TREE_TYPE (ptrop)))))
+- {
+- enum tree_code subcode = resultcode;
+- tree int_type = TREE_TYPE (intop);
+- if (TREE_CODE (intop) == MINUS_EXPR)
+- subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
+- /* Convert both subexpression types to the type of intop,
+- because weird cases involving pointer arithmetic
+- can result in a sum or difference with different type args. */
+- ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
+- subcode, ptrop,
+- convert (int_type, TREE_OPERAND (intop, 1)),
+- true);
+- intop = convert (int_type, TREE_OPERAND (intop, 0));
++ == TYPE_PRECISION (TREE_TYPE (ptrop))))
++ && TYPE_PRECISION (TREE_TYPE (intop)) <= TYPE_PRECISION (sizetype))
++ {
++ tree intop0 = TREE_OPERAND (intop, 0);
++ tree intop1 = TREE_OPERAND (intop, 1);
++ if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
++ || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
++ {
++ tree optype = c_common_type_for_size (TYPE_PRECISION (sizetype),
++ TYPE_UNSIGNED (sizetype));
++ intop0 = convert (optype, intop0);
++ intop1 = convert (optype, intop1);
++ }
++ tree t = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (intop0), intop0,
++ convert (TREE_TYPE (intop0), size_exp));
++ intop0 = convert (sizetype, t);
++ if (TREE_OVERFLOW_P (intop0) && !TREE_OVERFLOW (t))
++ intop0 = wide_int_to_tree (TREE_TYPE (intop0), wi::to_wide (intop0));
++ t = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (intop1), intop1,
++ convert (TREE_TYPE (intop1), size_exp));
++ intop1 = convert (sizetype, t);
++ if (TREE_OVERFLOW_P (intop1) && !TREE_OVERFLOW (t))
++ intop1 = wide_int_to_tree (TREE_TYPE (intop1), wi::to_wide (intop1));
++ intop = build_binary_op (EXPR_LOCATION (intop), TREE_CODE (intop),
++ intop0, intop1, true);
++
++ /* Create the sum or difference. */
++ if (resultcode == MINUS_EXPR)
++ intop = fold_build1_loc (loc, NEGATE_EXPR, sizetype, intop);
++
++ ret = fold_build_pointer_plus_loc (loc, ptrop, intop);
++
++ fold_undefer_and_ignore_overflow_warnings ();
++
++ return ret;
+ }
+
+ /* Convert the integer argument to a type the same size as sizetype
+--- gcc/testsuite/gcc.dg/ubsan/pr120837.c
++++ gcc/testsuite/gcc.dg/ubsan/pr120837.c
+@@ -0,0 +1,32 @@
++/* PR c/120837 */
++/* { dg-do run } */
++/* { dg-options "-O1 -fsanitize=undefined -fno-sanitize-recover=undefined" } */
++
++[[gnu::noipa]] void
++bar (void **x, void **y)
++{
++ x[0] = 0;
++ x[1] = 0;
++ x[2] = 0;
++ y[0] = 0;
++ y[1] = 0;
++ y[2] = 0;
++ y[3] = 0;
++ y[4] = 0;
++}
++
++[[gnu::noipa]] void *
++foo (int x, int y)
++{
++ void *a[3];
++ void *b[5];
++ bar (a, b);
++ return (x > y ? b : a)[y - 1];
++}
++
++int
++main ()
++{
++ if (foo (2, 1) != 0)
++ __builtin_abort ();
++}
diff --git a/sources b/sources
index 5bf974f..e064de8 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.1.1-20250521.tar.xz) = 86b06902e10aa6eba4ccbe54e97fee17838e21484e4f6d4aef2e93d0687b04e82f00655828ac0233f4026cd0d2df08bbdfe7dc2eeafc8908cab183584d2fb8ee
+SHA512 (gcc-15.1.1-20250707.tar.xz) = d94e6a048ae6e37e3bea98f8628eafa145e2b35b96edddb82d84b2ea830d5698b2790ca4e9e36b56d9aaeb66b0a7db3775703aa49e2dcf587384274f77d6d801
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From 17636a65a5dd3e8a6b72bd9f524ceb6c0b1a5f55 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Fri, 18 Jul 2025 12:25:58 +0200
Subject: [PATCH 41/71] 15.1.1-4
---
.gitignore | 1 +
gcc.spec | 24 ++++++++--
gcc15-pr120837.patch | 103 -------------------------------------------
sources | 2 +-
4 files changed, 22 insertions(+), 108 deletions(-)
delete mode 100644 gcc15-pr120837.patch
diff --git a/.gitignore b/.gitignore
index 011212c..61466da 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@
/gcc-15.1.1-20250425.tar.xz
/gcc-15.1.1-20250521.tar.xz
/gcc-15.1.1-20250707.tar.xz
+/gcc-15.1.1-20250718.tar.xz
diff --git a/gcc.spec b/gcc.spec
index b5422ab..e5dfbcb 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20250707
-%global gitrev c138e88e24a87a165b741b7c6e3452a430aca820
+%global DATE 20250718
+%global gitrev ef203c5a397a3bcad27a7bb73210f3fbb48782b3
%global gcc_version 15.1.1
%global gcc_major 15
# 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 3
+%global gcc_release 4
%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
@@ -305,7 +305,6 @@ Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr119006.patch
-Patch13: gcc15-pr120837.patch
Patch50: isl-rh2155127.patch
@@ -3766,6 +3765,23 @@ end
%endif
%changelog
+* Fri Jul 18 Jakub Jelinek 15.1.1-4
+- update from releases/gcc-15 branch
+ - PRs ada/121056, c++/87097, c++/120569, c++/120628, c++/120954,
+ fortran/104428, fortran/120637, fortran/120843, fortran/120847,
+ fortran/121060, ipa/121023, libstdc++/118681, libstdc++/119754,
+ libstdc++/120997, middle-end/120709, modula2/117203, modula2/119650,
+ modula2/120253, modula2/120389, modula2/120474, modula2/120497,
+ modula2/120542, modula2/120606, modula2/120673, modula2/120731,
+ modula2/120912, rtl-optimization/120242, rtl-optimization/120627,
+ rtl-optimization/120736, rtl-optimization/120813, target/118241,
+ target/120356, target/120807, target/120908, target/120995,
+ target/120999, tree-optimization/118669, tree-optimization/120358,
+ tree-optimization/120780, tree-optimization/120817,
+ tree-optimization/120924, tree-optimization/120944,
+ tree-optimization/121035, tree-optimization/121049,
+ tree-optimization/121059, tree-optimization/121131
+
* Mon Jul 7 2025 Jakub Jelinek 15.1.1-3
- update from releases/gcc-15 branch
- PRs ada/120665, ada/120705, ada/120854, c/120180, c++/116064, c++/120123,
diff --git a/gcc15-pr120837.patch b/gcc15-pr120837.patch
deleted file mode 100644
index 463aa21..0000000
--- a/gcc15-pr120837.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-2025-07-04 Jakub Jelinek
-
- PR c/120837
- * c-common.cc (pointer_int_sum): Rewrite the intop PLUS_EXPR or
- MINUS_EXPR optimization into extension of both intop operands,
- their separate multiplication and then addition/subtraction followed
- by rest of pointer_int_sum handling after the multiplication.
-
- * gcc.dg/ubsan/pr120837.c: New test.
-
---- gcc/c-family/c-common.cc
-+++ gcc/c-family/c-common.cc
-@@ -3438,20 +3438,41 @@ pointer_int_sum (location_t loc, enum tree_code resultcode,
- an overflow error if the constant is negative but INTOP is not. */
- && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (intop))
- || (TYPE_PRECISION (TREE_TYPE (intop))
-- == TYPE_PRECISION (TREE_TYPE (ptrop)))))
-- {
-- enum tree_code subcode = resultcode;
-- tree int_type = TREE_TYPE (intop);
-- if (TREE_CODE (intop) == MINUS_EXPR)
-- subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
-- /* Convert both subexpression types to the type of intop,
-- because weird cases involving pointer arithmetic
-- can result in a sum or difference with different type args. */
-- ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
-- subcode, ptrop,
-- convert (int_type, TREE_OPERAND (intop, 1)),
-- true);
-- intop = convert (int_type, TREE_OPERAND (intop, 0));
-+ == TYPE_PRECISION (TREE_TYPE (ptrop))))
-+ && TYPE_PRECISION (TREE_TYPE (intop)) <= TYPE_PRECISION (sizetype))
-+ {
-+ tree intop0 = TREE_OPERAND (intop, 0);
-+ tree intop1 = TREE_OPERAND (intop, 1);
-+ if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
-+ || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
-+ {
-+ tree optype = c_common_type_for_size (TYPE_PRECISION (sizetype),
-+ TYPE_UNSIGNED (sizetype));
-+ intop0 = convert (optype, intop0);
-+ intop1 = convert (optype, intop1);
-+ }
-+ tree t = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (intop0), intop0,
-+ convert (TREE_TYPE (intop0), size_exp));
-+ intop0 = convert (sizetype, t);
-+ if (TREE_OVERFLOW_P (intop0) && !TREE_OVERFLOW (t))
-+ intop0 = wide_int_to_tree (TREE_TYPE (intop0), wi::to_wide (intop0));
-+ t = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (intop1), intop1,
-+ convert (TREE_TYPE (intop1), size_exp));
-+ intop1 = convert (sizetype, t);
-+ if (TREE_OVERFLOW_P (intop1) && !TREE_OVERFLOW (t))
-+ intop1 = wide_int_to_tree (TREE_TYPE (intop1), wi::to_wide (intop1));
-+ intop = build_binary_op (EXPR_LOCATION (intop), TREE_CODE (intop),
-+ intop0, intop1, true);
-+
-+ /* Create the sum or difference. */
-+ if (resultcode == MINUS_EXPR)
-+ intop = fold_build1_loc (loc, NEGATE_EXPR, sizetype, intop);
-+
-+ ret = fold_build_pointer_plus_loc (loc, ptrop, intop);
-+
-+ fold_undefer_and_ignore_overflow_warnings ();
-+
-+ return ret;
- }
-
- /* Convert the integer argument to a type the same size as sizetype
---- gcc/testsuite/gcc.dg/ubsan/pr120837.c
-+++ gcc/testsuite/gcc.dg/ubsan/pr120837.c
-@@ -0,0 +1,32 @@
-+/* PR c/120837 */
-+/* { dg-do run } */
-+/* { dg-options "-O1 -fsanitize=undefined -fno-sanitize-recover=undefined" } */
-+
-+[[gnu::noipa]] void
-+bar (void **x, void **y)
-+{
-+ x[0] = 0;
-+ x[1] = 0;
-+ x[2] = 0;
-+ y[0] = 0;
-+ y[1] = 0;
-+ y[2] = 0;
-+ y[3] = 0;
-+ y[4] = 0;
-+}
-+
-+[[gnu::noipa]] void *
-+foo (int x, int y)
-+{
-+ void *a[3];
-+ void *b[5];
-+ bar (a, b);
-+ return (x > y ? b : a)[y - 1];
-+}
-+
-+int
-+main ()
-+{
-+ if (foo (2, 1) != 0)
-+ __builtin_abort ();
-+}
diff --git a/sources b/sources
index e064de8..166e73f 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.1.1-20250707.tar.xz) = d94e6a048ae6e37e3bea98f8628eafa145e2b35b96edddb82d84b2ea830d5698b2790ca4e9e36b56d9aaeb66b0a7db3775703aa49e2dcf587384274f77d6d801
+SHA512 (gcc-15.1.1-20250718.tar.xz) = 86216a778b63b95c502dd0649223a9161091d2f10c66f3bee242a3c690d6ea66ddd1063bdbd5ed934264b4f2136b4bb5c7d6d63769870fa49881627172893937
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From a6bc1b37eca3a3963bd4bf9129d54b4cf5ed95fe Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 19 Jul 2025 15:36:22 +0200
Subject: [PATCH 42/71] 15.1.1-5
---
.gitignore | 1 +
gcc.spec | 12 ++++++++----
sources | 2 +-
3 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/.gitignore b/.gitignore
index 61466da..b6772e9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,4 @@
/gcc-15.1.1-20250521.tar.xz
/gcc-15.1.1-20250707.tar.xz
/gcc-15.1.1-20250718.tar.xz
+/gcc-15.1.1-20250719.tar.xz
diff --git a/gcc.spec b/gcc.spec
index e5dfbcb..036749c 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20250718
-%global gitrev ef203c5a397a3bcad27a7bb73210f3fbb48782b3
+%global DATE 20250719
+%global gitrev bb8f920b2f550ec98041230db4bae5837f749371
%global gcc_version 15.1.1
%global gcc_major 15
# 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 4
+%global gcc_release 5
%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
@@ -3765,7 +3765,11 @@ end
%endif
%changelog
-* Fri Jul 18 Jakub Jelinek 15.1.1-4
+* Sat Jul 19 2025 Jakub Jelinek 15.1.1-5
+- update from releases/gcc-15 branch
+ - PRs cobol/119818, middle-end/120935, modula2/121164, testsuite/119508
+
+* Fri Jul 18 2025 Jakub Jelinek 15.1.1-4
- update from releases/gcc-15 branch
- PRs ada/121056, c++/87097, c++/120569, c++/120628, c++/120954,
fortran/104428, fortran/120637, fortran/120843, fortran/120847,
diff --git a/sources b/sources
index 166e73f..10cbc60 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.1.1-20250718.tar.xz) = 86216a778b63b95c502dd0649223a9161091d2f10c66f3bee242a3c690d6ea66ddd1063bdbd5ed934264b4f2136b4bb5c7d6d63769870fa49881627172893937
+SHA512 (gcc-15.1.1-20250719.tar.xz) = 4c390b000866bc1d0445392827617ebe4e734a25df05b3f166a44be597dd194723d35c0110546df7a34add5f44191f1150a7042e126dd42765c24175023b1960
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
From e3cc379cd14ca6ad3303d34273e039a76685262d Mon Sep 17 00:00:00 2001
From: Fedora Release Engineering
Date: Wed, 23 Jul 2025 21:09:35 +0000
Subject: [PATCH 43/71] Rebuilt for
https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
---
gcc.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index 036749c..7543113 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -149,7 +149,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}%{?dist}
+Release: %{gcc_release}%{?dist}.1
# License notes for some of the less obvious ones:
# gcc/doc/cppinternals.texi: Linux-man-pages-copyleft-2-para
# isl: MIT, BSD-2-Clause
@@ -3765,6 +3765,9 @@ end
%endif
%changelog
+* Wed Jul 23 2025 Fedora Release Engineering - 15.1.1-5.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
+
* Sat Jul 19 2025 Jakub Jelinek 15.1.1-5
- update from releases/gcc-15 branch
- PRs cobol/119818, middle-end/120935, modula2/121164, testsuite/119508
From 8fdb5717b571f71086290542e66ef2f8c185a9fe Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Fri, 8 Aug 2025 14:34:22 +0200
Subject: [PATCH 44/71] 15.2.1-1
---
.gitignore | 2 ++
gcc.spec | 40 +++++++++++++++++++++++++++++++-------
gcc15-libstdc++-docs.patch | 4 ++--
sources | 4 ++--
4 files changed, 39 insertions(+), 11 deletions(-)
diff --git a/.gitignore b/.gitignore
index b6772e9..2c05112 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,5 @@
/gcc-15.1.1-20250707.tar.xz
/gcc-15.1.1-20250718.tar.xz
/gcc-15.1.1-20250719.tar.xz
+/gcc-15.2.1-20250808.tar.xz
+/nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 7543113..6b0b47d 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20250719
-%global gitrev bb8f920b2f550ec98041230db4bae5837f749371
-%global gcc_version 15.1.1
+%global DATE 20250808
+%global gitrev f833458d29b4fa40ffce6cf3b37ab9a30a864901
+%global gcc_version 15.2.1
%global gcc_major 15
# 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 5
+%global gcc_release 1
%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
@@ -149,7 +149,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}%{?dist}.1
+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
@@ -3765,8 +3765,34 @@ end
%endif
%changelog
-* Wed Jul 23 2025 Fedora Release Engineering - 15.1.1-5.1
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
+* Fri Aug 8 2025 Jakub Jelinek 15.2.1-1
+- update from releases/gcc-15 branch
+ - GCC 15.2 release
+ - PRs ada/120440, ada/121184, c/119950, c/120055, c/120353, c/120354,
+ c++/95615, c++/108080, c++/109283, c++/115605, c++/115908, c++/116775,
+ c++/118074, c++/118903, c++/119916, c++/120224, c++/120243,
+ c++/120273, c++/120412, c++/120453, c++/120495, c++/120577,
+ c++/120756, c++/120800, c++/120845, c++/121055, c++/121133,
+ c++/121219, c++/121238, cobol/119231, cobol/119323, cobol/119335,
+ cobol/119337, cobol/119377, cobol/119524, cobol/119632, cobol/119695,
+ cobol/119770, cobol/119771, cobol/119772, cobol/119790, cobol/119810,
+ cobol/119885, cobol/119975, cobol/120251, cobol/120328, cobol/120402,
+ cobol/120621, cobol/120765, cobol/120772, cobol/120779, cobol/120790,
+ cobol/120791, cobol/120794, fortran/119106, fortran/121145,
+ fortran/121203, ipa/114790, libstdc++/119962, libstdc++/121373,
+ lto/120308, middle-end/119835, middle-end/121095, middle-end/121159,
+ middle-end/121322, middle-end/121389, rtl-optimization/121340,
+ target/118891, target/119692, target/119737, target/119853,
+ target/119854, target/120119, target/120351, target/120427,
+ target/120530, target/120645, target/120714, target/121027,
+ target/121028, target/121064, target/121121, target/121274,
+ target/121277, testsuite/121286, testsuite/121288,
+ tree-optimization/117423, tree-optimization/118891,
+ tree-optimization/119085, tree-optimization/121127,
+ tree-optimization/121130, tree-optimization/121190,
+ tree-optimization/121202, tree-optimization/121256,
+ tree-optimization/121264, tree-optimization/121320,
+ tree-optimization/121323, tree-optimization/121413
* Sat Jul 19 2025 Jakub Jelinek 15.1.1-5
- update from releases/gcc-15 branch
diff --git a/gcc15-libstdc++-docs.patch b/gcc15-libstdc++-docs.patch
index 15bb496..f9f33a7 100644
--- a/gcc15-libstdc++-docs.patch
+++ b/gcc15-libstdc++-docs.patch
@@ -4,7 +4,7 @@
FSF
-+ Release 15.1.1
++ Release 15.2.1
+
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
@@ -17,7 +17,7 @@
- The API documentation, rendered into HTML, can be viewed online
+ The API documentation, rendered into HTML, can be viewed locally
-+ for the 15.1.1 release,
++ for the 15.2.1 release,
+ online
for each GCC release
and
diff --git a/sources b/sources
index 10cbc60..cbe577b 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.1.1-20250719.tar.xz) = 4c390b000866bc1d0445392827617ebe4e734a25df05b3f166a44be597dd194723d35c0110546df7a34add5f44191f1150a7042e126dd42765c24175023b1960
+SHA512 (gcc-15.2.1-20250808.tar.xz) = 9c0e0f78a353e6b79ad8a421fa8e7eb54935294f2b5136cb3aa911dc7583a00ad155e4d68803c61bcff392c7d6cb84d4229732df1f26392175f020629b125a05
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
-SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea
+SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From e37f3dd9226f0ebf6028f437308ab8c192af93a6 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Fri, 8 Aug 2025 14:38:51 +0200
Subject: [PATCH 45/71] 15.2.1-1
---
gcc.spec | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index 6b0b47d..06dbaf0 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -5,7 +5,7 @@
# 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 1
-%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804
+%global nvptx_tools_gitrev a0c1fff6534a4df9fb17937c3c4a4b1071212029
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
%if 0%{?fedora:1}
From 86392f66e39a483743ffacfee94894695e512fb8 Mon Sep 17 00:00:00 2001
From: Python Maint
Date: Fri, 15 Aug 2025 12:48:10 +0200
Subject: [PATCH 46/71] Rebuilt for Python 3.14.0rc2 bytecode
---
gcc.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index 06dbaf0..09a6a69 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -149,7 +149,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}%{?dist}
+Release: %{gcc_release}%{?dist}.1
# License notes for some of the less obvious ones:
# gcc/doc/cppinternals.texi: Linux-man-pages-copyleft-2-para
# isl: MIT, BSD-2-Clause
@@ -3765,6 +3765,9 @@ end
%endif
%changelog
+* Fri Aug 15 2025 Python Maint - 15.2.1-1.1
+- Rebuilt for Python 3.14.0rc2 bytecode
+
* Fri Aug 8 2025 Jakub Jelinek 15.2.1-1
- update from releases/gcc-15 branch
- GCC 15.2 release
From c5384031e6d84c1909fe430f42e5d418b306aee9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=A1clav=20Kadl=C4=8D=C3=ADk?=
Date: Wed, 13 Aug 2025 07:43:53 +0200
Subject: [PATCH 47/71] Make rpminspect in CI less loud
Configure exceptions for rpminspect
(fedora-ci.koji-build.rpminspect.static-analysis in Fedora CI) so the
reports don't overwhelm us with failures (be it false ones or genuine
ones that we are OK with).
---
rpminspect.yaml | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
create mode 100644 rpminspect.yaml
diff --git a/rpminspect.yaml b/rpminspect.yaml
new file mode 100644
index 0000000..f31bc02
--- /dev/null
+++ b/rpminspect.yaml
@@ -0,0 +1,37 @@
+inspections:
+ # GCC subpackages are inter-dependent but without requesting an explicit
+ # version - which rpmdeps dislikes and creates huge reports. We can't fix
+ # it easily and it's not a practical problem anyway. Unfortunately we
+ # can't tell rpmdeps to ignore just that particular warning. Switching off
+ # the rpmdeps checks looks like a lesser evil.
+ rpmdeps: off
+
+badfuncs:
+ # GCC doesn't use the so called bad functions "much". If they appear then
+ # - it is instrumenting them in sanitizers
+ # - in languages that don't move further downstream.
+ # We are OK with that.
+ ignore:
+ - /usr/lib*/libasan.so.*.*.*
+ - /usr/lib*/libtsan.so.*.*.*
+ - /usr/lib*/libgnat-*.so
+ - /usr/lib*/libgphobos.so.*.*.*
+ - /usr/lib*/libm2iso.so.*.*.*
+ - /usr/lib*/libm2pim.so.*.*.*
+
+pathmigration:
+ # Incomplete UsrMove, known but not planned at the moment
+ ignore:
+ - /lib*/libgcc_s-*.so.*
+ - /lib*/libgcc_s.so.*
+
+debuginfo:
+ # Skip the Go binaries, they ship unstripped
+ ignore:
+ - /usr/bin/go.gcc
+ - /usr/bin/gofmt.gcc
+ - /usr/lib*/libgo.so.*.*.*
+ - /usr/libexec/gcc/*-redhat-linux/*/buildid
+ - /usr/libexec/gcc/*-redhat-linux/*/cgo
+ - /usr/libexec/gcc/*-redhat-linux/*/test2json
+ - /usr/libexec/gcc/*-redhat-linux/*/vet
From a703174f5b26e0b09a693d423bafe26c5e5d371d Mon Sep 17 00:00:00 2001
From: Python Maint
Date: Fri, 19 Sep 2025 12:17:32 +0200
Subject: [PATCH 48/71] Rebuilt for Python 3.14.0rc3 bytecode
---
gcc.spec | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index 09a6a69..841e2ba 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -149,7 +149,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}%{?dist}.1
+Release: %{gcc_release}%{?dist}.2
# License notes for some of the less obvious ones:
# gcc/doc/cppinternals.texi: Linux-man-pages-copyleft-2-para
# isl: MIT, BSD-2-Clause
@@ -3765,6 +3765,9 @@ end
%endif
%changelog
+* Fri Sep 19 2025 Python Maint - 15.2.1-1.2
+- Rebuilt for Python 3.14.0rc3 bytecode
+
* Fri Aug 15 2025 Python Maint - 15.2.1-1.1
- Rebuilt for Python 3.14.0rc2 bytecode
From ec7ee8880e0a6441cc36c42aadee951ea4d117f5 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Wed, 24 Sep 2025 18:38:03 +0200
Subject: [PATCH 49/71] 15.2.1-2
---
.gitignore | 1 +
gcc.spec | 34 ++++++++++++++++++++++++++--------
sources | 2 +-
3 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/.gitignore b/.gitignore
index 2c05112..c672854 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@
/gcc-15.1.1-20250719.tar.xz
/gcc-15.2.1-20250808.tar.xz
/nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz
+/gcc-15.2.1-20250924.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 841e2ba..83cf75a 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20250808
-%global gitrev f833458d29b4fa40ffce6cf3b37ab9a30a864901
+%global DATE 20250924
+%global gitrev 720a9e91dc822477b5e5417a2134c2a1668da177
%global gcc_version 15.2.1
%global gcc_major 15
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -149,7 +149,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}%{?dist}.2
+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
@@ -3765,11 +3765,29 @@ end
%endif
%changelog
-* Fri Sep 19 2025 Python Maint - 15.2.1-1.2
-- Rebuilt for Python 3.14.0rc3 bytecode
-
-* Fri Aug 15 2025 Python Maint - 15.2.1-1.1
-- Rebuilt for Python 3.14.0rc2 bytecode
+* Wed Sep 24 2025 Jakub Jelinek 15.2.1-2
+- update from releases/gcc-15 branch
+ - PRs ada/121968, bootstrap/118009, bootstrap/119089, c++/97740, c++/119859,
+ c++/120499, c++/120620, c++/121351, c++/121396, c++/121524,
+ c++/121724, c++/121795, c++/121801, c++/121977, c++/122015,
+ c++/122019, fortran/89092, fortran/121263, libfortran/121234,
+ libgcc/117600, libstdc++/110853, libstdc++/117276, libstdc++/119861,
+ libstdc++/120390, libstdc++/120698, libstdc++/121097,
+ libstdc++/121313, libstdc++/121374, libstdc++/121496,
+ libstdc++/121745, libstdc++/121827, middle-end/121453,
+ middle-end/121828, middle-end/121831, rtl-optimization/87600,
+ rtl-optimization/120718, rtl-optimization/120983,
+ rtl-optimization/121253, rtl-optimization/121757, target/49857,
+ target/81540, target/116445, target/118280, target/118885,
+ target/119830, target/120476, target/120691, target/120986,
+ target/121007, target/121118, target/121208, target/121294,
+ target/121414, target/121449, target/121464, target/121510,
+ target/121534, target/121542, target/121548, target/121602,
+ target/121608, target/121634, target/121749, target/121794,
+ target/121906, testsuite/118567, tree-optimization/107997,
+ tree-optimization/121370, tree-optimization/121527,
+ tree-optimization/121659, tree-optimization/121844,
+ tree-optimization/121870, tree-optimization/122016
* Fri Aug 8 2025 Jakub Jelinek 15.2.1-1
- update from releases/gcc-15 branch
diff --git a/sources b/sources
index cbe577b..bce2aba 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.2.1-20250808.tar.xz) = 9c0e0f78a353e6b79ad8a421fa8e7eb54935294f2b5136cb3aa911dc7583a00ad155e4d68803c61bcff392c7d6cb84d4229732df1f26392175f020629b125a05
+SHA512 (gcc-15.2.1-20250924.tar.xz) = 49f478bd761790f3be7fb317942107293ba204ce1484f626fae8865f71a72792445fca66b237263f2f9687d2e3c2accab442f70462da4d45f1fc2a604db79ff8
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From e30d2f705438cf93e3e78471e111b5782c912238 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Wed, 24 Sep 2025 18:47:28 +0200
Subject: [PATCH 50/71] 15.2.1-2
---
gcc.spec | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index 83cf75a..2c27768 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -4,7 +4,7 @@
%global gcc_major 15
# 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 1
+%global gcc_release 2
%global nvptx_tools_gitrev a0c1fff6534a4df9fb17937c3c4a4b1071212029
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
From a9e44d03b5d510470d25c1be0c68019bfddcd8a9 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Wed, 22 Oct 2025 14:00:24 +0200
Subject: [PATCH 51/71] gcc-15.2.1-3
---
.gitignore | 1 +
gcc.spec | 23 ++++++++++++++++++++---
sources | 2 +-
3 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/.gitignore b/.gitignore
index c672854..ee415eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,4 @@
/gcc-15.2.1-20250808.tar.xz
/nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz
/gcc-15.2.1-20250924.tar.xz
+/gcc-15.2.1-20251022.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 2c27768..9020640 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20250924
-%global gitrev 720a9e91dc822477b5e5417a2134c2a1668da177
+%global DATE 20251022
+%global gitrev ad903636211be01b8c06d8cf09ee5710ac43b2cb
%global gcc_version 15.2.1
%global gcc_major 15
# 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 2
+%global gcc_release 3
%global nvptx_tools_gitrev a0c1fff6534a4df9fb17937c3c4a4b1071212029
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
@@ -1674,6 +1674,9 @@ mv %{buildroot}%{_prefix}/%{_lib}/libitm.spec $FULLPATH/
%if %{build_libasan}
mv %{buildroot}%{_prefix}/%{_lib}/libsanitizer.spec $FULLPATH/
%endif
+%if %{build_cobol}
+mv %{buildroot}%{_prefix}/%{_lib}/libgcobol.spec $FULLPATH/
+%endif
mkdir -p %{buildroot}/%{_lib}
mv -f %{buildroot}%{_prefix}/%{_lib}/libgcc_s.so.1 %{buildroot}/%{_lib}/libgcc_s-%{gcc_major}-%{DATE}.so.1
@@ -3282,6 +3285,7 @@ end
%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cobol1
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcobol.spec
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcobol.so
%{_datadir}/gcobol
%doc rpm.doc/gcobol/*
@@ -3765,6 +3769,19 @@ end
%endif
%changelog
+* Wed Oct 21 2025 Jakub Jelinek 15.2.1-3
+- update from releases/gcc-15 branch
+ - PRs ada/107536, ada/113536, ada/117517, ada/118343, c/122188, c++/120757,
+ c++/121981, c++/122302, fortran/108581, fortran/121616,
+ fortran/121939, go/104290, libstdc++/122062, libstdc++/122322,
+ middle-end/121922, middle-end/122133, target/110812, target/121599,
+ target/121652, target/121742, target/121780, target/121781,
+ target/121845, target/121875, target/122119, target/122177,
+ target/122187, target/122210, target/122220, target/122222,
+ target/122223, tree-optimization/121772, tree-optimization/122104,
+ tree-optimization/122213
+- package libgcobol.spec (#2401679)
+
* Wed Sep 24 2025 Jakub Jelinek 15.2.1-2
- update from releases/gcc-15 branch
- PRs ada/121968, bootstrap/118009, bootstrap/119089, c++/97740, c++/119859,
diff --git a/sources b/sources
index bce2aba..0bdd61a 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.2.1-20250924.tar.xz) = 49f478bd761790f3be7fb317942107293ba204ce1484f626fae8865f71a72792445fca66b237263f2f9687d2e3c2accab442f70462da4d45f1fc2a604db79ff8
+SHA512 (gcc-15.2.1-20251022.tar.xz) = 565fe994bcd3f0b604e952bc55a9184739175679d5595a8a5f7109ec6b90c001b8532a9bc047e356e01dbc416539f78178f56a2393ef67489ef841d544fb4a5b
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From 8e1de27693c2caf57c766104cee88857e524f369 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 11 Nov 2025 09:25:47 +0100
Subject: [PATCH 52/71] 15.2.1-4
---
.gitignore | 1 +
gcc.spec | 18 +++++++++++++++---
sources | 2 +-
3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/.gitignore b/.gitignore
index ee415eb..6dd1375 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,4 @@
/nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz
/gcc-15.2.1-20250924.tar.xz
/gcc-15.2.1-20251022.tar.xz
+/gcc-15.2.1-20251111.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 9020640..c965a13 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20251022
-%global gitrev ad903636211be01b8c06d8cf09ee5710ac43b2cb
+%global DATE 20251111
+%global gitrev 43c569d5324a7f22a16fb0d245a2373e8a85473e
%global gcc_version 15.2.1
%global gcc_major 15
# 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 3
+%global gcc_release 4
%global nvptx_tools_gitrev a0c1fff6534a4df9fb17937c3c4a4b1071212029
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
@@ -3769,6 +3769,18 @@ end
%endif
%changelog
+* Tue Nov 11 2025 Jakub Jelinek 15.2.1-4
+- update from releases/gcc-15 branch
+ - PRs ada/81087, ada/118208, ada/118782, c++/122192, c++/122253, c++/122310,
+ c++/122381, c++/122421, fortran/107968, fortran/114023,
+ fortran/122206, fortran/122386, rtl-optimization/122321,
+ target/99930, target/118460, target/119079, target/120674,
+ target/121604, target/122097, target/122270, target/122323,
+ target/122516, target/122527, tree-optimization/122012,
+ tree-optimization/122394, tree-optimization/122408,
+ tree-optimization/122505
+ - fix ICE while building firefox with LTO+PGO (#2395476, PR lto/122620)
+
* Wed Oct 21 2025 Jakub Jelinek 15.2.1-3
- update from releases/gcc-15 branch
- PRs ada/107536, ada/113536, ada/117517, ada/118343, c/122188, c++/120757,
diff --git a/sources b/sources
index 0bdd61a..d156995 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.2.1-20251022.tar.xz) = 565fe994bcd3f0b604e952bc55a9184739175679d5595a8a5f7109ec6b90c001b8532a9bc047e356e01dbc416539f78178f56a2393ef67489ef841d544fb4a5b
+SHA512 (gcc-15.2.1-20251111.tar.xz) = d31bf7d14dda8dc72feb2f490c2b4dfc90084a578c09de0ece085c18dc8bb948d1449ffccd9eb5ca23d0908ee948eeb95c9604ae1526cf62f2197c74336df83f
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From ecc62ec17c535d747e4ef719d8ddd59e6e92dd9e Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 11 Nov 2025 09:27:02 +0100
Subject: [PATCH 53/71] Fix up date.
---
gcc.spec | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index c965a13..d910939 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -3781,7 +3781,7 @@ end
tree-optimization/122505
- fix ICE while building firefox with LTO+PGO (#2395476, PR lto/122620)
-* Wed Oct 21 2025 Jakub Jelinek 15.2.1-3
+* Wed Oct 22 2025 Jakub Jelinek 15.2.1-3
- update from releases/gcc-15 branch
- PRs ada/107536, ada/113536, ada/117517, ada/118343, c/122188, c++/120757,
c++/121981, c++/122302, fortran/108581, fortran/121616,
From 29a83d755339cfb3f850d556664d0536615af1bd Mon Sep 17 00:00:00 2001
From: Siddhesh Poyarekar
Date: Tue, 2 Dec 2025 14:57:49 -0500
Subject: [PATCH 54/71] Create gnatgcc symlink only when building the Ada
compiler
---
gcc.spec | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/gcc.spec b/gcc.spec
index d858528..bde5b0e 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1583,7 +1583,9 @@ ln -sf ../bin/cpp %{buildroot}/%{_prefix}/lib/cpp
ln -sf gfortran %{buildroot}%{_prefix}/bin/f95
rm -f %{buildroot}%{_infodir}/dir
gzip -9 %{buildroot}%{_infodir}/*.info*
+%if %{build_ada}
ln -sf gcc %{buildroot}%{_prefix}/bin/gnatgcc
+%endif
mkdir -p %{buildroot}%{_fmoddir}
%if %{build_go}
@@ -3776,6 +3778,8 @@ end
%endif
%changelog
+- Create gnatgcc symlink only when building ada.
+
* Tue Nov 11 2025 Jakub Jelinek 15.2.1-4
- update from releases/gcc-15 branch
- PRs ada/81087, ada/118208, ada/118782, c++/122192, c++/122253, c++/122310,
From 7e1c00df08bdc58a8d64ccd2336cb2acd53261a3 Mon Sep 17 00:00:00 2001
From: Siddhesh Poyarekar
Date: Tue, 2 Dec 2025 16:47:18 -0500
Subject: [PATCH 55/71] Disable libssp and avoid building disabled libraries
Don't build libquadmath, libatomic and libitm if they have been
disabled. Also, disable libssp so that none of its artifacts are built
or installed.
---
gcc.spec | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index bde5b0e..19cd7d4 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1320,6 +1320,16 @@ CONFIGURE_OPTS="\
%endif
%if 0%{?rhel:1}
--enable-host-pie --enable-host-bind-now \
+%endif
+ --disable-libssp \
+%if %{build_libquadmath} == 0
+ --disable-libquadmath \
+%endif
+%if %{build_libatomic} == 0
+ --disable-libatomic \
+%endif
+%if %{build_libitm} == 0
+ --disable-libitm \
%endif
"
@@ -2380,7 +2390,6 @@ cd ..
rm -f %{buildroot}%{_prefix}/%{_lib}/{libffi*,libiberty.a} || :
rm -f $FULLEPATH/install-tools/{mkheaders,fixincl}
rm -f %{buildroot}%{_prefix}/lib/{32,64}/libiberty.a
-rm -f %{buildroot}%{_prefix}/%{_lib}/libssp*
rm -f %{buildroot}%{_prefix}/%{_lib}/libvtv* || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gfortran || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gccgo || :
@@ -3779,6 +3788,7 @@ end
%changelog
- Create gnatgcc symlink only when building ada.
+- Avoid building libssp and disabled libraries.
* Tue Nov 11 2025 Jakub Jelinek 15.2.1-4
- update from releases/gcc-15 branch
From 03834369aeb2574f8f8d8de33f6af81769ba5b6e Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 11 Dec 2025 13:51:51 +0100
Subject: [PATCH 56/71] gcc-15.2.1-5
---
.gitignore | 1 +
gcc.spec | 43 +++++++++++++++++++++++++++++++++++++------
sources | 2 +-
3 files changed, 39 insertions(+), 7 deletions(-)
diff --git a/.gitignore b/.gitignore
index 6dd1375..02ae8bb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@
/gcc-15.2.1-20250924.tar.xz
/gcc-15.2.1-20251022.tar.xz
/gcc-15.2.1-20251111.tar.xz
+/gcc-15.2.1-20251211.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 19cd7d4..3059693 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20251111
-%global gitrev 43c569d5324a7f22a16fb0d245a2373e8a85473e
+%global DATE 20251211
+%global gitrev 3c2c408e5ef993f208fbdcbd39b01717ab15be80
%global gcc_version 15.2.1
%global gcc_major 15
# 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 4
+%global gcc_release 5
%global nvptx_tools_gitrev a0c1fff6534a4df9fb17937c3c4a4b1071212029
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
@@ -2258,7 +2258,7 @@ ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/adalib
# If we are building a debug package then copy all of the static archives
# into the debug directory to keep them as unstripped copies.
-%if 0%{?_enable_debug_packages}
+%if 0 # %{?_enable_debug_packages}
for d in . $FULLLSUBDIR; do
mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/debug%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/$d
for f in `find $d -maxdepth 1 -a \
@@ -2399,6 +2399,8 @@ rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcc-nm || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcc-ranlib || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gdc || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gm2 || :
+rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcobc || :
+rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcobol || :
%ifarch %{multilib_64_archs}
# Remove libraries for the other arch on multilib arches
@@ -2422,11 +2424,25 @@ rm -rf %{buildroot}%{_prefix}/lib64/go/%{gcc_major}/%{gcc_target_platform}
%endif
%endif
+rm -f %{buildroot}%{_prefix}/lib*/lib*.spec || :
+rm -f %{buildroot}%{_prefix}/lib*/libstdc++.modules.json || :
+rm -f %{buildroot}%{_prefix}/%{_lib}/lib{asan,atomic,gcc_s,gcobol,gdruntime,gfortran,go,gomp-plugin-*,gomp,gphobos,hwasan}.so || :
+rm -f %{buildroot}%{_prefix}/%{_lib}/lib{itm,lsan,m2{cor,iso,log,min,pim},objc,quadmath,tsan,ubsan}.so || :
+rm -f %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/install-tools/{fixinc.sh,mkinstalldirs} || :
+rm -f %{buildroot}%{_prefix}/share/locale/*/LC_MESSAGES/libstdc++.mo || :
+rm -f %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include-fixed/README || :
+rm -rf %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/ssp || :
+rm -rf %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/install-tools || :
+
%if %{build_offload_nvptx}
rm -f %{buildroot}%{_mandir}/man1/*-accel-*nvptx*
+find %{buildroot}%{_prefix}/nvptx-none/lib -name libstdc++.a-gdb.py | xargs rm -f || :
+find %{buildroot}%{_prefix}/nvptx-none/lib -name libstdc++.modules.json | xargs rm -f || :
%endif
%if %{build_offload_amdgcn}
rm -f %{buildroot}%{_mandir}/man1/*-accel-*amdgcn*
+find %{buildroot}%{_prefix}/amdgcn-amdhsa/lib -name libstdc++.a-gdb.py | xargs rm -f || :
+find %{buildroot}%{_prefix}/amdgcn-amdhsa/lib -name libstdc++.modules.json | xargs rm -f || :
%endif
rm -f %{buildroot}%{_mandir}/man7/{gpl,gfdl,fsf-funding}.7*
@@ -3787,8 +3803,23 @@ end
%endif
%changelog
-- Create gnatgcc symlink only when building ada.
-- Avoid building libssp and disabled libraries.
+* Thu Dec 11 2025 Jakub Jelinek 15.2.1-5
+- update from releases/gcc-15 branch
+ - PRs ada/111433, ada/115305, ada/122640, ada/123037, c/121506, c/123018,
+ c++/119580, c++/120529, c++/120876, c++/121325, c++/121445,
+ c++/122625, c++/122658, c++/122677, c++/122789, fortran/122709,
+ fortran/122977, libstdc++/122661, libstdc++/122726, libstdc++/122743,
+ libstdc++/122842, libstdc++/122921, lto/122515, middle-end/120052,
+ middle-end/120564, middle-end/121581, middle-end/122624,
+ rtl-optimization/122627, target/110796, target/118446, target/119275,
+ target/121853, target/122175, target/122189, target/122216,
+ target/122446, target/122539, target/122652, target/122656,
+ target/122692, target/122695, target/122858, target/122867,
+ target/122991, tree-optimization/121776, tree-optimization/122126,
+ tree-optimization/122225, tree-optimization/122943
+- create gnatgcc symlink only when building Ada
+- avoid building libssp and disabled libraries
+- remove various unpackaged files from the buildroot
* Tue Nov 11 2025 Jakub Jelinek 15.2.1-4
- update from releases/gcc-15 branch
diff --git a/sources b/sources
index d156995..5429ac5 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.2.1-20251111.tar.xz) = d31bf7d14dda8dc72feb2f490c2b4dfc90084a578c09de0ece085c18dc8bb948d1449ffccd9eb5ca23d0908ee948eeb95c9604ae1526cf62f2197c74336df83f
+SHA512 (gcc-15.2.1-20251211.tar.xz) = 9ad5a1ef0f21327fafe37eb52a2e8ff4ebd773c34e9a70053fa70436fa7d35b1eb3b85f0a38211b06fba3fc6a3e35dcb939822d0c0eca1592ea24aa6b2726c99
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From 7d5be559dbddc4eb93bf1e61c41ad90f241917c5 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 11 Dec 2025 13:58:15 +0100
Subject: [PATCH 57/71] gcc-15.2.1-5
---
gcc.spec | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gcc.spec b/gcc.spec
index 3059693..91264e0 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -2258,7 +2258,8 @@ ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/adalib
# If we are building a debug package then copy all of the static archives
# into the debug directory to keep them as unstripped copies.
-%if 0 # %{?_enable_debug_packages}
+# if 0%{?_enable_debug_packages}
+%if 0
for d in . $FULLLSUBDIR; do
mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/debug%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/$d
for f in `find $d -maxdepth 1 -a \
From e938fc85e2ce30108eca74a83417cc332629a2a4 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 11 Dec 2025 14:32:49 +0100
Subject: [PATCH 58/71] gcc-15.2.1-5
---
gcc.spec | 1 +
gcc15-libgomp-strchr.patch | 15 +++++++++++++++
2 files changed, 16 insertions(+)
create mode 100644 gcc15-libgomp-strchr.patch
diff --git a/gcc.spec b/gcc.spec
index 91264e0..a941a87 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -312,6 +312,7 @@ Patch9: gcc15-Wno-format-security.patch
Patch10: gcc15-rh1574936.patch
Patch11: gcc15-d-shared-libphobos.patch
Patch12: gcc15-pr119006.patch
+Patch13: gcc15-libgomp-strchr.patch
Patch50: isl-rh2155127.patch
diff --git a/gcc15-libgomp-strchr.patch b/gcc15-libgomp-strchr.patch
new file mode 100644
index 0000000..802f142
--- /dev/null
+++ b/gcc15-libgomp-strchr.patch
@@ -0,0 +1,15 @@
+2025-11-22 Frank Scheiner
+
+ * affinity-fmt.c: Make char *q a pointer to a const char.
+
+--- libgomp/affinity-fmt.c.jj
++++ libgomp/affinity-fmt.c
+@@ -327,7 +327,7 @@ gomp_display_affinity (char *buffer, size_t size,
+ }
+ if (c == '{')
+ {
+- char *q = strchr (p + 1, '}');
++ const char *q = strchr (p + 1, '}');
+ if (q)
+ gomp_fatal ("unsupported long type name '%.*s' in affinity "
+ "format", (int) (q - (p + 1)), p + 1);
From 37b414b69dc7c00dc279290e84a9c105be389810 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Fri, 12 Dec 2025 21:57:37 +0100
Subject: [PATCH 59/71] gcc-15.2.1-5
---
gcc.spec | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/gcc.spec b/gcc.spec
index a941a87..8624697 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -2429,12 +2429,15 @@ rm -rf %{buildroot}%{_prefix}/lib64/go/%{gcc_major}/%{gcc_target_platform}
rm -f %{buildroot}%{_prefix}/lib*/lib*.spec || :
rm -f %{buildroot}%{_prefix}/lib*/libstdc++.modules.json || :
rm -f %{buildroot}%{_prefix}/%{_lib}/lib{asan,atomic,gcc_s,gcobol,gdruntime,gfortran,go,gomp-plugin-*,gomp,gphobos,hwasan}.so || :
-rm -f %{buildroot}%{_prefix}/%{_lib}/lib{itm,lsan,m2{cor,iso,log,min,pim},objc,quadmath,tsan,ubsan}.so || :
+rm -f %{buildroot}%{_prefix}/%{_lib}/lib{itm,lsan,m2{cor,iso,log,min,pim},objc,quadmath,stdc++,tsan,ubsan}.so || :
rm -f %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/install-tools/{fixinc.sh,mkinstalldirs} || :
rm -f %{buildroot}%{_prefix}/share/locale/*/LC_MESSAGES/libstdc++.mo || :
rm -f %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include-fixed/README || :
rm -rf %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/ssp || :
rm -rf %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/install-tools || :
+%ifarch ppc ppc64 ppc64le ppc64p7
+rm -f %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/{e,n}crt{i,n}.o || :
+%endif
%if %{build_offload_nvptx}
rm -f %{buildroot}%{_mandir}/man1/*-accel-*nvptx*
@@ -3653,7 +3656,8 @@ end
%doc rpm.doc/go/*
%files -n libgo
-%attr(755,root,root) %{_prefix}/%{_lib}/libgo.so.24*
+%{_prefix}/%{_lib}/libgo.so.24
+%attr(755,root,root) %{_prefix}/%{_lib}/libgo.so.24.*
%doc rpm.doc/libgo/*
%files -n libgo-devel
From 8f8d2ea9c326784bce044ff86547107611dda338 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 18 Dec 2025 17:22:02 +0100
Subject: [PATCH 60/71] 16.0.0-0.2
---
.gitignore | 1 +
gcc.spec | 766 +++++-------------
gcc15-libgomp-strchr.patch | 15 -
...y.patch => gcc16-Wno-format-security.patch | 8 +-
...os.patch => gcc16-d-shared-libphobos.patch | 0
...tch => gcc16-fortran-fdec-duplicates.patch | 0
gcc15-hack.patch => gcc16-hack.patch | 0
gcc15-isl-dl.patch => gcc16-isl-dl.patch | 0
gcc15-isl-dl2.patch => gcc16-isl-dl2.patch | 0
gcc16-libgomp-build.patch | 17 +
...atch => gcc16-libgomp-omp_h-multilib.patch | 0
...+-docs.patch => gcc16-libstdc++-docs.patch | 4 +-
...path.patch => gcc16-libtool-no-rpath.patch | 0
...-needed.patch => gcc16-no-add-needed.patch | 2 +-
gcc15-pr119006.patch => gcc16-pr119006.patch | 0
gcc16-pr123114.patch | 46 ++
gcc16-pr123115.patch | 17 +
gcc16-pr123152.patch | 157 ++++
...5-rh1574936.patch => gcc16-rh1574936.patch | 0
...atch => gcc16-sparc-config-detection.patch | 0
sources | 2 +-
21 files changed, 443 insertions(+), 592 deletions(-)
delete mode 100644 gcc15-libgomp-strchr.patch
rename gcc15-Wno-format-security.patch => gcc16-Wno-format-security.patch (89%)
rename gcc15-d-shared-libphobos.patch => gcc16-d-shared-libphobos.patch (100%)
rename gcc15-fortran-fdec-duplicates.patch => gcc16-fortran-fdec-duplicates.patch (100%)
rename gcc15-hack.patch => gcc16-hack.patch (100%)
rename gcc15-isl-dl.patch => gcc16-isl-dl.patch (100%)
rename gcc15-isl-dl2.patch => gcc16-isl-dl2.patch (100%)
create mode 100644 gcc16-libgomp-build.patch
rename gcc15-libgomp-omp_h-multilib.patch => gcc16-libgomp-omp_h-multilib.patch (100%)
rename gcc15-libstdc++-docs.patch => gcc16-libstdc++-docs.patch (96%)
rename gcc15-libtool-no-rpath.patch => gcc16-libtool-no-rpath.patch (100%)
rename gcc15-no-add-needed.patch => gcc16-no-add-needed.patch (96%)
rename gcc15-pr119006.patch => gcc16-pr119006.patch (100%)
create mode 100644 gcc16-pr123114.patch
create mode 100644 gcc16-pr123115.patch
create mode 100644 gcc16-pr123152.patch
rename gcc15-rh1574936.patch => gcc16-rh1574936.patch (100%)
rename gcc15-sparc-config-detection.patch => gcc16-sparc-config-detection.patch (100%)
diff --git a/.gitignore b/.gitignore
index 02ae8bb..02b5869 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,4 @@
/gcc-15.2.1-20251022.tar.xz
/gcc-15.2.1-20251111.tar.xz
/gcc-15.2.1-20251211.tar.xz
+/gcc-16.0.0-20251218.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 8624697..c1ba99a 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20251211
-%global gitrev 3c2c408e5ef993f208fbdcbd39b01717ab15be80
-%global gcc_version 15.2.1
-%global gcc_major 15
+%global DATE 20251218
+%global gitrev f73d23f06a1b8aa7cdce95a6092c0ce0f5650a00
+%global gcc_version 16.0.0
+%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 5
+%global gcc_release 0
%global nvptx_tools_gitrev a0c1fff6534a4df9fb17937c3c4a4b1071212029
%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99
%global _unpackaged_files_terminate_build 0
@@ -45,6 +45,7 @@
%global build_d 0
%global build_m2 0
%global build_cobol 0
+%global build_algol68 0
%else
%ifarch %{ix86} x86_64 ia64 ppc %{power64} alpha s390x %{arm} aarch64 riscv64
%global build_ada 1
@@ -67,11 +68,12 @@
%else
%global build_m2 0
%endif
-%ifarch x86_64 aarch64
+%ifarch x86_64 aarch64 ppc64le
%global build_cobol 1
%else
%global build_cobol 0
%endif
+%global build_algol68 1
%endif
%ifarch %{ix86} x86_64 ia64 ppc64le
%global build_libquadmath 1
@@ -156,7 +158,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}%{?dist}
+Release: %{gcc_release}.2%{?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
@@ -218,6 +220,9 @@ BuildRequires: gcc, gcc-c++, make
%if %{build_go}
BuildRequires: hostname, procps
%endif
+%if %{build_cobol}
+BuildRequires: libxml2-devel
+%endif
# For VTA guality testing
BuildRequires: gdb
# Make sure pthread.h doesn't contain __thread tokens
@@ -300,23 +305,26 @@ Provides: bundled(libbacktrace)
Provides: bundled(libffi)
Provides: gcc(major) = %{gcc_major}
-Patch0: gcc15-hack.patch
-Patch2: gcc15-sparc-config-detection.patch
-Patch3: gcc15-libgomp-omp_h-multilib.patch
-Patch4: gcc15-libtool-no-rpath.patch
-Patch5: gcc15-isl-dl.patch
-Patch6: gcc15-isl-dl2.patch
-Patch7: gcc15-libstdc++-docs.patch
-Patch8: gcc15-no-add-needed.patch
-Patch9: gcc15-Wno-format-security.patch
-Patch10: gcc15-rh1574936.patch
-Patch11: gcc15-d-shared-libphobos.patch
-Patch12: gcc15-pr119006.patch
-Patch13: gcc15-libgomp-strchr.patch
+Patch0: gcc16-hack.patch
+Patch2: gcc16-sparc-config-detection.patch
+Patch3: gcc16-libgomp-omp_h-multilib.patch
+Patch4: gcc16-libtool-no-rpath.patch
+Patch5: gcc16-isl-dl.patch
+Patch6: gcc16-isl-dl2.patch
+Patch7: gcc16-libstdc++-docs.patch
+Patch8: gcc16-no-add-needed.patch
+Patch9: gcc16-Wno-format-security.patch
+Patch10: gcc16-rh1574936.patch
+Patch11: gcc16-d-shared-libphobos.patch
+Patch12: gcc16-pr119006.patch
+Patch13: gcc16-pr123152.patch
+Patch14: gcc16-pr123114.patch
+Patch15: gcc16-pr123115.patch
+Patch16: gcc16-libgomp-build.patch
Patch50: isl-rh2155127.patch
-Patch100: gcc15-fortran-fdec-duplicates.patch
+Patch100: gcc16-fortran-fdec-duplicates.patch
# On ARM EABI systems, we do want -gnueabi to be part of the
# target triple.
@@ -338,7 +346,7 @@ Patch100: gcc15-fortran-fdec-duplicates.patch
%if %{build_go}
# Avoid stripping these libraries and binaries.
%global __os_install_post \
-chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.24.* \
+chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.25.* \
chmod 644 %{buildroot}%{_prefix}/bin/go.gcc \
chmod 644 %{buildroot}%{_prefix}/bin/gofmt.gcc \
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo \
@@ -346,7 +354,7 @@ chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/test2json \
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/vet \
%__os_install_post \
-chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgo.so.24.* \
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgo.so.25.* \
chmod 755 %{buildroot}%{_prefix}/bin/go.gcc \
chmod 755 %{buildroot}%{_prefix}/bin/gofmt.gcc \
chmod 755 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo \
@@ -588,15 +596,41 @@ Requires: gcc-gcobol = %{version}-%{release}
%description -n libgcobol-static
This package contains static COBOL libraries.
+%package algol68
+Summary: Algol 68 support
+Requires: gcc = %{version}-%{release}
+Requires: libga68 = %{version}-%{release}
+Autoreq: true
+
+%description algol68
+The gcc-algol68 package provides support for compiling Algol 68
+programs with the GNU Compiler Collection.
+
+%package -n libga68
+Summary: Algol 68 runtime
+Autoreq: true
+
+%description -n libga68
+This package contains Algol 68 shared libraries which are needed to run
+Algol 68 dynamically linked programs.
+
+%package -n libga68-static
+Summary: Static Algol 68 libraries
+Requires: libga68 = %{version}-%{release}
+Requires: gcc-algol68 = %{version}-%{release}
+
+%description -n libga68-static
+This package contains static Algol 68 libraries.
+
%package -n libgomp
-Summary: GCC OpenMP v4.5 shared support library
+Summary: GCC OpenMP v5.2 shared support library
%description -n libgomp
This package contains GCC shared support library which is needed
-for OpenMP v4.5 support.
+for OpenMP v5.2 support.
%package -n libgomp-offload-nvptx
-Summary: GCC OpenMP v4.5 plugin for offloading to NVPTX
+Summary: GCC OpenMP v5.2 plugin for offloading to NVPTX
Requires: libgomp = %{version}-%{release}
%description -n libgomp-offload-nvptx
@@ -605,7 +639,7 @@ PTX. The plugin needs libcuda.so.1 shared library that has to be
installed separately.
%package -n libgomp-offload-amdgcn
-Summary: GCC OpenMP v4.5 plugin for offloading to AMD GCN
+Summary: GCC OpenMP v5.2 plugin for offloading to AMD GCN
Requires: libgomp = %{version}-%{release}
%if 0%{?fedora:1}
Requires: rocm-runtime >= 6.0.0
@@ -963,14 +997,12 @@ rm -f libphobos/testsuite/libphobos.gc/forkgc2.d
echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE
-cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h
-
./contrib/gcc_update --touch
LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi
sed -i -e 's/Common Driver Var(flag_report_bug)/& Init(1)/' gcc/common.opt
-sed -i -e 's/m_report_bug = false;/m_report_bug = true;/' gcc/diagnostic.cc
+sed -i -e 's/m_report_bug = false;/m_report_bug = true;/' gcc/diagnostics/context.cc
%ifarch ppc
if [ -d libstdc++-v3/config/abi/post/powerpc64-linux-gnu ]; then
@@ -1133,6 +1165,7 @@ enablelobjc=
enableld=
enablelm2=
enablelcob=
+enablela68=
%if %{build_objc}
enablelobjc=,objc,obj-c++
%endif
@@ -1151,6 +1184,9 @@ enablelm2=,m2
%if %{build_cobol}
enablelcob=,cobol
%endif
+%if %{build_algol68}
+enablela68=,algol68
+%endif
offloadtgts=
%if %{build_offload_nvptx}
offloadtgts=nvptx-none
@@ -1247,6 +1283,9 @@ CONFIGURE_OPTS="\
%ifarch %{ix86} x86_64
--enable-cet \
--with-tune=generic \
+%if 0%{?fedora} >= 44 || 0%{?rhel} >= 11
+ --with-tls=gnu2 \
+%endif
%endif
%if 0%{?rhel} >= 7
%ifarch %{ix86}
@@ -1339,7 +1378,7 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
| sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \
XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
../configure --enable-bootstrap \
- --enable-languages=c,c++,fortran${enablelobjc}${enablelada}${enablelgo}${enableld}${enablelm2}${enablelcob},lto \
+ --enable-languages=c,c++,fortran${enablelobjc}${enablelada}${enablelgo}${enableld}${enablelm2}${enablelcob}${enablela68},lto \
$CONFIGURE_OPTS
%ifarch sparc sparcv9 sparc64
@@ -1395,7 +1434,7 @@ cd ../..
# Copy various doc files here and there
cd ..
-mkdir -p rpm.doc/{gfortran,objc,gdc,libphobos,gm2,libgm2,libgdiagnostics-devel,gcobol,libgcobol}
+mkdir -p rpm.doc/{gfortran,objc,gdc,libphobos,gm2,libgm2,libgdiagnostics-devel,gcobol,libgcobol,algol68,libga68}
mkdir -p rpm.doc/go rpm.doc/libgo rpm.doc/libquadmath rpm.doc/libitm
mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/ada,gcc/jit,libstdc++-v3,libobjc,libgomp,libcc1,libatomic,libsanitizer}
@@ -1439,6 +1478,14 @@ done)
cp -p $i ../rpm.doc/libgcobol/$i.libgcobol
done)
%endif
+%if %{build_algol68}
+(cd gcc/algol68; for i in ChangeLog*; do
+ cp -p $i ../../rpm.doc/algol68/$i.algol68
+done)
+(cd libga68; for i in ChangeLog*; do
+ cp -p $i ../rpm.doc/libga68/$i.libga68
+done)
+%endif
%if %{build_libquadmath}
(cd libquadmath; for i in ChangeLog* COPYING.LIB; do
cp -p $i ../rpm.doc/libquadmath/$i.libquadmath
@@ -1697,6 +1744,9 @@ mv %{buildroot}%{_prefix}/%{_lib}/libsanitizer.spec $FULLPATH/
%if %{build_cobol}
mv %{buildroot}%{_prefix}/%{_lib}/libgcobol.spec $FULLPATH/
%endif
+%if %{build_algol68}
+mv %{buildroot}%{_prefix}/%{_lib}/libga68.spec $FULLPATH/
+%endif
mkdir -p %{buildroot}/%{_lib}
mv -f %{buildroot}%{_prefix}/%{_lib}/libgcc_s.so.1 %{buildroot}/%{_lib}/libgcc_s-%{gcc_major}-%{DATE}.so.1
@@ -1782,7 +1832,7 @@ ln -sf ../../../libstdc++.so.6.*[0-9] libstdc++.so
ln -sf ../../../libgfortran.so.5.* libgfortran.so
ln -sf ../../../libgomp.so.1.* libgomp.so
%if %{build_go}
-ln -sf ../../../libgo.so.24.* libgo.so
+ln -sf ../../../libgo.so.25.* libgo.so
%endif
%if %{build_libquadmath}
ln -sf ../../../libquadmath.so.0.* libquadmath.so
@@ -1793,11 +1843,14 @@ ln -sf ../../../libgphobos.so.6.* libgphobos.so
%endif
%if %{build_m2}
for i in cor iso log min pim; do
- ln -sf ../../../libm2$i.so.20.* libm2$i.so
+ ln -sf ../../../libm2$i.so.21.* libm2$i.so
done
%endif
%if %{build_cobol}
-ln -sf ../../../libgcobol.so.1.* libgcobol.so
+ln -sf ../../../libgcobol.so.2.* libgcobol.so
+%endif
+%if %{build_algol68}
+ln -sf ../../../libga68.so.2.* libga68.so
%endif
%if %{build_libitm}
ln -sf ../../../libitm.so.1.* libitm.so
@@ -1820,7 +1873,7 @@ ln -sf ../../../../%{_lib}/libstdc++.so.6.*[0-9] libstdc++.so
ln -sf ../../../../%{_lib}/libgfortran.so.5.* libgfortran.so
ln -sf ../../../../%{_lib}/libgomp.so.1.* libgomp.so
%if %{build_go}
-ln -sf ../../../../%{_lib}/libgo.so.24.* libgo.so
+ln -sf ../../../../%{_lib}/libgo.so.25.* libgo.so
%endif
%if %{build_libquadmath}
ln -sf ../../../../%{_lib}/libquadmath.so.0.* libquadmath.so
@@ -1831,11 +1884,14 @@ ln -sf ../../../../%{_lib}/libgphobos.so.6.* libgphobos.so
%endif
%if %{build_m2}
for i in cor iso log min pim; do
- ln -sf ../../../../%{_lib}/libm2$i.so.20.* libm2$i.so
+ ln -sf ../../../../%{_lib}/libm2$i.so.21.* libm2$i.so
done
%endif
%if %{build_cobol}
-ln -sf ../../../../%{_lib}/libgcobol.so.1.* libgcobol.so
+ln -sf ../../../../%{_lib}/libgcobol.so.2.* libgcobol.so
+%endif
+%if %{build_algol68}
+ln -sf ../../../../%{_lib}/libga68.so.2.* libga68.so
%endif
%if %{build_libitm}
ln -sf ../../../../%{_lib}/libitm.so.1.* libitm.so
@@ -1893,6 +1949,9 @@ done
%if %{build_cobol}
mv -f %{buildroot}%{_prefix}/%{_lib}/libgcobol.*a $FULLLPATH/
%endif
+%if %{build_algol68}
+mv -f %{buildroot}%{_prefix}/%{_lib}/libga68.*a $FULLLPATH/
+%endif
%if %{build_libitm}
mv -f %{buildroot}%{_prefix}/%{_lib}/libitm.*a $FULLLPATH/
%endif
@@ -1968,8 +2027,8 @@ ln -sf ../`echo ../../../../lib/libgfortran.so.5.* | sed s~/lib/~/lib64/~` 64/li
ln -sf ../`echo ../../../../lib/libgomp.so.1.* | sed s~/lib/~/lib64/~` 64/libgomp.so
%if %{build_go}
rm -f libgo.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgo.so.24.* | sed 's,^.*libg,libg,'`' )' > libgo.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgo.so.24.* | sed 's,^.*libg,libg,'`' )' > 64/libgo.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgo.so.25.* | sed 's,^.*libg,libg,'`' )' > libgo.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgo.so.25.* | sed 's,^.*libg,libg,'`' )' > 64/libgo.so
%endif
%if %{build_libquadmath}
rm -f libquadmath.so
@@ -1986,8 +2045,8 @@ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgphobos.so.6.* | sed 's
%if %{build_m2}
for i in cor iso log min pim; do
rm -f libm2$i.so
- echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libm2$i.so.20.* | sed 's,^.*libm,libm,'`' )' > libm2$i.so
- echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libm2$i.so.20.* | sed 's,^.*libm,libm,'`' )' > 64/libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libm2$i.so.21.* | sed 's,^.*libm,libm,'`' )' > libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libm2$i.so.21.* | sed 's,^.*libm,libm,'`' )' > 64/libm2$i.so
rm -f 64/m2/m2$i/*.{a,la}
ln -sf ../../libm2$i.so 64/m2/m2$i/
ln -sf ../../libm2$i.a 64/m2/m2$i/
@@ -1995,8 +2054,13 @@ done
%endif
%if %{build_cobol}
rm -f libgcobol.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgcobol.so.1.* | sed 's,^.*libg,libg,'`' )' > libgcobol.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgcobol.so.1.* | sed 's,^.*libg,libg,'`' )' > 64/libgcobol.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgcobol.so.2.* | sed 's,^.*libg,libg,'`' )' > libgcobol.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgcobol.so.2.* | sed 's,^.*libg,libg,'`' )' > 64/libgcobol.so
+%endif
+%if %{build_algol68}
+rm -f libga68.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libga68.so.2.* | sed 's,^.*libg,libg,'`' )' > libga68.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libga68.so.2.* | sed 's,^.*libg,libg,'`' )' > 64/libga68.so
%endif
%if %{build_libitm}
rm -f libitm.so
@@ -2053,6 +2117,10 @@ done
ln -sf lib32/libgcobol.a libgcobol.a
ln -sf ../lib64/libgcobol.a 64/libgcobol.a
%endif
+%if %{build_algol68}
+ln -sf lib32/libga68.a libga68.a
+ln -sf ../lib64/libga68.a 64/libga68.a
+%endif
%if %{build_libitm}
ln -sf lib32/libitm.a libitm.a
ln -sf ../lib64/libitm.a 64/libitm.a
@@ -2094,8 +2162,8 @@ ln -sf ../`echo ../../../../lib64/libgfortran.so.5.* | sed s~/../lib64/~/~` 32/l
ln -sf ../`echo ../../../../lib64/libgomp.so.1.* | sed s~/../lib64/~/~` 32/libgomp.so
%if %{build_go}
rm -f libgo.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgo.so.24.* | sed 's,^.*libg,libg,'`' )' > libgo.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgo.so.24.* | sed 's,^.*libg,libg,'`' )' > 32/libgo.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgo.so.25.* | sed 's,^.*libg,libg,'`' )' > libgo.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgo.so.25.* | sed 's,^.*libg,libg,'`' )' > 32/libgo.so
%endif
%if %{build_libquadmath}
rm -f libquadmath.so
@@ -2112,8 +2180,8 @@ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgphobos.so.6.* | sed 's
%if %{build_m2}
for i in cor iso log min pim; do
rm -f libm2$i.so
- echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libm2$i.so.20.* | sed 's,^.*libm,libm,'`' )' > libm2$i.so
- echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libm2$i.so.20.* | sed 's,^.*libm,libm,'`' )' > 32/libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libm2$i.so.21.* | sed 's,^.*libm,libm,'`' )' > libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libm2$i.so.21.* | sed 's,^.*libm,libm,'`' )' > 32/libm2$i.so
rm -f 32/m2/m2$i/*.{a,la}
ln -sf ../../libm2$i.so 32/m2/m2$i/
ln -sf ../../libm2$i.a 32/m2/m2$i/
@@ -2121,8 +2189,13 @@ done
%endif
%if %{build_cobol}
rm -f libgcobol.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgcobol.so.1.* | sed 's,^.*libg,libg,'`' )' > libgcobol.so
-#echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgcobol.so.1.* | sed 's,^.*libg,libg,'`' )' > 32/libgcobol.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgcobol.so.2.* | sed 's,^.*libg,libg,'`' )' > libgcobol.so
+#echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgcobol.so.2.* | sed 's,^.*libg,libg,'`' )' > 32/libgcobol.so
+%endif
+%if %{build_algol68}
+rm -f libga68.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libga68.so.2.* | sed 's,^.*libg,libg,'`' )' > libga68.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libga68.so.2.* | sed 's,^.*libg,libg,'`' )' > 32/libga68.so
%endif
%if %{build_libitm}
rm -f libitm.so
@@ -2181,6 +2254,10 @@ done
ln -sf ../lib32/libgcobol.a 32/libgcobol.a
ln -sf lib64/libgcobol.a libgcobol.a
%endif
+%if %{build_algol68}
+ln -sf ../lib32/libga68.a 32/libga68.a
+ln -sf lib64/libga68.a libga68.a
+%endif
%if %{build_libitm}
ln -sf ../lib32/libitm.a 32/libitm.a
ln -sf lib64/libitm.a libitm.a
@@ -2233,6 +2310,9 @@ done
%if %{build_cobol}
#ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libgcobol.a 32/libgcobol.a
%endif
+%if %{build_algol68}
+ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libga68.a 32/libga68.a
+%endif
%if %{build_libitm}
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libitm.a 32/libitm.a
%endif
@@ -2303,11 +2383,14 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgphobos.so.6.*
%endif
%if %{build_m2}
for i in cor iso log min pim; do
- chmod 755 %{buildroot}%{_prefix}/%{_lib}/libm2$i.so.20.*
+ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libm2$i.so.21.*
done
%endif
%if %{build_cobol}
-chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgcobol.so.1.*
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgcobol.so.2.*
+%endif
+%if %{build_algol68}
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libga68.so.2.*
%endif
%if %{build_libitm}
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libitm.so.1.*
@@ -2332,7 +2415,7 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/liblsan.so.0.*
%endif
%if %{build_go}
# Avoid stripping these libraries and binaries.
-chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.24.*
+chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.25.*
chmod 644 %{buildroot}%{_prefix}/bin/go.gcc
chmod 644 %{buildroot}%{_prefix}/bin/gofmt.gcc
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo
@@ -2403,6 +2486,7 @@ rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gdc || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gm2 || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcobc || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcobol || :
+rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-ga68 || :
%ifarch %{multilib_64_archs}
# Remove libraries for the other arch on multilib arches
@@ -2428,7 +2512,7 @@ rm -rf %{buildroot}%{_prefix}/lib64/go/%{gcc_major}/%{gcc_target_platform}
rm -f %{buildroot}%{_prefix}/lib*/lib*.spec || :
rm -f %{buildroot}%{_prefix}/lib*/libstdc++.modules.json || :
-rm -f %{buildroot}%{_prefix}/%{_lib}/lib{asan,atomic,gcc_s,gcobol,gdruntime,gfortran,go,gomp-plugin-*,gomp,gphobos,hwasan}.so || :
+rm -f %{buildroot}%{_prefix}/%{_lib}/lib{asan,atomic,gcc_s,gcobol,ga68,gdruntime,gfortran,go,gomp-plugin-*,gomp,gphobos,hwasan}.so || :
rm -f %{buildroot}%{_prefix}/%{_lib}/lib{itm,lsan,m2{cor,iso,log,min,pim},objc,quadmath,stdc++,tsan,ubsan}.so || :
rm -f %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/install-tools/{fixinc.sh,mkinstalldirs} || :
rm -f %{buildroot}%{_prefix}/share/locale/*/LC_MESSAGES/libstdc++.mo || :
@@ -2648,6 +2732,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/stdatomic.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/gcov.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/stdckdint.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/stdcountof.h
%ifarch %{ix86} x86_64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/mmintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/xmmintrin.h
@@ -2759,12 +2844,6 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/amxfp8intrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/amxmovrsintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/amxtf32intrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/amxtransposeintrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2-512bf16intrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2-512convertintrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2-512mediaintrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2-512minmaxintrin.h
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2-512satcvtintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2bf16intrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2convertintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2copyintrin.h
@@ -2772,6 +2851,8 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2minmaxintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx10_2satcvtintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/movrsintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx512bmmintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx512bmmvlintrin.h
%endif
%ifarch ia64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/ia64intrin.h
@@ -2836,6 +2917,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_bitmanip.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_th_vector.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/sifive_vector.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/andes_vector.h
%endif
%if %{build_libasan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/sanitizer
@@ -3294,7 +3376,7 @@ end
%doc rpm.doc/gm2/*
%files -n libgm2
-%{_prefix}/%{_lib}/libm2*.so.20*
+%{_prefix}/%{_lib}/libm2*.so.21*
%doc rpm.doc/libgm2/*
%files -n libgm2-static
@@ -3326,11 +3408,11 @@ end
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cobol1
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcobol.spec
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcobol.so
-%{_datadir}/gcobol
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/cobol
%doc rpm.doc/gcobol/*
%files -n libgcobol
-%{_prefix}/%{_lib}/libgcobol.so.1*
+%{_prefix}/%{_lib}/libgcobol.so.2*
%doc rpm.doc/libgcobol/*
%files -n libgcobol-static
@@ -3340,6 +3422,53 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcobol.a
%endif
+%if %{build_algol68}
+%files algol68
+%{_prefix}/bin/ga68
+%{_mandir}/man1/ga68.1*
+%dir %{_prefix}/libexec/gcc
+%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
+%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/a681
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libga68.spec
+%ifarch sparcv9 sparc64 ppc ppc64 ppc64p7
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libga68.a
+%endif
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libga68.so
+%ifarch sparcv9 ppc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libga68.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libga68.so
+%endif
+%ifarch %{multilib_64_archs}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libga68.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libga68.so
+%endif
+%{_infodir}/ga68*
+%doc rpm.doc/algol68/*
+
+%files -n libga68
+%{_prefix}/%{_lib}/libga68.so.2*
+%doc rpm.doc/libga68/*
+
+%files -n libga68-static
+%dir %{_prefix}/lib/gcc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}
+%ifarch sparcv9 ppc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32/libga68.a
+%endif
+%ifarch sparc64 ppc64 ppc64p7
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64/libga68.a
+%endif
+%ifnarch sparcv9 sparc64 ppc ppc64 ppc64p7
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libga68.a
+%endif
+%endif
+
%if %{build_ada}
%files gnat
%{_prefix}/bin/gnat
@@ -3656,8 +3785,8 @@ end
%doc rpm.doc/go/*
%files -n libgo
-%{_prefix}/%{_lib}/libgo.so.24
-%attr(755,root,root) %{_prefix}/%{_lib}/libgo.so.24.*
+%{_prefix}/%{_lib}/libgo.so.25
+%attr(755,root,root) %{_prefix}/%{_lib}/libgo.so.25.*
%doc rpm.doc/libgo/*
%files -n libgo-devel
@@ -3809,510 +3938,5 @@ end
%endif
%changelog
-* Thu Dec 11 2025 Jakub Jelinek 15.2.1-5
-- update from releases/gcc-15 branch
- - PRs ada/111433, ada/115305, ada/122640, ada/123037, c/121506, c/123018,
- c++/119580, c++/120529, c++/120876, c++/121325, c++/121445,
- c++/122625, c++/122658, c++/122677, c++/122789, fortran/122709,
- fortran/122977, libstdc++/122661, libstdc++/122726, libstdc++/122743,
- libstdc++/122842, libstdc++/122921, lto/122515, middle-end/120052,
- middle-end/120564, middle-end/121581, middle-end/122624,
- rtl-optimization/122627, target/110796, target/118446, target/119275,
- target/121853, target/122175, target/122189, target/122216,
- target/122446, target/122539, target/122652, target/122656,
- target/122692, target/122695, target/122858, target/122867,
- target/122991, tree-optimization/121776, tree-optimization/122126,
- tree-optimization/122225, tree-optimization/122943
-- create gnatgcc symlink only when building Ada
-- avoid building libssp and disabled libraries
-- remove various unpackaged files from the buildroot
-
-* Tue Nov 11 2025 Jakub Jelinek 15.2.1-4
-- update from releases/gcc-15 branch
- - PRs ada/81087, ada/118208, ada/118782, c++/122192, c++/122253, c++/122310,
- c++/122381, c++/122421, fortran/107968, fortran/114023,
- fortran/122206, fortran/122386, rtl-optimization/122321,
- target/99930, target/118460, target/119079, target/120674,
- target/121604, target/122097, target/122270, target/122323,
- target/122516, target/122527, tree-optimization/122012,
- tree-optimization/122394, tree-optimization/122408,
- tree-optimization/122505
- - fix ICE while building firefox with LTO+PGO (#2395476, PR lto/122620)
-
-* Wed Oct 22 2025 Jakub Jelinek 15.2.1-3
-- update from releases/gcc-15 branch
- - PRs ada/107536, ada/113536, ada/117517, ada/118343, c/122188, c++/120757,
- c++/121981, c++/122302, fortran/108581, fortran/121616,
- fortran/121939, go/104290, libstdc++/122062, libstdc++/122322,
- middle-end/121922, middle-end/122133, target/110812, target/121599,
- target/121652, target/121742, target/121780, target/121781,
- target/121845, target/121875, target/122119, target/122177,
- target/122187, target/122210, target/122220, target/122222,
- target/122223, tree-optimization/121772, tree-optimization/122104,
- tree-optimization/122213
-- package libgcobol.spec (#2401679)
-
-* Wed Sep 24 2025 Jakub Jelinek 15.2.1-2
-- update from releases/gcc-15 branch
- - PRs ada/121968, bootstrap/118009, bootstrap/119089, c++/97740, c++/119859,
- c++/120499, c++/120620, c++/121351, c++/121396, c++/121524,
- c++/121724, c++/121795, c++/121801, c++/121977, c++/122015,
- c++/122019, fortran/89092, fortran/121263, libfortran/121234,
- libgcc/117600, libstdc++/110853, libstdc++/117276, libstdc++/119861,
- libstdc++/120390, libstdc++/120698, libstdc++/121097,
- libstdc++/121313, libstdc++/121374, libstdc++/121496,
- libstdc++/121745, libstdc++/121827, middle-end/121453,
- middle-end/121828, middle-end/121831, rtl-optimization/87600,
- rtl-optimization/120718, rtl-optimization/120983,
- rtl-optimization/121253, rtl-optimization/121757, target/49857,
- target/81540, target/116445, target/118280, target/118885,
- target/119830, target/120476, target/120691, target/120986,
- target/121007, target/121118, target/121208, target/121294,
- target/121414, target/121449, target/121464, target/121510,
- target/121534, target/121542, target/121548, target/121602,
- target/121608, target/121634, target/121749, target/121794,
- target/121906, testsuite/118567, tree-optimization/107997,
- tree-optimization/121370, tree-optimization/121527,
- tree-optimization/121659, tree-optimization/121844,
- tree-optimization/121870, tree-optimization/122016
-
-* Fri Aug 8 2025 Jakub Jelinek 15.2.1-1
-- update from releases/gcc-15 branch
- - GCC 15.2 release
- - PRs ada/120440, ada/121184, c/119950, c/120055, c/120353, c/120354,
- c++/95615, c++/108080, c++/109283, c++/115605, c++/115908, c++/116775,
- c++/118074, c++/118903, c++/119916, c++/120224, c++/120243,
- c++/120273, c++/120412, c++/120453, c++/120495, c++/120577,
- c++/120756, c++/120800, c++/120845, c++/121055, c++/121133,
- c++/121219, c++/121238, cobol/119231, cobol/119323, cobol/119335,
- cobol/119337, cobol/119377, cobol/119524, cobol/119632, cobol/119695,
- cobol/119770, cobol/119771, cobol/119772, cobol/119790, cobol/119810,
- cobol/119885, cobol/119975, cobol/120251, cobol/120328, cobol/120402,
- cobol/120621, cobol/120765, cobol/120772, cobol/120779, cobol/120790,
- cobol/120791, cobol/120794, fortran/119106, fortran/121145,
- fortran/121203, ipa/114790, libstdc++/119962, libstdc++/121373,
- lto/120308, middle-end/119835, middle-end/121095, middle-end/121159,
- middle-end/121322, middle-end/121389, rtl-optimization/121340,
- target/118891, target/119692, target/119737, target/119853,
- target/119854, target/120119, target/120351, target/120427,
- target/120530, target/120645, target/120714, target/121027,
- target/121028, target/121064, target/121121, target/121274,
- target/121277, testsuite/121286, testsuite/121288,
- tree-optimization/117423, tree-optimization/118891,
- tree-optimization/119085, tree-optimization/121127,
- tree-optimization/121130, tree-optimization/121190,
- tree-optimization/121202, tree-optimization/121256,
- tree-optimization/121264, tree-optimization/121320,
- tree-optimization/121323, tree-optimization/121413
-
-* Sat Jul 19 2025 Jakub Jelinek 15.1.1-5
-- update from releases/gcc-15 branch
- - PRs cobol/119818, middle-end/120935, modula2/121164, testsuite/119508
-
-* Fri Jul 18 2025 Jakub Jelinek 15.1.1-4
-- update from releases/gcc-15 branch
- - PRs ada/121056, c++/87097, c++/120569, c++/120628, c++/120954,
- fortran/104428, fortran/120637, fortran/120843, fortran/120847,
- fortran/121060, ipa/121023, libstdc++/118681, libstdc++/119754,
- libstdc++/120997, middle-end/120709, modula2/117203, modula2/119650,
- modula2/120253, modula2/120389, modula2/120474, modula2/120497,
- modula2/120542, modula2/120606, modula2/120673, modula2/120731,
- modula2/120912, rtl-optimization/120242, rtl-optimization/120627,
- rtl-optimization/120736, rtl-optimization/120813, target/118241,
- target/120356, target/120807, target/120908, target/120995,
- target/120999, tree-optimization/118669, tree-optimization/120358,
- tree-optimization/120780, tree-optimization/120817,
- tree-optimization/120924, tree-optimization/120944,
- tree-optimization/121035, tree-optimization/121049,
- tree-optimization/121059, tree-optimization/121131
-
-* Mon Jul 7 2025 Jakub Jelinek 15.1.1-3
-- update from releases/gcc-15 branch
- - PRs ada/120665, ada/120705, ada/120854, c/120180, c++/116064, c++/120123,
- c++/120363, c++/120413, c++/120414, c++/120471, c++/120502,
- c++/120555, c++/120575, c++/120684, c++/120940, fortran/51961,
- fortran/85750, fortran/99838, fortran/101735, fortran/102599,
- fortran/114022, fortran/119856, fortran/119948, fortran/120193,
- fortran/120355, fortran/120483, fortran/120711, fortran/120784,
- ipa/120295, libfortran/119856, libstdc++/99832, libstdc++/120367,
- libstdc++/120432, libstdc++/120465, libstdc++/120548,
- libstdc++/120625, libstdc++/120648, libstdc++/120650,
- libstdc++/120931, libstdc++/120934, middle-end/118694,
- middle-end/120369, middle-end/120547, middle-end/120608,
- middle-end/120631, rtl-optimization/116389, rtl-optimization/120050,
- rtl-optimization/120182, rtl-optimization/120347,
- rtl-optimization/120423, rtl-optimization/120550,
- rtl-optimization/120795, target/86772, target/119971, target/120042,
- target/120441, target/120442, target/120480, target/120624,
- testsuite/52641, testsuite/120082, testsuite/120919,
- tree-optimization/116352, tree-optimization/119960,
- tree-optimization/120003, tree-optimization/120341,
- tree-optimization/120357, tree-optimization/120638,
- tree-optimization/120654, tree-optimization/120677,
- tree-optimization/120729, tree-optimization/120927
-- fix up FE lowering of pointer arith (PR c/120837)
-- perform %%check with -foffload=disable flag
-
-* Wed May 21 2025 Jakub Jelinek 15.1.1-2
-- update from releases/gcc-15 branch
- - PRs ada/112958, ada/120104, c/120057, c++/119863, c++/119864, c++/119938,
- c++/119939, c++/119981, c++/119996, c++/120012, c++/120013,
- c++/120023, c++/120125, c++/120161, c++/120350, fortran/102891,
- fortran/102900, fortran/119928, fortran/119986, fortran/120049,
- fortran/120107, fortran/120139, fortran/120163, fortran/120179,
- fortran/120191, ipa/119852, ipa/119973, ipa/120006, ipa/120146,
- libfortran/120152, libfortran/120153, libfortran/120158,
- libfortran/120196, libstdc++/118260, libstdc++/119427,
- libstdc++/119714, libstdc++/120029, libstdc++/120114,
- libstdc++/120159, libstdc++/120187, libstdc++/120190,
- libstdc++/120198, libstdc++/120293, modula2/115276, modula2/119914,
- modula2/119915, modula2/120117, modula2/120188, preprocessor/116047,
- preprocessor/120061, target/119610, testsuite/119909,
- tree-optimization/111873, tree-optimization/119712,
- tree-optimization/120043, tree-optimization/120048,
- tree-optimization/120074, tree-optimization/120089,
- tree-optimization/120143, tree-optimization/120211
-
-* Fri Apr 25 2025 Jakub Jelinek 15.1.1-1
-- update from releases/gcc-15 branch
- - GCC 15.1 release
- - PRs fortran/119836, target/119327, target/119873, tree-optimization/118407
-
-* Fri Apr 18 2025 Jakub Jelinek 15.0.1-0.14
-- update from releases/gcc-14 branch
- - GCC 15.1.0-rc1
- - PRs tree-optimization/119858
-
-* Thu Apr 17 2025 Jakub Jelinek 15.0.1-0.13
-- update from trunk and releases/gcc-14 branch
- - PRs ada/119643, c/88382, c/119717, c++/99214, c++/101180, c++/106618,
- c++/111075, c++/112288, c++/113360, c++/113835, c++/114772,
- c++/114970, c++/115639, c++/116416, c++/116954, c++/119175,
- c++/119345, c++/119687, c++/119692, c++/119755, c++/119807,
- cobol/119217, cobol/119302, cobol/119694, cobol/119759, cobol/119776,
- cobol/119777, d/109023, d/119758, d/119761, d/119799, d/119817,
- d/119826, driver/90465, driver/119727, fortran/106948, fortran/119669,
- ipa/113203, ipa/119318, ipa/119803, libfortran/119502, libgcc/101075,
- libgcc/119796, libgomp/119849, libstdc++/21334, libstdc++/119725,
- libstdc++/119748, libstdc++/119840, lto/119792, middle-end/14708,
- middle-end/105548, middle-end/119706, middle-end/119808,
- modula2/119735, modula2/119779, rtl-optimization/118502,
- rtl-optimization/119785, rust/119341, rust/119342, sanitizer/119801,
- target/42683, target/97106, target/97585, target/106445,
- target/108134, target/113633, target/116827, target/118794,
- target/119298, target/119386, target/119533, target/119547,
- target/119673, target/119784, target/119834, testsuite/117706,
- translation/119684, tree-optimization/71094, tree-optimization/87909,
- tree-optimization/112822, tree-optimization/116093,
- tree-optimization/118476, tree-optimization/119351,
- tree-optimization/119399, tree-optimization/119706,
- tree-optimization/119707, tree-optimization/119718,
- tree-optimization/119722, tree-optimization/119757,
- tree-optimization/119778
-
-* Thu Apr 10 2025 Jakub Jelinek 15.0.1-0.12
-- update from trunk
- - PRs ada/119571, analyzer/113253, bootstrap/119680, c/78008, c/81831,
- c/101440, c/114957, c/117689, c/118118, c/119173, c/119582, c/119612,
- c++/60972, c++/64500, c++/90468, c++/99546, c++/106976, c++/109961,
- c++/113925, c++/116285, c++/116960, c++/117336, c++/117530,
- c++/117849, c++/118249, c++/118626, c++/118629, c++/118698,
- c++/118982, c++/119303, c++/119383, c++/119387, c++/119401,
- c++/119462, c++/119518, c++/119551, c++/119563, c++/119564,
- c++/119574, c++/119608, c++/119652, cobol/119283, cobol/119295,
- cobol/119364, cobol/119414, cobol/119521, cobol/119682, d/117002,
- d/117832, d/118309, driver/58973, fortran/101602, fortran/119460,
- fortran/119656, gcov-profile/119535, gcov-profile/119553,
- gcov-profile/119618, ipa/119599, libfortran/119460, libstdc++/109162,
- libstdc++/110498, libstdc++/114758, libstdc++/114945,
- libstdc++/115046, libstdc++/119517, libstdc++/119545,
- libstdc++/119550, libstdc++/119593, libstdc++/119620,
- libstdc++/119642, libstdc++/119671, middle-end/78874,
- middle-end/101018, middle-end/112589, middle-end/116595,
- middle-end/118965, middle-end/119442, middle-end/119482,
- middle-end/119537, middle-end/119541, middle-end/119559,
- middle-end/119613, middle-end/119662, preprocessor/118674,
- preprocessor/119391, rtl-optimization/119291, rtl-optimization/119594,
- rtl-optimization/119672, rtl-optimization/119689, target/117759,
- target/119308, target/119369, target/119473, target/119539,
- target/119549, target/119556, target/119572, target/119573,
- target/119645, target/119664, target/119678, testsuite/116398,
- testsuite/118597, tree-optimization/80331, tree-optimization/87502,
- tree-optimization/103827, tree-optimization/113281,
- tree-optimization/118924, tree-optimization/119491,
- tree-optimization/119493, tree-optimization/119532,
- tree-optimization/119534, tree-optimization/119586,
- tree-optimization/119614, tree-optimization/119616,
- tree-optimization/119640, web/119227
- - fix up LTO opts handling (##2356219, PR lto/119625)
-
-* Sat Mar 29 2025 Jakub Jelinek 15.0.1-0.11
-- update from trunk
- - PRs ada/119265, ada/119440, analyzer/119278, bootstrap/119513, c/116545,
- c/118061, c/118765, c/119311, c/119350, c/119366, c++/101881,
- c++/114525, c++/114992, c++/118104, c++/118920, c++/118961,
- c++/119194, c++/119233, c++/119316, c++/119344, c++/119370,
- c++/119378, c++/119379, cobol/119213, cobol/119214, cobol/119241,
- cobol/119242, cobol/119244, cobol/119290, cobol/119301, cobol/119390,
- d/117621, d/118545, debug/101533, driver/101544, fortran/60560,
- fortran/85836, fortran/116706, fortran/118796, fortran/119272,
- fortran/119338, fortran/119349, fortran/119380, fortran/119403,
- fortran/119406, fortran/119419, gcov-profile/118442, ipa/98265,
- ipa/116572, ipa/119147, ipa/119376, ipa/119484, libfortran/85836,
- libgomp/96835, libitm/88319, libstdc++/101527, libstdc++/101587,
- libstdc++/108487, libstdc++/111055, libstdc++/111138,
- libstdc++/116440, libstdc++/117214, libstdc++/117983,
- libstdc++/118699, libstdc++/119135, libstdc++/119282,
- libstdc++/119358, libstdc++/119415, libstdc++/119429,
- libstdc++/119469, libstdc++/119488, middle-end/93437,
- middle-end/112938, middle-end/113546, middle-end/117811,
- middle-end/118627, middle-end/118795, middle-end/119325,
- modula2/115111, modula2/118045, modula2/118600, modula2/119449,
- modula2/119504, other/42270, other/119218, other/119250, other/119510,
- preprocessor/108900, rtl-optimization/118615, rtl-optimization/118914,
- rtl-optimization/119285, rtl-optimization/119307, rust/119333,
- target/55583, target/91614, target/92713, target/96226, target/98743,
- target/101544, target/112980, target/117069, target/117092,
- target/117452, target/118068, target/119010, target/119114,
- target/119120, target/119172, target/119224, target/119235,
- target/119270, target/119286, target/119355, target/119357,
- target/119408, target/119421, target/119425, target/119428,
- target/119450, target/119465, testsuite/113634, testsuite/113965,
- testsuite/116163, testsuite/119220, testsuite/119382,
- testsuite/119489, tree-optimization/37143, tree-optimization/105820,
- tree-optimization/118616, tree-optimization/119155,
- tree-optimization/119274, tree-optimization/119287,
- tree-optimization/119389, tree-optimization/119417,
- tree-optimization/119483
-- package gcc-gcobol on x86_64 and aarch64 so far
-- turn unversioned obsoletes into versioned ones
-
-* Thu Mar 13 2025 Jakub Jelinek 15.0.1-0.10
-- update from trunk
- - PRs analyzer/117262, c/60440, c/67301, c/112960, c/113515, c/117029,
- c/117178, c/118579, c/119183, c++/98533, c++/100589, c++/109431,
- c++/110584, c++/114795, c++/115580, c++/116740, c++/117364,
- c++/117504, c++/117512, c++/118775, c++/118787, c++/118799,
- c++/118874, c++/119073, c++/119076, c++/119102, c++/119123,
- c++/119134, c++/119138, c++/119150, c++/119154, c++/119162,
- cobol/119216, cobol/119229, d/119139, debug/119190, fortran/47928,
- fortran/77872, fortran/98903, fortran/101577, fortran/103391,
- fortran/104684, fortran/104826, fortran/107143, fortran/118747,
- fortran/119049, fortran/119054, fortran/119074, fortran/119078,
- fortran/119118, fortran/119157, fortran/119199, ipa/118318,
- ipa/118785, ipa/119067, libgcc/119151, libstdc++/108053,
- libstdc++/113310, libstdc++/115215, libstdc++/115218,
- libstdc++/119081, libstdc++/119110, libstdc++/119121,
- libstdc++/119144, lto/114501, middle-end/97323, middle-end/118457,
- middle-end/118801, middle-end/119119, middle-end/119204,
- middle-end/119219, middle-end/119226, modula2/118998, modula2/119088,
- modula2/119192, other/38768, other/119052, preprocessor/119202,
- rtl-optimization/114492, rtl-optimization/116564,
- rtl-optimization/117477, rtl-optimization/118739,
- rtl-optimization/119046, rtl-optimization/119071,
- rtl-optimization/119099, sanitizer/56682, target/114222,
- target/114991, target/115258, target/115439, target/115485,
- target/115835, target/116708, target/116901, target/117931,
- target/117955, target/118351, target/118892, target/118906,
- target/118934, target/118942, target/118956, target/119084,
- target/119115, target/119127, target/119131, target/119133,
- target/119171, target/119238, testsuite/115248,
- tree-optimization/116125, tree-optimization/116901,
- tree-optimization/117919, tree-optimization/118922,
- tree-optimization/118976, tree-optimization/119057,
- tree-optimization/119096, tree-optimization/119145,
- tree-optimization/119166
-- use %%autopatch in the spec file
-
-* Sat Mar 1 2025 Jakub Jelinek 15.0.1-0.9
-- update from trunk
- - PRs c/114870, c/119001, c++/110822, c++/114913, c++/118516, c++/118928,
- c++/118986, c++/119038, c++/119045, d/116961, d/118654,
- fortran/108233, fortran/108369, fortran/118730, fortran/118789,
- ipa/111245, ipa/118243, jit/117047, libstdc++/93059, libstdc++/104606,
- libstdc++/105609, libstdc++/106612, libstdc++/112490,
- libstdc++/112803, libstdc++/118083, lto/91299, middle-end/66279,
- middle-end/115871, middle-end/118819, middle-end/118860,
- middle-end/119021, rtl-optimization/116336, rtl-optimization/117712,
- rtl-optimization/119002, target/107635, target/109189, target/115458,
- target/118931, target/118940, testsuite/115028, testsuite/116143,
- translation/118991, tree-optimization/87984, tree-optimization/116855,
- tree-optimization/118464, tree-optimization/119030
-- fix ranger related miscompilation (PR tree-optimization/118953)
-- fix miscompilation of floating point comparisons if NaNs can appear
- (#2346233, PR rtl-optimization/119002)
-- fix ICF related miscompilation (PR ipa/119006)
-
-* Tue Feb 25 2025 Jakub Jelinek 15.0.1-0.8
-- update from trunk
- - PRs analyzer/118300, c/117023, c/119000, c++/66519, c++/66878, c++/70037,
- c++/70536, c++/82794, c++/82936, c++/83144, c++/86769, c++/86933,
- c++/94100, c++/96364, c++/101740, c++/102455, c++/107637, c++/110345,
- c++/113800, c++/115586, c++/116379, c++/117106, c++/117324,
- c++/118053, c++/118190, c++/118282, c++/118304, c++/118306,
- c++/118319, c++/118574, c++/118661, c++/118763, c++/118773,
- c++/118807, c++/118822, c++/118833, c++/118846, c++/118849,
- c++/118856, c++/118876, c++/118923, c++/118981, c++/188574, d/111628,
- debug/118790, driver/117739, fortran/24878, fortran/47485,
- fortran/48958, fortran/56423, fortran/59252, fortran/107635,
- fortran/115271, fortran/116829, fortran/117430, fortran/118080,
- fortran/118159, fortran/118740, fortran/118745, fortran/118750,
- fortran/118845, fortran/118862, go/118746, ipa/118097, jit/118780,
- libfortran/114618, libstdc++/100612, libstdc++/111050,
- libstdc++/115209, libstdc++/118160, libstdc++/118559,
- libstdc++/118701, libstdc++/118811, libstdc++/118855,
- libstdc++/118865, lto/118125, middle-end/107067, middle-end/113525,
- middle-end/116351, middle-end/117263, middle-end/118288,
- middle-end/118950, middle-end/118993, modula2/115112, modula2/118761,
- modula2/118978, other/116613, other/118919, rtl-optimization/102150,
- rtl-optimization/108840, rtl-optimization/115568,
- rtl-optimization/115932, rtl-optimization/116028,
- rtl-optimization/116244, rtl-optimization/117081,
- rtl-optimization/117082, rtl-optimization/117239,
- rtl-optimization/117506, rtl-optimization/117922,
- rtl-optimization/118497, sarif-replay/118792, sarif-replay/118881,
- target/69374, target/86660, target/94282, target/109093,
- target/109780, target/113331, target/114516, target/114522,
- target/115123, target/115478, target/115703, target/117674,
- target/117991, target/118089, target/118146, target/118248,
- target/118540, target/118561, target/118601, target/118623,
- target/118685, target/118764, target/118768, target/118771,
- target/118772, target/118776, target/118806, target/118813,
- target/118815, target/118825, target/118828, target/118832,
- target/118835, target/118843, target/118844, target/118872,
- target/118878, target/118936, testsuite/116604, testsuite/116986,
- testsuite/118754, tree-optimization/82142, tree-optimization/86270,
- tree-optimization/90579, tree-optimization/98028,
- tree-optimization/98845, tree-optimization/108357,
- tree-optimization/110449, tree-optimization/115538,
- tree-optimization/117790, tree-optimization/118521,
- tree-optimization/118706, tree-optimization/118727,
- tree-optimization/118749, tree-optimization/118756,
- tree-optimization/118805, tree-optimization/118817,
- tree-optimization/118852, tree-optimization/118895,
- tree-optimization/118915, tree-optimization/118954,
- tree-optimization/118973
-- drop on riscv riscv_cmo.h header from file list, add sifive_vector.h
-
-* Tue Feb 4 2025 Jakub Jelinek 15.0.1-0.7
-- update from trunk
- - PRs ada/118712, ada/118731, c/118742, c++/79786, c++/98893, c++/108205,
- c++/109918, c++/114619, c++/116506, c++/116880, c++/116914,
- c++/117114, c++/117778, c++/118265, c++/118470, c++/118491,
- c++/118718, c++/118719, fortran/93289, lto/113207, middle-end/115913,
- middle-end/116926, modula2/117411, modula2/118703,
- rtl-optimization/111673, rtl-optimization/117248,
- rtl-optimization/117611, target/116010, target/118713,
- testsuite/116845, tree-optimization/117113, tree-optimization/118717
-
-* Sat Feb 1 2025 Jakub Jelinek 15.0.1-0.6
-- update from trunk
- - PRs c++/117501, c++/117516, debug/100530, fortran/108454, fortran/118714,
- ipa/117432, libstdc++/118156, middle-end/117498, modula2/115032,
- rtl-optimization/116234, target/113689, target/115673,
- tree-optimization/114277
-- use rpm.execute instead of posix.fork, posix.exec and posix.wait in libgcc
- scriptlets; guard them on ldconfig macro existence and use that macro instead
- of explicit /sbin/ldconfig (#2291927)
-
-* Thu Jan 30 2025 Jakub Jelinek 15.0.1-0.5
-- update from trunk
- - PRs c/116357, c++/57533, c++/114292, c++/116524, c++/117855, c++/118239,
- c++/118285, c++/118632, c++/118655, c++/118673, d/118477,
- fortran/58857, fortran/110993, fortran/118640, fortran/118683,
- libstdc++/98749, libstdc++/118413, libstdc++/118563,
- middle-end/118643, middle-end/118684, middle-end/118692,
- middle-end/118695, modula2/116073, modula2/117737, modula2/118183,
- other/118675, preprocessor/118168, rtl-optimization/118320,
- rtl-optimization/118429, rtl-optimization/118638,
- rtl-optimization/118662, target/114085, target/116860, target/117173,
- target/117688, target/118103, target/118490, target/118642,
- target/118646, target/118663, target/118696, testsuite/118127,
- tree-optimization/112859, tree-optimization/114052,
- tree-optimization/115347, tree-optimization/117270,
- tree-optimization/117424, tree-optimization/117892,
- tree-optimization/118505, tree-optimization/118637,
- tree-optimization/118653
-- fix up C++ list conversion for #embed or large series of comma
- separated small constants (PR c++/118671)
-- punt in niters clz/ctz creation if internal function can't be used
- and frontend didn't build __builtin_c{l,t}z{,l,ll} builtins
- (PR tree-optimization/118689)
-
-* Sat Jan 25 2025 Jakub Jelinek 15.0.1-0.4
-- update from trunk
- - PRs c/118639, c++/105440, c++/107522, c++/107741, c++/115769, c++/116417,
- c++/116568, c++/116756, c++/117153, c++/117397, c++/117602,
- c++/117775, c++/117827, c++/118047, c++/118049, c++/118101,
- c++/118124, c++/118139, c++/118147, c++/118199, c++/118214,
- c++/118225, c++/118245, c++/118255, c++/118278, c++/118355,
- c++/118390, c++/118396, c++/118454, c++/118486, c++/118509,
- c++/118513, c++/118523, c++/118525, c++/118528, c++/118532,
- c++/118534, c++/118582, c++/118590, c++/118604, d/114434, d/115249,
- d/116373, d/117115, d/118438, d/118448, d/118449, d/118584,
- fortran/71884, fortran/81978, fortran/96087, fortran/107122,
- fortran/118321, fortran/118359, fortran/118441, fortran/118613,
- gcov-profile/116743, ipa/116068, ipa/118400, jit/117886,
- libfortran/118406, libfortran/118536, libfortran/118571,
- libstdc++/99995, libstdc++/100249, libstdc++/109849, libstdc++/118158,
- libstdc++/118185, lto/118238, middle-end/112779, middle-end/113904,
- middle-end/114596, middle-end/114877, middle-end/118140,
- middle-end/118273, middle-end/118472, modula2/118010, modula2/118589,
- objc++/118586, rtl-optimization/109592, rtl-optimization/113994,
- rtl-optimization/117868, rtl-optimization/118067,
- rtl-optimization/118562, rtl-optimization/118591,
- rtl-optimization/1180167, sarif-replay/117670, target/80813,
- target/110901, target/113257, target/113560, target/114442,
- target/116256, target/116308, target/116593, target/117079,
- target/117726, target/118154, target/118170, target/118182,
- target/118270, target/118329, target/118357, target/118489,
- target/118497, target/118501, target/118510, target/118511,
- target/118512, target/118531, target/118560, target/118609,
- testsuite/116448, testsuite/117958, testsuite/118451,
- tree-optimization/92539, tree-optimization/102705,
- tree-optimization/115494, tree-optimization/115777,
- tree-optimization/115895, tree-optimization/116010,
- tree-optimization/117668, tree-optimization/117875,
- tree-optimization/118012, tree-optimization/118077,
- tree-optimization/118224, tree-optimization/118348,
- tree-optimization/118360, tree-optimization/118384,
- tree-optimization/118430, tree-optimization/118456,
- tree-optimization/118483, tree-optimization/118487,
- tree-optimization/118514, tree-optimization/118522,
- tree-optimization/118529, tree-optimization/118552,
- tree-optimization/118558, tree-optimization/118569,
- tree-optimization/118572, tree-optimization/118605,
- tree-optimization/118628, tree-optimization/118634
-- fix libstdc++.modules.json content after relocation
-
-* Tue Jan 14 2025 Jakub Jelinek 15.0.1-0.3
-- temporary fix for coroutine range for handling (PR c++/117231)
-
-* Tue Jan 14 2025 Jakub Jelinek 15.0.1-0.2
-- update from trunk
- - PRs ada/118459, c/116871, c++/118445, modula2/116557, target/116030,
- target/117682, tree-optimization/118405
-
-* Mon Jan 13 2025 Jakub Jelinek 15.0.1-0.1
-- update from trunk
- - PRs c/118112, c++/114630, d/117701, fortran/115788, fortran/118432,
- lto/118181, middle-end/64242, middle-end/118303, middle-end/118411,
- middle-end/118415, modula2/118453, rtl-optimization/107455,
- target/115910, target/115921, target/118418, tree-optimization/117119,
- tree-optimization/117997, tree-optimization/118409
-
-* Sat Jan 11 2025 Jakub Jelinek 15.0.0-0.4
-- update from trunk
- - PRs ada/18765, ada/118274, c/116060, c/117866, c/118376, c++/117792,
- c++/117887, c++/117925, c++/117937, c++/117993, c++/118060,
- c++/118277, c++/118387, c++/118391, fortran/108434, fortran/118337,
- ipa/118138, rtl-optimization/117186, rtl-optimization/117467,
- rtl-optimization/117934, rtl-optimization/118266, target/65181,
- target/118017, target/118131, target/118188, target/118332,
- target/118362, testsuite/118025, tree-optimization/88575,
- tree-optimization/116126, tree-optimization/117927,
- tree-optimization/118206, tree-optimization/118211,
- tree-optimization/118344
-
-* Thu Jan 9 2025 Jakub Jelinek 15.0.0-0.3
+* Thu Dec 18 2025 Jakub Jelinek 16.0.0-0.2
- new package
diff --git a/gcc15-libgomp-strchr.patch b/gcc15-libgomp-strchr.patch
deleted file mode 100644
index 802f142..0000000
--- a/gcc15-libgomp-strchr.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-2025-11-22 Frank Scheiner
-
- * affinity-fmt.c: Make char *q a pointer to a const char.
-
---- libgomp/affinity-fmt.c.jj
-+++ libgomp/affinity-fmt.c
-@@ -327,7 +327,7 @@ gomp_display_affinity (char *buffer, size_t size,
- }
- if (c == '{')
- {
-- char *q = strchr (p + 1, '}');
-+ const char *q = strchr (p + 1, '}');
- if (q)
- gomp_fatal ("unsupported long type name '%.*s' in affinity "
- "format", (int) (q - (p + 1)), p + 1);
diff --git a/gcc15-Wno-format-security.patch b/gcc16-Wno-format-security.patch
similarity index 89%
rename from gcc15-Wno-format-security.patch
rename to gcc16-Wno-format-security.patch
index 66f62b8..9f4a8f9 100644
--- a/gcc15-Wno-format-security.patch
+++ b/gcc16-Wno-format-security.patch
@@ -32,14 +32,16 @@
fi
--- Makefile.tpl.jj 2023-11-29 13:21:41.680292662 +0100
+++ Makefile.tpl 2024-11-30 13:35:29.303196246 +0100
-@@ -450,9 +450,9 @@ LDFLAGS = @LDFLAGS@
+@@ -450,10 +450,10 @@ LDFLAGS = @LDFLAGS@
LIBCFLAGS = $(CFLAGS)
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
-GOCFLAGS = $(CFLAGS)
+-GA68FLAGS = @GA68FLAGS@
-GDCFLAGS = @GDCFLAGS@
-GM2FLAGS = $(CFLAGS)
+GOCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
++GA68FLAGS = $(filter-out -Wformat-security,@GA68FLAGS@)
+GDCFLAGS = $(filter-out -Wformat-security,@GDCFLAGS@)
+GM2FLAGS = $(filter-out -Wformat-security,$(CFLAGS))
@@ -47,14 +49,16 @@
--- Makefile.in.jj 2023-11-29 13:21:41.691292507 +0100
+++ Makefile.in 2024-11-30 13:36:12.113594079 +0100
-@@ -447,9 +447,9 @@ LDFLAGS = @LDFLAGS@
+@@ -447,10 +447,10 @@ LDFLAGS = @LDFLAGS@
LIBCFLAGS = $(CFLAGS)
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
-GOCFLAGS = $(CFLAGS)
+-GA68FLAGS = @GA68FLAGS@
-GDCFLAGS = @GDCFLAGS@
-GM2FLAGS = $(CFLAGS)
+GOCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
++GA68FLAGS = $(filter-out -Wformat-security,@GA68FLAGS@)
+GDCFLAGS = $(filter-out -Wformat-security,@GDCFLAGS@)
+GM2FLAGS = $(filter-out -Wformat-security,$(CFLAGS))
diff --git a/gcc15-d-shared-libphobos.patch b/gcc16-d-shared-libphobos.patch
similarity index 100%
rename from gcc15-d-shared-libphobos.patch
rename to gcc16-d-shared-libphobos.patch
diff --git a/gcc15-fortran-fdec-duplicates.patch b/gcc16-fortran-fdec-duplicates.patch
similarity index 100%
rename from gcc15-fortran-fdec-duplicates.patch
rename to gcc16-fortran-fdec-duplicates.patch
diff --git a/gcc15-hack.patch b/gcc16-hack.patch
similarity index 100%
rename from gcc15-hack.patch
rename to gcc16-hack.patch
diff --git a/gcc15-isl-dl.patch b/gcc16-isl-dl.patch
similarity index 100%
rename from gcc15-isl-dl.patch
rename to gcc16-isl-dl.patch
diff --git a/gcc15-isl-dl2.patch b/gcc16-isl-dl2.patch
similarity index 100%
rename from gcc15-isl-dl2.patch
rename to gcc16-isl-dl2.patch
diff --git a/gcc16-libgomp-build.patch b/gcc16-libgomp-build.patch
new file mode 100644
index 0000000..d814d18
--- /dev/null
+++ b/gcc16-libgomp-build.patch
@@ -0,0 +1,17 @@
+2025-12-15 Jakub Jelinek
+
+ * plugin/build-target-indirect-htab.h (create_target_indirect_map):
+ Use (void) htab_find instead of assert (htab_find) to silence
+ -Werror=unused-function because the latter triggers -Werror=address.
+
+--- libgomp/plugin/build-target-indirect-htab.h.jj 2025-09-17 09:03:28.934357899 +0200
++++ libgomp/plugin/build-target-indirect-htab.h 2025-12-15 16:11:51.894866968 +0100
+@@ -65,7 +65,7 @@ void*
+ create_target_indirect_map (size_t *h_size, size_t count,
+ uint64_t *host_addrs, uint64_t *device_addrs)
+ {
+- assert (htab_find); /* Silence -Werror=unused-function. */
++ (void) htab_find; /* Silence -Werror=unused-function. */
+
+ htab_t indirect_htab = htab_create (count);
+
diff --git a/gcc15-libgomp-omp_h-multilib.patch b/gcc16-libgomp-omp_h-multilib.patch
similarity index 100%
rename from gcc15-libgomp-omp_h-multilib.patch
rename to gcc16-libgomp-omp_h-multilib.patch
diff --git a/gcc15-libstdc++-docs.patch b/gcc16-libstdc++-docs.patch
similarity index 96%
rename from gcc15-libstdc++-docs.patch
rename to gcc16-libstdc++-docs.patch
index f9f33a7..f1fa736 100644
--- a/gcc15-libstdc++-docs.patch
+++ b/gcc16-libstdc++-docs.patch
@@ -4,7 +4,7 @@
FSF
-+ Release 15.2.1
++ Release 16.0.0
+
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
@@ -17,7 +17,7 @@
- The API documentation, rendered into HTML, can be viewed online
+ The API documentation, rendered into HTML, can be viewed locally
-+ for the 15.2.1 release,
++ for the 16.0.0 release,
+ online
for each GCC release
and
diff --git a/gcc15-libtool-no-rpath.patch b/gcc16-libtool-no-rpath.patch
similarity index 100%
rename from gcc15-libtool-no-rpath.patch
rename to gcc16-libtool-no-rpath.patch
diff --git a/gcc15-no-add-needed.patch b/gcc16-no-add-needed.patch
similarity index 96%
rename from gcc15-no-add-needed.patch
rename to gcc16-no-add-needed.patch
index 5817299..74f5c1f 100644
--- a/gcc15-no-add-needed.patch
+++ b/gcc16-no-add-needed.patch
@@ -34,4 +34,4 @@
+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
#endif
- #define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \
+
diff --git a/gcc15-pr119006.patch b/gcc16-pr119006.patch
similarity index 100%
rename from gcc15-pr119006.patch
rename to gcc16-pr119006.patch
diff --git a/gcc16-pr123114.patch b/gcc16-pr123114.patch
new file mode 100644
index 0000000..1e8eb9c
--- /dev/null
+++ b/gcc16-pr123114.patch
@@ -0,0 +1,46 @@
+2025-12-13 Jakub Jelinek
+
+ PR rtl-optimization/123114
+ * simplify-rtx.cc (simplify_context::simplify_relational_operation):
+ Verify XEXP (XEXP (op0, 0), 0) mode and use CONST0_RTX (cmp_mode)
+ instead of CONST0_RTX (mode).
+
+ * gcc.dg/pr123114.c: New test.
+
+--- gcc/simplify-rtx.cc.jj 2025-12-09 10:18:55.437229339 +0100
++++ gcc/simplify-rtx.cc 2025-12-13 23:04:14.672186706 +0100
+@@ -6509,8 +6509,9 @@ simplify_context::simplify_relational_op
+ /* only enters if op1 is 0 */
+ /* Verify IOR operand is NE */
+ && GET_CODE (XEXP (op0, 0)) == NE
++ && GET_MODE (XEXP (XEXP (op0, 0), 0)) == cmp_mode
+ /* Verify second NE operand is 0 */
+- && XEXP (XEXP (op0, 0), 1) == CONST0_RTX (mode))
++ && XEXP (XEXP (op0, 0), 1) == CONST0_RTX (cmp_mode))
+ {
+ rtx t = gen_rtx_IOR (cmp_mode, XEXP (XEXP (op0, 0), 0), XEXP (op0, 1));
+ t = gen_rtx_fmt_ee (code, mode, t, CONST0_RTX (mode));
+--- gcc/testsuite/gcc.dg/pr123114.c.jj 2025-12-13 23:13:53.528178273 +0100
++++ gcc/testsuite/gcc.dg/pr123114.c 2025-12-13 23:13:25.964657498 +0100
+@@ -0,0 +1,21 @@
++/* PR rtl-optimization/123114 */
++/* { dg-do compile } */
++/* { dg-options "-O3 -fno-tree-vrp" } */
++
++volatile int a, b, g;
++unsigned short e;
++int f;
++
++int
++main ()
++{
++ int c, d;
++ while (a)
++ {
++ c = e = b << 2;
++ d = f;
++ g = (c <= 0 && d) || c ? 0 : d;
++ a = g;
++ }
++ return 0;
++}
diff --git a/gcc16-pr123115.patch b/gcc16-pr123115.patch
new file mode 100644
index 0000000..2a75016
--- /dev/null
+++ b/gcc16-pr123115.patch
@@ -0,0 +1,17 @@
+2025-12-15 Jakub Jelinek
+
+ PR middle-end/123115
+ * defaults.h (EH_RETURN_DATA_REGNO): Add void (N) to the macro
+ definition inside of a comma expression before INVALID_REGNUM.
+
+--- gcc/defaults.h.jj 2025-08-05 08:19:26.667814010 +0200
++++ gcc/defaults.h 2025-12-15 11:33:16.656762266 +0100
+@@ -390,7 +390,7 @@ see the files COPYING3 and COPYING.RUNTI
+ /* Provide defaults for stuff that may not be defined when using
+ sjlj exceptions. */
+ #ifndef EH_RETURN_DATA_REGNO
+-#define EH_RETURN_DATA_REGNO(N) INVALID_REGNUM
++#define EH_RETURN_DATA_REGNO(N) (void (N), INVALID_REGNUM)
+ #endif
+
+ /* Offset between the eh handler address and entry in eh tables. */
diff --git a/gcc16-pr123152.patch b/gcc16-pr123152.patch
new file mode 100644
index 0000000..a19ca73
--- /dev/null
+++ b/gcc16-pr123152.patch
@@ -0,0 +1,157 @@
+The `recompute_dominator' function used in the code fragment within
+this patch assumes correctness in the rest of the CFG. Consequently,
+it is wrong to rely upon it before the subsequent updates are made in
+the "Update dominators for multiple exits" loop in the function.
+
+Furthermore, if `loop_exit' == `scalar_exit', the "Update dominators for
+multiple exits" logic will already take care of updating the
+dominator for `scalar_exit->dest', such that the moved statement is
+unnecessary.
+
+2025-12-18 Victor Do Nascimento
+
+ PR tree-optimization/123152
+ * tree-vect-loop-manip.cc (slpeel_tree_duplicate_loop_to_edge_cfg):
+ Correct order of dominator update.
+
+ * gcc.dg/vect/vect-uncounted-prolog-peel_2.c: New.
+ * gcc.dg/vect/vect-uncounted-prolog-peel_3.c: Likewise.
+ * g++.dg/vect/vect-uncounted-prolog-peel_1.cc: Likewise.
+
+--- gcc/tree-vect-loop-manip.cc.jj
++++ gcc/tree-vect-loop-manip.cc
+@@ -1989,11 +1989,6 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop *loop, edge loop_exit,
+ flush_pending_stmts (new_exit);
+ set_immediate_dominator (CDI_DOMINATORS, preheader, new_exit->src);
+
+- if (create_main_e)
+- set_immediate_dominator (CDI_DOMINATORS, scalar_exit->dest,
+- recompute_dominator (CDI_DOMINATORS,
+- scalar_exit->dest));
+-
+ /* And remove the non-necessary forwarder again. Keep the other
+ one so we have a proper pre-header for the loop at the exit edge. */
+ redirect_edge_pred (single_succ_edge (new_preheader),
+@@ -2024,6 +2019,11 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop *loop, edge loop_exit,
+ }
+ }
+ }
++
++ if (create_main_e && loop_exit != scalar_exit)
++ set_immediate_dominator (CDI_DOMINATORS, scalar_exit->dest,
++ recompute_dominator (CDI_DOMINATORS,
++ scalar_exit->dest));
+ }
+
+ free (new_bbs);
+--- gcc/testsuite/g++.dg/vect/vect-uncounted-prolog-peel_1.cc.jj
++++ gcc/testsuite/g++.dg/vect/vect-uncounted-prolog-peel_1.cc
+@@ -0,0 +1,51 @@
++/* { dg-add-options vect_early_break } */
++/* { dg-do compile } */
++/* { dg-require-effective-target vect_early_break } */
++/* { dg-require-effective-target vect_int } */
++/* { dg-additional-options "-w" } */
++
++namespace a {
++class b {
++public:
++ b d(long);
++};
++class e : public b {};
++typedef short f;
++typedef struct g *h;
++typedef struct g {
++ f c;
++ e *fp;
++ f j, *k, *l;
++} m;
++static h n(m *, unsigned, unsigned *);
++f o(m *, unsigned);
++void p(short *t) {
++ m *ffile;
++ int q;
++ unsigned r;
++ int i;
++ q = t[i];
++ n(ffile, q, &r);
++}
++h n(m *ffile, unsigned q, unsigned *) {
++ h glyph;
++ for (; glyph;)
++ if (glyph->c)
++ o(ffile, q);
++ int i;
++s:
++ for (i = 0; ffile->j; i++)
++ if (ffile->k[i]) {
++ if (q)
++ ffile->fp->d(ffile->l[i]);
++ break;
++ }
++ if (q < 6) {
++ q += 61440;
++ goto s;
++ }
++}
++} // namespace a
++
++/* { dg-final { scan-tree-dump {note:\s*Alignment of access forced using peeling.} "vect" } } */
++/* { dg-final { scan-tree-dump {vectorized 1 loops in function} "vect" } } */
+--- gcc/testsuite/gcc.dg/vect/vect-uncounted-prolog-peel_2.c.jj
++++ gcc/testsuite/gcc.dg/vect/vect-uncounted-prolog-peel_2.c
+@@ -0,0 +1,25 @@
++/* { dg-add-options vect_early_break } */
++/* { dg-do compile } */
++/* { dg-require-effective-target vect_early_break } */
++/* { dg-require-effective-target vect_int } */
++
++char b;
++int c(char *d) {
++ int *a = 0;
++ while (*d) {
++ while (*a)
++ if (*a++ == 1)
++ return 1;
++ d++;
++ }
++}
++void e() {
++ c(&b);
++ char *f = &b;
++ while (f[0])
++ ++b;
++}
++
++/* { dg-final { scan-tree-dump {note:\s*Alignment of access forced using peeling.} "vect" } } */
++/* { dg-final { scan-tree-dump {if \(ivtmp_[0-9_]+ >= prolog_loop_niters.[0-9_]+\)\n\s*goto} "vect" } } */
++/* { dg-final { scan-tree-dump {vectorized 1 loops in function} "vect" } } */
+--- gcc/testsuite/gcc.dg/vect/vect-uncounted-prolog-peel_3.c.jj
++++ gcc/testsuite/gcc.dg/vect/vect-uncounted-prolog-peel_3.c
+@@ -0,0 +1,26 @@
++/* { dg-add-options vect_early_break } */
++/* { dg-do compile } */
++/* { dg-require-effective-target vect_early_break } */
++/* { dg-require-effective-target vect_int } */
++
++struct {
++ int segments[];
++} seek_to_sample_coarse_f;
++
++int seek_to_sample_coarse_i, seek_to_sample_coarse_f_1;
++
++void seek_to_sample_coarse() {
++ int end_pos = seek_to_sample_coarse_f_1;
++ for (;;) {
++ seek_to_sample_coarse_i = end_pos;
++ for (; end_pos > 0; --end_pos)
++ if (seek_to_sample_coarse_f.segments[end_pos - 1])
++ break;
++ if (end_pos)
++ break;
++ }
++}
++
++/* { dg-final { scan-tree-dump {note:\s*Alignment of access forced using peeling.} "vect" } } */
++/* { dg-final { scan-tree-dump {if \(ivtmp_[0-9_]+ >= prolog_loop_niters.[0-9_]+\)\n\s*goto} "vect" } } */
++/* { dg-final { scan-tree-dump {vectorized 1 loops in function} "vect" } } */
diff --git a/gcc15-rh1574936.patch b/gcc16-rh1574936.patch
similarity index 100%
rename from gcc15-rh1574936.patch
rename to gcc16-rh1574936.patch
diff --git a/gcc15-sparc-config-detection.patch b/gcc16-sparc-config-detection.patch
similarity index 100%
rename from gcc15-sparc-config-detection.patch
rename to gcc16-sparc-config-detection.patch
diff --git a/sources b/sources
index 5429ac5..6f41a0a 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-15.2.1-20251211.tar.xz) = 9ad5a1ef0f21327fafe37eb52a2e8ff4ebd773c34e9a70053fa70436fa7d35b1eb3b85f0a38211b06fba3fc6a3e35dcb939822d0c0eca1592ea24aa6b2726c99
+SHA512 (gcc-16.0.0-20251218.tar.xz) = ba37982b367362a525395b4c55a5e289176145e65eb96069a9a889ef0290ad47c3376c4b4877ec0e6efe9724b55c03e75824661a7199eee73109d8f1b50485ae
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From f184fa5d6b9425fa8cdfda4a474134e0af5723c3 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 18 Dec 2025 17:45:18 +0100
Subject: [PATCH 61/71] gcc-16.0.0-0.2
---
gcc.spec | 1 -
gcc16-libgomp-build.patch | 17 -----------------
2 files changed, 18 deletions(-)
delete mode 100644 gcc16-libgomp-build.patch
diff --git a/gcc.spec b/gcc.spec
index c1ba99a..449537f 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -320,7 +320,6 @@ Patch12: gcc16-pr119006.patch
Patch13: gcc16-pr123152.patch
Patch14: gcc16-pr123114.patch
Patch15: gcc16-pr123115.patch
-Patch16: gcc16-libgomp-build.patch
Patch50: isl-rh2155127.patch
diff --git a/gcc16-libgomp-build.patch b/gcc16-libgomp-build.patch
deleted file mode 100644
index d814d18..0000000
--- a/gcc16-libgomp-build.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-2025-12-15 Jakub Jelinek
-
- * plugin/build-target-indirect-htab.h (create_target_indirect_map):
- Use (void) htab_find instead of assert (htab_find) to silence
- -Werror=unused-function because the latter triggers -Werror=address.
-
---- libgomp/plugin/build-target-indirect-htab.h.jj 2025-09-17 09:03:28.934357899 +0200
-+++ libgomp/plugin/build-target-indirect-htab.h 2025-12-15 16:11:51.894866968 +0100
-@@ -65,7 +65,7 @@ void*
- create_target_indirect_map (size_t *h_size, size_t count,
- uint64_t *host_addrs, uint64_t *device_addrs)
- {
-- assert (htab_find); /* Silence -Werror=unused-function. */
-+ (void) htab_find; /* Silence -Werror=unused-function. */
-
- htab_t indirect_htab = htab_create (count);
-
From 54fd0a9c601745b8d0113f3784bd00a8827ce018 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 20 Dec 2025 19:06:25 +0100
Subject: [PATCH 62/71] 16.0.0-0.3
---
.gitignore | 1 +
gcc.spec | 24 +++++--
gcc16-pr123152.patch | 157 -------------------------------------------
sources | 2 +-
4 files changed, 20 insertions(+), 164 deletions(-)
delete mode 100644 gcc16-pr123152.patch
diff --git a/.gitignore b/.gitignore
index 02b5869..89bdb24 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,4 @@
/gcc-15.2.1-20251111.tar.xz
/gcc-15.2.1-20251211.tar.xz
/gcc-16.0.0-20251218.tar.xz
+/gcc-16.0.0-20251220.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 449537f..278d014 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20251218
-%global gitrev f73d23f06a1b8aa7cdce95a6092c0ce0f5650a00
+%global DATE 20251220
+%global gitrev ac4db8ee4097571c12b053c4724d2ca8b98dcfe9
%global gcc_version 16.0.0
%global gcc_major 16
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -158,7 +158,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.2%{?dist}
+Release: %{gcc_release}.3%{?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
@@ -317,9 +317,8 @@ Patch9: gcc16-Wno-format-security.patch
Patch10: gcc16-rh1574936.patch
Patch11: gcc16-d-shared-libphobos.patch
Patch12: gcc16-pr119006.patch
-Patch13: gcc16-pr123152.patch
-Patch14: gcc16-pr123114.patch
-Patch15: gcc16-pr123115.patch
+Patch13: gcc16-pr123114.patch
+Patch14: gcc16-pr123115.patch
Patch50: isl-rh2155127.patch
@@ -3937,5 +3936,18 @@ end
%endif
%changelog
+* Sat Dec 20 2025 Jakub Jelinek 16.0.0-0.3
+- update from trunk
+ - PRs bootstrap/12407, c/123156, c++/91388, c++/117034, c++/122070,
+ c++/122509, c++/122690, c++/122712, c++/122772, c++/122834,
+ c++/122922, c++/122995, c++/123030, c++/123044, c++/123186,
+ debug/122968, fortran/71565, fortran/92613, libstdc++/112591,
+ libstdc++/123147, libstdc++/123180, rtl-optimization/123223,
+ target/55212, target/122970, target/123171, target/123216,
+ target/123217, tree-optimization/122734, tree-optimization/123097,
+ tree-optimization/123117, tree-optimization/123118,
+ tree-optimization/123152, tree-optimization/123153,
+ tree-optimization/123192, tree-optimization/123205
+
* Thu Dec 18 2025 Jakub Jelinek 16.0.0-0.2
- new package
diff --git a/gcc16-pr123152.patch b/gcc16-pr123152.patch
deleted file mode 100644
index a19ca73..0000000
--- a/gcc16-pr123152.patch
+++ /dev/null
@@ -1,157 +0,0 @@
-The `recompute_dominator' function used in the code fragment within
-this patch assumes correctness in the rest of the CFG. Consequently,
-it is wrong to rely upon it before the subsequent updates are made in
-the "Update dominators for multiple exits" loop in the function.
-
-Furthermore, if `loop_exit' == `scalar_exit', the "Update dominators for
-multiple exits" logic will already take care of updating the
-dominator for `scalar_exit->dest', such that the moved statement is
-unnecessary.
-
-2025-12-18 Victor Do Nascimento
-
- PR tree-optimization/123152
- * tree-vect-loop-manip.cc (slpeel_tree_duplicate_loop_to_edge_cfg):
- Correct order of dominator update.
-
- * gcc.dg/vect/vect-uncounted-prolog-peel_2.c: New.
- * gcc.dg/vect/vect-uncounted-prolog-peel_3.c: Likewise.
- * g++.dg/vect/vect-uncounted-prolog-peel_1.cc: Likewise.
-
---- gcc/tree-vect-loop-manip.cc.jj
-+++ gcc/tree-vect-loop-manip.cc
-@@ -1989,11 +1989,6 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop *loop, edge loop_exit,
- flush_pending_stmts (new_exit);
- set_immediate_dominator (CDI_DOMINATORS, preheader, new_exit->src);
-
-- if (create_main_e)
-- set_immediate_dominator (CDI_DOMINATORS, scalar_exit->dest,
-- recompute_dominator (CDI_DOMINATORS,
-- scalar_exit->dest));
--
- /* And remove the non-necessary forwarder again. Keep the other
- one so we have a proper pre-header for the loop at the exit edge. */
- redirect_edge_pred (single_succ_edge (new_preheader),
-@@ -2024,6 +2019,11 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop *loop, edge loop_exit,
- }
- }
- }
-+
-+ if (create_main_e && loop_exit != scalar_exit)
-+ set_immediate_dominator (CDI_DOMINATORS, scalar_exit->dest,
-+ recompute_dominator (CDI_DOMINATORS,
-+ scalar_exit->dest));
- }
-
- free (new_bbs);
---- gcc/testsuite/g++.dg/vect/vect-uncounted-prolog-peel_1.cc.jj
-+++ gcc/testsuite/g++.dg/vect/vect-uncounted-prolog-peel_1.cc
-@@ -0,0 +1,51 @@
-+/* { dg-add-options vect_early_break } */
-+/* { dg-do compile } */
-+/* { dg-require-effective-target vect_early_break } */
-+/* { dg-require-effective-target vect_int } */
-+/* { dg-additional-options "-w" } */
-+
-+namespace a {
-+class b {
-+public:
-+ b d(long);
-+};
-+class e : public b {};
-+typedef short f;
-+typedef struct g *h;
-+typedef struct g {
-+ f c;
-+ e *fp;
-+ f j, *k, *l;
-+} m;
-+static h n(m *, unsigned, unsigned *);
-+f o(m *, unsigned);
-+void p(short *t) {
-+ m *ffile;
-+ int q;
-+ unsigned r;
-+ int i;
-+ q = t[i];
-+ n(ffile, q, &r);
-+}
-+h n(m *ffile, unsigned q, unsigned *) {
-+ h glyph;
-+ for (; glyph;)
-+ if (glyph->c)
-+ o(ffile, q);
-+ int i;
-+s:
-+ for (i = 0; ffile->j; i++)
-+ if (ffile->k[i]) {
-+ if (q)
-+ ffile->fp->d(ffile->l[i]);
-+ break;
-+ }
-+ if (q < 6) {
-+ q += 61440;
-+ goto s;
-+ }
-+}
-+} // namespace a
-+
-+/* { dg-final { scan-tree-dump {note:\s*Alignment of access forced using peeling.} "vect" } } */
-+/* { dg-final { scan-tree-dump {vectorized 1 loops in function} "vect" } } */
---- gcc/testsuite/gcc.dg/vect/vect-uncounted-prolog-peel_2.c.jj
-+++ gcc/testsuite/gcc.dg/vect/vect-uncounted-prolog-peel_2.c
-@@ -0,0 +1,25 @@
-+/* { dg-add-options vect_early_break } */
-+/* { dg-do compile } */
-+/* { dg-require-effective-target vect_early_break } */
-+/* { dg-require-effective-target vect_int } */
-+
-+char b;
-+int c(char *d) {
-+ int *a = 0;
-+ while (*d) {
-+ while (*a)
-+ if (*a++ == 1)
-+ return 1;
-+ d++;
-+ }
-+}
-+void e() {
-+ c(&b);
-+ char *f = &b;
-+ while (f[0])
-+ ++b;
-+}
-+
-+/* { dg-final { scan-tree-dump {note:\s*Alignment of access forced using peeling.} "vect" } } */
-+/* { dg-final { scan-tree-dump {if \(ivtmp_[0-9_]+ >= prolog_loop_niters.[0-9_]+\)\n\s*goto} "vect" } } */
-+/* { dg-final { scan-tree-dump {vectorized 1 loops in function} "vect" } } */
---- gcc/testsuite/gcc.dg/vect/vect-uncounted-prolog-peel_3.c.jj
-+++ gcc/testsuite/gcc.dg/vect/vect-uncounted-prolog-peel_3.c
-@@ -0,0 +1,26 @@
-+/* { dg-add-options vect_early_break } */
-+/* { dg-do compile } */
-+/* { dg-require-effective-target vect_early_break } */
-+/* { dg-require-effective-target vect_int } */
-+
-+struct {
-+ int segments[];
-+} seek_to_sample_coarse_f;
-+
-+int seek_to_sample_coarse_i, seek_to_sample_coarse_f_1;
-+
-+void seek_to_sample_coarse() {
-+ int end_pos = seek_to_sample_coarse_f_1;
-+ for (;;) {
-+ seek_to_sample_coarse_i = end_pos;
-+ for (; end_pos > 0; --end_pos)
-+ if (seek_to_sample_coarse_f.segments[end_pos - 1])
-+ break;
-+ if (end_pos)
-+ break;
-+ }
-+}
-+
-+/* { dg-final { scan-tree-dump {note:\s*Alignment of access forced using peeling.} "vect" } } */
-+/* { dg-final { scan-tree-dump {if \(ivtmp_[0-9_]+ >= prolog_loop_niters.[0-9_]+\)\n\s*goto} "vect" } } */
-+/* { dg-final { scan-tree-dump {vectorized 1 loops in function} "vect" } } */
diff --git a/sources b/sources
index 6f41a0a..7fdac69 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-16.0.0-20251218.tar.xz) = ba37982b367362a525395b4c55a5e289176145e65eb96069a9a889ef0290ad47c3376c4b4877ec0e6efe9724b55c03e75824661a7199eee73109d8f1b50485ae
+SHA512 (gcc-16.0.0-20251220.tar.xz) = b705797b1ab6b8c8d2c41782c8b59642daf8d6d162ea62ebe611fd78bbc2d951f9f5b7cf68c0e4d9f68bdd6712cd91291c1657c1dbb3876e317a75d658aa9205
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From 406a54e096359d42f5774227898bf158ba8b096c Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 3 Jan 2026 13:41:22 +0100
Subject: [PATCH 63/71] 16.0.0-0.4
---
.gitignore | 1 +
gcc.spec | 31 ++++++++++++++++++----
gcc16-pr120250.patch | 61 ++++++++++++++++++++++++++++++++++++++++++++
gcc16-pr123114.patch | 46 ---------------------------------
gcc16-pr123372.patch | 49 +++++++++++++++++++++++++++++++++++
sources | 2 +-
6 files changed, 138 insertions(+), 52 deletions(-)
create mode 100644 gcc16-pr120250.patch
delete mode 100644 gcc16-pr123114.patch
create mode 100644 gcc16-pr123372.patch
diff --git a/.gitignore b/.gitignore
index 89bdb24..b12b8aa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,4 @@
/gcc-15.2.1-20251211.tar.xz
/gcc-16.0.0-20251218.tar.xz
/gcc-16.0.0-20251220.tar.xz
+/gcc-16.0.0-20260103.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 278d014..61bfc5c 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20251220
-%global gitrev ac4db8ee4097571c12b053c4724d2ca8b98dcfe9
+%global DATE 20260103
+%global gitrev b48538f45d8b883ab0ed4e77c445dc12b122cb3a
%global gcc_version 16.0.0
%global gcc_major 16
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -158,7 +158,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.3%{?dist}
+Release: %{gcc_release}.4%{?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
@@ -293,6 +293,9 @@ Requires: glibc >= 2.16
%endif
Requires: libgcc >= %{version}-%{release}
Requires: libgomp = %{version}-%{release}
+%if %{build_libatomic}
+Requires: libatomic = %{version}-%{release}
+%endif
# lto-wrapper invokes make
Requires: make
%if !%{build_ada}
@@ -317,8 +320,9 @@ Patch9: gcc16-Wno-format-security.patch
Patch10: gcc16-rh1574936.patch
Patch11: gcc16-d-shared-libphobos.patch
Patch12: gcc16-pr119006.patch
-Patch13: gcc16-pr123114.patch
-Patch14: gcc16-pr123115.patch
+Patch13: gcc16-pr123115.patch
+Patch14: gcc16-pr120250.patch
+Patch15: gcc16-pr123372.patch
Patch50: isl-rh2155127.patch
@@ -3936,6 +3940,23 @@ end
%endif
%changelog
+* Sat Jan 3 2026 Jakub Jelinek 16.0.0-0.4
+- update from trunk
+ - PRs ada/123060, ada/123088, ada/123185, ada/123289, ada/123302,
+ ada/123306, ada/15605, c++/117518, c++/119097, c++/120005, c++/121864,
+ c++/122550, c++/122690, c++/122712, c++/122819, c++/122958,
+ c++/122994, c++/123080, c++/123261, c++/123277, fortran/101399,
+ fortran/121472, fortran/121475, fortran/122957, fortran/123201,
+ fortran/123253, libfortran/119136, middle-end/123067,
+ middle-end/123222, other/122243, rtl-optimization/123114,
+ rtl-optimization/123267, rtl-optimization/123276,
+ rtl-optimization/123295, rtl-optimization/123308, target/121485,
+ target/122769, target/123216, target/123217, target/123274,
+ target/123278, target/123283, target/123318, testsuite/123299,
+ testsuite/123334, tree-optimization/123089
+- require libatomic package from gcc package as -latomic is now linked
+ as-needed by default
+
* Sat Dec 20 2025 Jakub Jelinek 16.0.0-0.3
- update from trunk
- PRs bootstrap/12407, c/123156, c++/91388, c++/117034, c++/122070,
diff --git a/gcc16-pr120250.patch b/gcc16-pr120250.patch
new file mode 100644
index 0000000..96aa78b
--- /dev/null
+++ b/gcc16-pr120250.patch
@@ -0,0 +1,61 @@
+2025-11-20 Jakub Jelinek
+
+ PR target/120250
+ * combine.cc (recog_for_combine): Don't try to put SET_SRC
+ into a constant pool if SET_DEST is pc_rtx.
+
+ * gcc.c-torture/compile/pr120250.c: New test.
+
+--- gcc/combine.cc.jj 2025-10-21 11:27:04.884882995 +0200
++++ gcc/combine.cc 2025-11-19 15:03:23.350157882 +0100
+@@ -11759,7 +11759,8 @@ recog_for_combine (rtx *pnewpat, rtx_ins
+ rtx src = SET_SRC (pat);
+ if (CONSTANT_P (src)
+ && !CONST_INT_P (src)
+- && crtl->uses_const_pool)
++ && crtl->uses_const_pool
++ && SET_DEST (pat) != pc_rtx)
+ {
+ machine_mode mode = GET_MODE (src);
+ if (mode == VOIDmode)
+--- gcc/testsuite/gcc.c-torture/compile/pr120250.c.jj 2025-11-19 15:28:12.937891927 +0100
++++ gcc/testsuite/gcc.c-torture/compile/pr120250.c 2025-11-19 15:27:53.225174446 +0100
+@@ -0,0 +1,38 @@
++/* PR target/120250 */
++
++int a = 5, b = 7, c, *d;
++void *l;
++void foo (const char *s);
++void bar (void);
++void qux (const char *, int);
++
++int
++baz (int *d, int a, int b)
++{
++ int c = 0;
++ for (int i = 0; i < a; ++i)
++ for (int j = 0; j < b; ++j)
++ c += d[i * b + j];
++ return c;
++}
++
++int
++main ()
++{
++ d = __builtin_malloc (a * b * sizeof (int));
++ if (!d)
++ {
++ foo ("foo");
++ __builtin_exit (1);
++ }
++ for (int i = 0; i < a; ++i)
++ for (int j = 0; j < b; ++j)
++ d[i * b + j] = i * b + j;
++ l = (void *) &bar;
++ goto *l;
++bar:
++ c = baz (d, a, b);
++ qux ("bar", c);
++ __builtin_free (d);
++ return 0;
++}
diff --git a/gcc16-pr123114.patch b/gcc16-pr123114.patch
deleted file mode 100644
index 1e8eb9c..0000000
--- a/gcc16-pr123114.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-2025-12-13 Jakub Jelinek
-
- PR rtl-optimization/123114
- * simplify-rtx.cc (simplify_context::simplify_relational_operation):
- Verify XEXP (XEXP (op0, 0), 0) mode and use CONST0_RTX (cmp_mode)
- instead of CONST0_RTX (mode).
-
- * gcc.dg/pr123114.c: New test.
-
---- gcc/simplify-rtx.cc.jj 2025-12-09 10:18:55.437229339 +0100
-+++ gcc/simplify-rtx.cc 2025-12-13 23:04:14.672186706 +0100
-@@ -6509,8 +6509,9 @@ simplify_context::simplify_relational_op
- /* only enters if op1 is 0 */
- /* Verify IOR operand is NE */
- && GET_CODE (XEXP (op0, 0)) == NE
-+ && GET_MODE (XEXP (XEXP (op0, 0), 0)) == cmp_mode
- /* Verify second NE operand is 0 */
-- && XEXP (XEXP (op0, 0), 1) == CONST0_RTX (mode))
-+ && XEXP (XEXP (op0, 0), 1) == CONST0_RTX (cmp_mode))
- {
- rtx t = gen_rtx_IOR (cmp_mode, XEXP (XEXP (op0, 0), 0), XEXP (op0, 1));
- t = gen_rtx_fmt_ee (code, mode, t, CONST0_RTX (mode));
---- gcc/testsuite/gcc.dg/pr123114.c.jj 2025-12-13 23:13:53.528178273 +0100
-+++ gcc/testsuite/gcc.dg/pr123114.c 2025-12-13 23:13:25.964657498 +0100
-@@ -0,0 +1,21 @@
-+/* PR rtl-optimization/123114 */
-+/* { dg-do compile } */
-+/* { dg-options "-O3 -fno-tree-vrp" } */
-+
-+volatile int a, b, g;
-+unsigned short e;
-+int f;
-+
-+int
-+main ()
-+{
-+ int c, d;
-+ while (a)
-+ {
-+ c = e = b << 2;
-+ d = f;
-+ g = (c <= 0 && d) || c ? 0 : d;
-+ a = g;
-+ }
-+ return 0;
-+}
diff --git a/gcc16-pr123372.patch b/gcc16-pr123372.patch
new file mode 100644
index 0000000..1f75086
--- /dev/null
+++ b/gcc16-pr123372.patch
@@ -0,0 +1,49 @@
+2026-01-03 Jakub Jelinek
+
+ PR tree-optimization/123372
+ * tree-ssa-math-opts.cc
+ (build_saturation_binary_arith_call_and_replace): Pass type of op_0
+ rather than type of lhs as second argument to
+ direct_internal_fn_supported_p.
+
+ * gcc.dg/tree-ssa/pr123372.c: New test.
+
+--- gcc/tree-ssa-math-opts.cc.jj 2026-01-02 09:56:10.390332748 +0100
++++ gcc/tree-ssa-math-opts.cc 2026-01-02 18:45:57.087546705 +0100
+@@ -4083,7 +4083,7 @@ build_saturation_binary_arith_call_and_r
+ internal_fn fn, tree lhs,
+ tree op_0, tree op_1)
+ {
+- if (direct_internal_fn_supported_p (fn, TREE_TYPE (lhs), OPTIMIZE_FOR_BOTH))
++ if (direct_internal_fn_supported_p (fn, TREE_TYPE (op_0), OPTIMIZE_FOR_BOTH))
+ {
+ gcall *call = gimple_build_call_internal (fn, 2, op_0, op_1);
+ gimple_call_set_lhs (call, lhs);
+--- gcc/testsuite/gcc.dg/tree-ssa/pr123372.c.jj 2026-01-02 18:49:45.419717435 +0100
++++ gcc/testsuite/gcc.dg/tree-ssa/pr123372.c 2026-01-02 18:51:22.256093427 +0100
+@@ -0,0 +1,25 @@
++/* PR tree-optimization/123372 */
++/* { dg-do compile } */
++/* { dg-options "-O2 -fgimple" } */
++
++#ifdef __SIZEOF_INT128__
++#define T unsigned __int128
++#else
++#define T unsigned long long
++#endif
++
++unsigned int __GIMPLE (ssa,startwith("phiopt4"))
++foo (T a, T b)
++{
++ T _4;
++ unsigned int _1;
++ bool _5;
++ unsigned int _6;
++
++ __BB(2):
++ _5 = a_2(D) >= b_3(D);
++ _4 = a_2(D) - b_3(D);
++ _6 = (unsigned int) _4;
++ _1 = _5 ? _6 : 0U;
++ return _1;
++}
diff --git a/sources b/sources
index 7fdac69..bfe5a8f 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-16.0.0-20251220.tar.xz) = b705797b1ab6b8c8d2c41782c8b59642daf8d6d162ea62ebe611fd78bbc2d951f9f5b7cf68c0e4d9f68bdd6712cd91291c1657c1dbb3876e317a75d658aa9205
+SHA512 (gcc-16.0.0-20260103.tar.xz) = cc9c1dcc04eec3ef8357320cac1e1f51166832061a065ba2391d1888a8eddbb4436073c0c3db6c33cd8f79ad1a1cfb35f867a57ed6cbc25f57980b5f60f8fa76
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From 55e669d29afecbf8713ba2e25f3f274800e4cf2b Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 3 Jan 2026 14:04:21 +0100
Subject: [PATCH 64/71] 16.0.0-0.4
---
gcc16-hack.patch | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc16-hack.patch b/gcc16-hack.patch
index 9c5d57b..61331bf 100644
--- a/gcc16-hack.patch
+++ b/gcc16-hack.patch
@@ -64,7 +64,7 @@
+ infodir="$(infodir)" \
GOCFLAGS="$(GOCFLAGS) $${flags}" \
GDCFLAGS="$(GDCFLAGS) $${flags}" \
- CXXFLAGS="$(CXXFLAGS) $${flags}" \
+ A68FLAGS="$(A68FLAGS) $${flags}" \
--- libcpp/macro.cc.jj 2019-01-09 13:01:21.420552123 +0100
+++ libcpp/macro.cc 2024-11-30 13:16:41.163056391 +0100
@@ -3680,8 +3680,6 @@ static cpp_macro *
From 461b2c1a00bdd7f452451952996e8b89f3e9088b Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 3 Jan 2026 14:24:24 +0100
Subject: [PATCH 65/71] 16.0.0-0.4
---
gcc.spec | 41 ++++++-----------------------------------
1 file changed, 6 insertions(+), 35 deletions(-)
diff --git a/gcc.spec b/gcc.spec
index 61bfc5c..8ca074a 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -295,6 +295,7 @@ Requires: libgcc >= %{version}-%{release}
Requires: libgomp = %{version}-%{release}
%if %{build_libatomic}
Requires: libatomic = %{version}-%{release}
+Obsoletes: libatomic-static < %{version}-%{release}
%endif
# lto-wrapper invokes make
Requires: make
@@ -746,13 +747,6 @@ This package contains the GNU Atomic library
which is a GCC support runtime library for atomic operations not supported
by hardware.
-%package -n libatomic-static
-Summary: The GNU Atomic static library
-Requires: libatomic = %{version}-%{release}
-
-%description -n libatomic-static
-This package contains GNU Atomic static libraries.
-
%package -n libasan
Summary: The Address Sanitizer runtime library
@@ -1958,7 +1952,7 @@ mv -f %{buildroot}%{_prefix}/%{_lib}/libga68.*a $FULLLPATH/
mv -f %{buildroot}%{_prefix}/%{_lib}/libitm.*a $FULLLPATH/
%endif
%if %{build_libatomic}
-mv -f %{buildroot}%{_prefix}/%{_lib}/libatomic.*a $FULLLPATH/
+mv -f %{buildroot}%{_prefix}/%{_lib}/libatomic.*a $FULLPATH/
%endif
%if %{build_libasan}
mv -f %{buildroot}%{_prefix}/%{_lib}/libasan.*a $FULLLPATH/
@@ -2073,6 +2067,7 @@ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libitm.so.1.* | sed 's,^.*
rm -f libatomic.so
echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libatomic.so.1.* | sed 's,^.*liba,liba,'`' )' > libatomic.so
echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libatomic.so.1.* | sed 's,^.*liba,liba,'`' )' > 64/libatomic.so
+mv -f %{buildroot}%{_prefix}/lib64/libatomic.*a 64/
%endif
%if %{build_libasan}
rm -f libasan.so
@@ -2127,10 +2122,6 @@ ln -sf ../lib64/libga68.a 64/libga68.a
ln -sf lib32/libitm.a libitm.a
ln -sf ../lib64/libitm.a 64/libitm.a
%endif
-%if %{build_libatomic}
-ln -sf lib32/libatomic.a libatomic.a
-ln -sf ../lib64/libatomic.a 64/libatomic.a
-%endif
%if %{build_libasan}
ln -sf lib32/libasan.a libasan.a
ln -sf ../lib64/libasan.a 64/libasan.a
@@ -2208,6 +2199,7 @@ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libitm.so.1.* | sed 's,^.*
rm -f libatomic.so
echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libatomic.so.1.* | sed 's,^.*liba,liba,'`' )' > libatomic.so
echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libatomic.so.1.* | sed 's,^.*liba,liba,'`' )' > 32/libatomic.so
+mv -f %{buildroot}%{_prefix}/lib/libatomic.*a 32/
%endif
%if %{build_libasan}
rm -f libasan.so
@@ -2264,10 +2256,6 @@ ln -sf lib64/libga68.a libga68.a
ln -sf ../lib32/libitm.a 32/libitm.a
ln -sf lib64/libitm.a libitm.a
%endif
-%if %{build_libatomic}
-ln -sf ../lib32/libatomic.a 32/libatomic.a
-ln -sf lib64/libatomic.a libatomic.a
-%endif
%if %{build_libasan}
ln -sf ../lib32/libasan.a 32/libasan.a
ln -sf lib64/libasan.a libasan.a
@@ -2318,9 +2306,6 @@ ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libga6
%if %{build_libitm}
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libitm.a 32/libitm.a
%endif
-%if %{build_libatomic}
-ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libatomic.a 32/libatomic.a
-%endif
%if %{build_libasan}
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libasan.a 32/libasan.a
%endif
@@ -3028,6 +3013,7 @@ end
%endif
%else
%if %{build_libatomic}
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic.so
%endif
%if %{build_libasan}
@@ -3632,22 +3618,6 @@ end
%if %{build_libatomic}
%files -n libatomic
%{_prefix}/%{_lib}/libatomic.so.1*
-
-%files -n libatomic-static
-%dir %{_prefix}/lib/gcc
-%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
-%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}
-%ifarch sparcv9 ppc
-%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32/libatomic.a
-%endif
-%ifarch sparc64 ppc64 ppc64p7
-%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64/libatomic.a
-%endif
-%ifnarch sparcv9 sparc64 ppc ppc64 ppc64p7
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic.a
-%endif
%doc rpm.doc/changelogs/libatomic/ChangeLog*
%endif
@@ -3956,6 +3926,7 @@ end
testsuite/123334, tree-optimization/123089
- require libatomic package from gcc package as -latomic is now linked
as-needed by default
+- remove libatomic-static package, move libatomic.a into gcc package
* Sat Dec 20 2025 Jakub Jelinek 16.0.0-0.3
- update from trunk
From 2df9f5e1831b0143b359addf7e09e7d5c67d9fa4 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 3 Jan 2026 14:56:53 +0100
Subject: [PATCH 66/71] 16.0.0-0.4
---
gcc16-Wno-format-security.patch | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/gcc16-Wno-format-security.patch b/gcc16-Wno-format-security.patch
index 9f4a8f9..2a4f0f3 100644
--- a/gcc16-Wno-format-security.patch
+++ b/gcc16-Wno-format-security.patch
@@ -37,11 +37,11 @@
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
-GOCFLAGS = $(CFLAGS)
--GA68FLAGS = @GA68FLAGS@
+-A68FLAGS = @A68FLAGS@
-GDCFLAGS = @GDCFLAGS@
-GM2FLAGS = $(CFLAGS)
+GOCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
-+GA68FLAGS = $(filter-out -Wformat-security,@GA68FLAGS@)
++A68FLAGS = $(filter-out -Wformat-security,@A68FLAGS@)
+GDCFLAGS = $(filter-out -Wformat-security,@GDCFLAGS@)
+GM2FLAGS = $(filter-out -Wformat-security,$(CFLAGS))
@@ -54,11 +54,11 @@
CXXFLAGS = @CXXFLAGS@
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
-GOCFLAGS = $(CFLAGS)
--GA68FLAGS = @GA68FLAGS@
+-A68FLAGS = @A68FLAGS@
-GDCFLAGS = @GDCFLAGS@
-GM2FLAGS = $(CFLAGS)
+GOCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
-+GA68FLAGS = $(filter-out -Wformat-security,@GA68FLAGS@)
++A68FLAGS = $(filter-out -Wformat-security,@A68FLAGS@)
+GDCFLAGS = $(filter-out -Wformat-security,@GDCFLAGS@)
+GM2FLAGS = $(filter-out -Wformat-security,$(CFLAGS))
From bf9047fd71076d22b6887c2cd3375d81467f7892 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Sat, 10 Jan 2026 11:57:52 +0100
Subject: [PATCH 67/71] 16.0.0-0.5
---
.gitignore | 1 +
gcc.spec | 41 ++++++++++++++++++++++++++++---
gcc16-pr123189.patch | 58 ++++++++++++++++++++++++++++++++++++++++++++
gcc16-pr123273.patch | 54 +++++++++++++++++++++++++++++++++++++++++
gcc16-pr123372.patch | 49 -------------------------------------
sources | 2 +-
6 files changed, 151 insertions(+), 54 deletions(-)
create mode 100644 gcc16-pr123189.patch
create mode 100644 gcc16-pr123273.patch
delete mode 100644 gcc16-pr123372.patch
diff --git a/.gitignore b/.gitignore
index b12b8aa..2196596 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,4 @@
/gcc-16.0.0-20251218.tar.xz
/gcc-16.0.0-20251220.tar.xz
/gcc-16.0.0-20260103.tar.xz
+/gcc-16.0.0-20260110.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 8ca074a..4d79f03 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20260103
-%global gitrev b48538f45d8b883ab0ed4e77c445dc12b122cb3a
+%global DATE 20260110
+%global gitrev 000ed919272a9a0a6b6e52ae9e2052d90baa6964
%global gcc_version 16.0.0
%global gcc_major 16
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -158,7 +158,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.4%{?dist}
+Release: %{gcc_release}.5%{?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
@@ -296,6 +296,7 @@ Requires: libgomp = %{version}-%{release}
%if %{build_libatomic}
Requires: libatomic = %{version}-%{release}
Obsoletes: libatomic-static < %{version}-%{release}
+Provides: libatomic-static = %{version}-%{release}
%endif
# lto-wrapper invokes make
Requires: make
@@ -323,7 +324,8 @@ Patch11: gcc16-d-shared-libphobos.patch
Patch12: gcc16-pr119006.patch
Patch13: gcc16-pr123115.patch
Patch14: gcc16-pr120250.patch
-Patch15: gcc16-pr123372.patch
+Patch15: gcc16-pr123189.patch
+Patch16: gcc16-pr123273.patch
Patch50: isl-rh2155127.patch
@@ -3910,6 +3912,37 @@ end
%endif
%changelog
+* Sat Jan 10 2026 Jakub Jelinek 16.0.0-0.5
+- update from trunk
+ - PRs ada/123003, ada/123371, ada/123490, c/117687, c/121081, c/121507,
+ c/123212, c/123435, c/123463, c/123475, c++/123331, c++/123347,
+ c++/123393, debug/123259, fortran/90218, fortran/123012,
+ fortran/123029, fortran/123071, fortran/123321, fortran/123352,
+ fortran/123483, gcov-profile/123019, ipa/123383, libstdc++/122878,
+ libstdc++/123100, libstdc++/123183, libstdc++/123326,
+ libstdc++/123378, libstdc++/123406, middle-end/111817,
+ middle-end/123107, rtl-optimization/119291, rtl-optimization/121675,
+ rtl-optimization/121773, rtl-optimization/123121,
+ rtl-optimization/123491, target/119430, target/121192, target/121290,
+ target/121535, target/121778, target/122846, target/123010,
+ target/123017, target/123268, target/123269, target/123317,
+ target/123320, target/123390, target/123403, target/123457,
+ target/123489, target/123492, testsuite/123353, testsuite/123377,
+ tree-optimization/42196, tree-optimization/102486,
+ tree-optimization/102954, tree-optimization/122103,
+ tree-optimization/122608, tree-optimization/122793,
+ tree-optimization/123197, tree-optimization/123200,
+ tree-optimization/123221, tree-optimization/123298,
+ tree-optimization/123300, tree-optimization/123310,
+ tree-optimization/123315, tree-optimization/123316,
+ tree-optimization/123319, tree-optimization/123351,
+ tree-optimization/123372, tree-optimization/123374,
+ tree-optimization/123382, tree-optimization/123414,
+ tree-optimization/123431
+- fix ICE on friend with noexcept (PR c++/123189)
+- fix -E -fdirectives-only comment handling (PR preprocessor/123273)
+- provide libatomic-static from gcc subpackage
+
* Sat Jan 3 2026 Jakub Jelinek 16.0.0-0.4
- update from trunk
- PRs ada/123060, ada/123088, ada/123185, ada/123289, ada/123302,
diff --git a/gcc16-pr123189.patch b/gcc16-pr123189.patch
new file mode 100644
index 0000000..4262362
--- /dev/null
+++ b/gcc16-pr123189.patch
@@ -0,0 +1,58 @@
+Since we now defer noexcept parsing for templated friends, some places
+need to be updated to cope with friend template specializations -- their
+TI_TEMPLATE is a TREE_LIST rather than a TEMPLATE_DECL, and they never
+introduce new template parameters.
+
+2026-01-09 Patrick Palka
+
+ PR c++/123189
+
+gcc/cp/ChangeLog:
+
+ * name-lookup.cc (binding_to_template_parms_of_scope_p):
+ Gracefully handle TEMPLATE_INFO whose TI_TEMPLATE is a TREE_LIST.
+ * pt.cc (maybe_begin_member_template_processing): For a friend
+ template specialization consider its class context instead.
+
+gcc/testsuite/ChangeLog:
+
+ * g++.dg/cpp0x/noexcept92.C: New test.
+
+--- gcc/cp/name-lookup.cc
++++ gcc/cp/name-lookup.cc
+@@ -8004,6 +8004,7 @@ binding_to_template_parms_of_scope_p (cxx_binding *binding,
+ /* The template of the current scope, iff said scope is a primary
+ template. */
+ tmpl = (tinfo
++ && TREE_CODE (TI_TEMPLATE (tinfo)) == TEMPLATE_DECL
+ && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
+ ? TI_TEMPLATE (tinfo)
+ : NULL_TREE);
+--- gcc/cp/pt.cc
++++ gcc/cp/pt.cc
+@@ -546,9 +546,9 @@ maybe_begin_member_template_processing (tree decl)
+ int levels = 0;
+ bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
+
+- if (nsdmi)
++ if (nsdmi || decl_specialization_friend_p (decl))
+ {
+- tree ctx = DECL_CONTEXT (decl);
++ tree ctx = nsdmi ? DECL_CONTEXT (decl) : DECL_CHAIN (decl);
+ decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
+ /* Disregard full specializations (c++/60999). */
+ && uses_template_parms (ctx)
+--- gcc/testsuite/g++.dg/cpp0x/noexcept92.C
++++ gcc/testsuite/g++.dg/cpp0x/noexcept92.C
+@@ -0,0 +1,11 @@
++// PR c++/123189
++// { dg-do compile { target c++11 } }
++
++template void f() noexcept(noexcept(T()));
++
++template
++struct A {
++ friend void f() noexcept(noexcept(T()));
++};
++
++template struct A;
diff --git a/gcc16-pr123273.patch b/gcc16-pr123273.patch
new file mode 100644
index 0000000..987f6e0
--- /dev/null
+++ b/gcc16-pr123273.patch
@@ -0,0 +1,54 @@
+2026-01-06 Jakub Jelinek
+
+ PR preprocessor/123273
+ * lex.cc (cpp_directive_only_process): Only go to done_comment
+ for '/' if star is true and esc is false. When seeing '\\' with
+ esc set to true, clear esc as well as star instead of keeping esc
+ set.
+
+ * c-c++-common/cpp/dir-only-10.c: New test.
+ * c-c++-common/cpp/dir-only-11.c: New test.
+
+--- libcpp/lex.cc.jj 2026-01-02 09:56:10.417332292 +0100
++++ libcpp/lex.cc 2026-01-05 16:40:26.413766032 +0100
+@@ -5461,7 +5461,13 @@ cpp_directive_only_process (cpp_reader *
+ switch (c)
+ {
+ case '\\':
+- esc = true;
++ if (esc)
++ {
++ star = false;
++ esc = false;
++ }
++ else
++ esc = true;
+ break;
+
+ case '\r':
+@@ -5492,7 +5498,7 @@ cpp_directive_only_process (cpp_reader *
+ break;
+
+ case '/':
+- if (star)
++ if (star && !esc)
+ goto done_comment;
+ /* FALLTHROUGH */
+
+--- gcc/testsuite/c-c++-common/cpp/dir-only-10.c.jj 2026-01-05 17:04:26.144566116 +0100
++++ gcc/testsuite/c-c++-common/cpp/dir-only-10.c 2026-01-05 17:05:02.226946201 +0100
+@@ -0,0 +1,5 @@
++/* PR preprocessor/123273 */
++/* { dg-do preprocess } */
++/* { dg-options -fdirectives-only } */
++
++/* *\/""" */
+--- gcc/testsuite/c-c++-common/cpp/dir-only-11.c.jj 2026-01-05 17:05:18.498666647 +0100
++++ gcc/testsuite/c-c++-common/cpp/dir-only-11.c 2026-01-05 17:06:17.574651691 +0100
+@@ -0,0 +1,6 @@
++/* PR preprocessor/123273 */
++/* { dg-do preprocess } */
++/* { dg-options -fdirectives-only } */
++
++/* *\\
++/""" */
diff --git a/gcc16-pr123372.patch b/gcc16-pr123372.patch
deleted file mode 100644
index 1f75086..0000000
--- a/gcc16-pr123372.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-2026-01-03 Jakub Jelinek
-
- PR tree-optimization/123372
- * tree-ssa-math-opts.cc
- (build_saturation_binary_arith_call_and_replace): Pass type of op_0
- rather than type of lhs as second argument to
- direct_internal_fn_supported_p.
-
- * gcc.dg/tree-ssa/pr123372.c: New test.
-
---- gcc/tree-ssa-math-opts.cc.jj 2026-01-02 09:56:10.390332748 +0100
-+++ gcc/tree-ssa-math-opts.cc 2026-01-02 18:45:57.087546705 +0100
-@@ -4083,7 +4083,7 @@ build_saturation_binary_arith_call_and_r
- internal_fn fn, tree lhs,
- tree op_0, tree op_1)
- {
-- if (direct_internal_fn_supported_p (fn, TREE_TYPE (lhs), OPTIMIZE_FOR_BOTH))
-+ if (direct_internal_fn_supported_p (fn, TREE_TYPE (op_0), OPTIMIZE_FOR_BOTH))
- {
- gcall *call = gimple_build_call_internal (fn, 2, op_0, op_1);
- gimple_call_set_lhs (call, lhs);
---- gcc/testsuite/gcc.dg/tree-ssa/pr123372.c.jj 2026-01-02 18:49:45.419717435 +0100
-+++ gcc/testsuite/gcc.dg/tree-ssa/pr123372.c 2026-01-02 18:51:22.256093427 +0100
-@@ -0,0 +1,25 @@
-+/* PR tree-optimization/123372 */
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -fgimple" } */
-+
-+#ifdef __SIZEOF_INT128__
-+#define T unsigned __int128
-+#else
-+#define T unsigned long long
-+#endif
-+
-+unsigned int __GIMPLE (ssa,startwith("phiopt4"))
-+foo (T a, T b)
-+{
-+ T _4;
-+ unsigned int _1;
-+ bool _5;
-+ unsigned int _6;
-+
-+ __BB(2):
-+ _5 = a_2(D) >= b_3(D);
-+ _4 = a_2(D) - b_3(D);
-+ _6 = (unsigned int) _4;
-+ _1 = _5 ? _6 : 0U;
-+ return _1;
-+}
diff --git a/sources b/sources
index bfe5a8f..2d3f1fe 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-16.0.0-20260103.tar.xz) = cc9c1dcc04eec3ef8357320cac1e1f51166832061a065ba2391d1888a8eddbb4436073c0c3db6c33cd8f79ad1a1cfb35f867a57ed6cbc25f57980b5f60f8fa76
+SHA512 (gcc-16.0.0-20260110.tar.xz) = 9be9b72ae45f888efe30ef50f8b497ebeaef327d037ab7a70a354d05986567115447dce8ff660b69b96d3cc6e145f509f35261d3f33902f97a7169817a972eed
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From 8d258e58bdb298d7f8c9926d168cc8c808fdf4e3 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Mon, 12 Jan 2026 20:15:57 +0100
Subject: [PATCH 68/71] 16.0.1-0.1
---
.gitignore | 2 +
gcc.spec | 22 +-
gcc16-ipacp-revert.patch | 1079 +++++++++++++++++++++++++++++++++++
gcc16-libstdc++-docs.patch | 4 +-
gcc16-pr121778-revert.patch | 170 ++++++
gcc16-pr123189.patch | 58 --
gcc16-pr123414-revert.patch | 92 +++
sources | 2 +-
8 files changed, 1362 insertions(+), 67 deletions(-)
create mode 100644 gcc16-ipacp-revert.patch
create mode 100644 gcc16-pr121778-revert.patch
delete mode 100644 gcc16-pr123189.patch
create mode 100644 gcc16-pr123414-revert.patch
diff --git a/.gitignore b/.gitignore
index 2196596..73b38af 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,5 @@
/gcc-16.0.0-20251220.tar.xz
/gcc-16.0.0-20260103.tar.xz
/gcc-16.0.0-20260110.tar.xz
+/gcc-16.0.0-20260112.tar.xz
+/gcc-16.0.1-20260112.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 4d79f03..e461bcf 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,6 +1,6 @@
-%global DATE 20260110
-%global gitrev 000ed919272a9a0a6b6e52ae9e2052d90baa6964
-%global gcc_version 16.0.0
+%global DATE 20260112
+%global gitrev 25ea0dce3d78a294015cf5df891a4630172b0d12
+%global gcc_version 16.0.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.
@@ -158,7 +158,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.5%{?dist}
+Release: %{gcc_release}.1%{?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
@@ -324,8 +324,10 @@ Patch11: gcc16-d-shared-libphobos.patch
Patch12: gcc16-pr119006.patch
Patch13: gcc16-pr123115.patch
Patch14: gcc16-pr120250.patch
-Patch15: gcc16-pr123189.patch
-Patch16: gcc16-pr123273.patch
+Patch15: gcc16-pr123273.patch
+Patch16: gcc16-ipacp-revert.patch
+Patch17: gcc16-pr121778-revert.patch
+Patch18: gcc16-pr123414-revert.patch
Patch50: isl-rh2155127.patch
@@ -3912,6 +3914,14 @@ end
%endif
%changelog
+* Mon Jan 12 2026 Jakub Jelinek 16.0.1-0.1
+- update from trunk
+ - PRs c++/81337, c++/115163, c++/123526, fortran/77415, ipa/122458,
+ ipa/123543, libfortran/123012, middle-end/123175,
+ rtl-optimization/123523, target/123415, testsuite/121752,
+ testsuite/123129, tree-optimization/122824, tree-optimization/122830,
+ tree-optimization/123417, tree-optimization/123528
+
* Sat Jan 10 2026 Jakub Jelinek 16.0.0-0.5
- update from trunk
- PRs ada/123003, ada/123371, ada/123490, c/117687, c/121081, c/121507,
diff --git a/gcc16-ipacp-revert.patch b/gcc16-ipacp-revert.patch
new file mode 100644
index 0000000..dae3ba2
--- /dev/null
+++ b/gcc16-ipacp-revert.patch
@@ -0,0 +1,1079 @@
+Temporarily revert until PR123542 is resolved.
+
+2026-01-06 Martin Jambor
+
+ * ipa-cp.h (class ipcp_bits_lattice): New members set_recipient_only,
+ recipient_only_p and m_recipient_only.
+ (class ipcp_vr_lattice): Likewise.
+ (ipcp_vr_lattice::init): Initialize also m_recipient_only.
+ * ipa-cp.cc (ipcp_bits_lattice::print): Adjust printting to also
+ print the new flag.
+ (ipcp_vr_lattice::print): Likewise.
+ (ipcp_vr_lattice::set_recipient_only): New function.
+ (ipcp_bits_lattice::set_recipient_only): Likewise.
+ (set_all_contains_variable): New parameter MAKE_SIMPLE_RECIPIENTS, set
+ bits and vr lattices to recibient only insted to bottom when it is
+ true.
+ (initialize_node_lattices): Pass true to the second parameter of
+ set_all_contains_variable.
+ (propagate_bits_across_jump_function): Treat recipient_only source
+ lattices like bottom.
+ (propagate_vr_across_jump_function): Likewise.
+ (ipcp_store_vr_results): Skip non-local nodes.
+
+2026-01-09 Martin Jambor
+
+ * ipa-cp.cc (good_cloning_opportunity_p): Dump a message when
+ bailing out early too.
+ (find_more_scalar_values_for_callers_subset): Rename to
+ find_scalar_values_for_callers_subset, collect constants regardless of
+ what is already in the vector. Remove dumping.
+ (find_more_contexts_for_caller_subset): Rename to
+ find_contexts_for_caller_subset, collect contexts regardless of what
+ is already in the vector. Remove dumping.
+ (find_aggregate_values_for_callers_subset): Rename to
+ find_aggregate_values_for_callers_subset_gc, implement using new
+ functions.
+ (find_aggregate_values_for_callers_subset_1): New function.
+ (find_aggregate_values_for_callers_subset): Likewise.
+ (copy_known_vectors_add_val): Removed.
+ (dump_reestimation_message): New function.
+ (decide_about_value): Remove formal parameter avals, compute it
+ independently, and use it to estimate local cloning effects.
+ (struct cloning_opportunity_ranking): New type.
+ (compare_cloning_opportunities): New function.
+ (cloning_opportunity_ranking_evaluation): Likewise.
+ (decide_whether_version_node): Pre-sort candidates for cloning before
+ really evaluating them. Calculate context independent values only
+ when considering versioning for all contexts.
+ (ipcp_val_agg_replacement_ok_p): Renamed to
+ ipcp_val_replacement_ok_p, check also non-aggregate values.
+
+--- gcc/ipa-cp.cc
++++ gcc/ipa-cp.cc
+@@ -339,25 +339,18 @@ ipcp_print_widest_int (FILE *f, const widest_int &value)
+ void
+ ipcp_bits_lattice::print (FILE *f)
+ {
+- if (bottom_p ())
+- {
+- fprintf (f, " Bits unusable (BOTTOM)\n");
+- return;
+- }
+-
+ if (top_p ())
+- fprintf (f, " Bits unknown (TOP)");
++ fprintf (f, " Bits unknown (TOP)\n");
++ else if (bottom_p ())
++ fprintf (f, " Bits unusable (BOTTOM)\n");
+ else
+ {
+ fprintf (f, " Bits: value = ");
+ ipcp_print_widest_int (f, get_value ());
+ fprintf (f, ", mask = ");
+ ipcp_print_widest_int (f, get_mask ());
++ fprintf (f, "\n");
+ }
+-
+- if (m_recipient_only)
+- fprintf (f, " (recipient only)");
+- fprintf (f, "\n");
+ }
+
+ /* Print value range lattice to F. */
+@@ -365,8 +358,6 @@ ipcp_bits_lattice::print (FILE *f)
+ void
+ ipcp_vr_lattice::print (FILE * f)
+ {
+- if (m_recipient_only)
+- fprintf (f, "(recipient only) ");
+ m_vr.dump (f);
+ }
+
+@@ -897,18 +888,6 @@ ipcp_vr_lattice::set_to_bottom ()
+ return true;
+ }
+
+-/* Set the flag that this lattice is a recipient only, return true if it was
+- not set before. */
+-
+-bool
+-ipcp_vr_lattice::set_recipient_only ()
+-{
+- if (m_recipient_only)
+- return false;
+- m_recipient_only = true;
+- return true;
+-}
+-
+ /* Set lattice value to bottom, if it already isn't the case. */
+
+ bool
+@@ -945,18 +924,6 @@ ipcp_bits_lattice::known_nonzero_p () const
+ return wi::ne_p (wi::bit_and (wi::bit_not (m_mask), m_value), 0);
+ }
+
+-/* Set the flag that this lattice is a recipient only, return true if it was not
+- set before. */
+-
+-bool
+-ipcp_bits_lattice::set_recipient_only ()
+-{
+- if (m_recipient_only)
+- return false;
+- m_recipient_only = true;
+- return true;
+-}
+-
+ /* Convert operand to value, mask form. */
+
+ void
+@@ -1359,28 +1326,17 @@ intersect_argaggs_with (vec &elts,
+ }
+
+ /* Mark bot aggregate and scalar lattices as containing an unknown variable,
+- return true is any of them has not been marked as such so far. If if
+- MAKE_SIMPLE_RECIPIENTS is true, set the lattices that can only hold one
+- value to being recipients only, otherwise also set them to bottom. */
++ return true is any of them has not been marked as such so far. */
+
+ static inline bool
+-set_all_contains_variable (class ipcp_param_lattices *plats,
+- bool make_simple_recipients = false)
++set_all_contains_variable (class ipcp_param_lattices *plats)
+ {
+ bool ret;
+ ret = plats->itself.set_contains_variable ();
+ ret |= plats->ctxlat.set_contains_variable ();
+ ret |= set_agg_lats_contain_variable (plats);
+- if (make_simple_recipients)
+- {
+- ret |= plats->bits_lattice.set_recipient_only ();
+- ret |= plats->m_value_range.set_recipient_only ();
+- }
+- else
+- {
+- ret |= plats->bits_lattice.set_to_bottom ();
+- ret |= plats->m_value_range.set_to_bottom ();
+- }
++ ret |= plats->bits_lattice.set_to_bottom ();
++ ret |= plats->m_value_range.set_to_bottom ();
+ return ret;
+ }
+
+@@ -1525,7 +1481,7 @@ initialize_node_lattices (struct cgraph_node *node)
+ {
+ plats->m_value_range.init (type);
+ if (variable)
+- set_all_contains_variable (plats, true);
++ set_all_contains_variable (plats);
+ }
+ }
+
+@@ -2617,8 +2573,7 @@ propagate_bits_across_jump_function (cgraph_edge *cs, int idx,
+ result of x & 0xff == 0xff, which gets computed during ccp1 pass
+ and we store it in jump function during analysis stage. */
+
+- if (!src_lats->bits_lattice.bottom_p ()
+- && !src_lats->bits_lattice.recipient_only_p ())
++ if (!src_lats->bits_lattice.bottom_p ())
+ {
+ if (!op_type)
+ op_type = ipa_get_type (caller_info, src_idx);
+@@ -2684,8 +2639,7 @@ propagate_vr_across_jump_function (cgraph_edge *cs, ipa_jump_func *jfunc,
+ = ipa_get_parm_lattices (caller_info, src_idx);
+ tree operand_type = ipa_get_type (caller_info, src_idx);
+
+- if (src_lats->m_value_range.bottom_p ()
+- || src_lats->m_value_range.recipient_only_p ())
++ if (src_lats->m_value_range.bottom_p ())
+ return dest_lat->set_to_bottom ();
+
+ if (ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR
+@@ -3443,13 +3397,7 @@ good_cloning_opportunity_p (struct cgraph_node *node, sreal time_benefit,
+ /* If there is no call which was executed in profiling or where
+ profile is missing, we do not want to clone. */
+ || (!called_without_ipa_profile && !count_sum.nonzero_p ()))
+- {
+- if (dump_file && (dump_flags & TDF_DETAILS))
+- fprintf (dump_file, " good_cloning_opportunity_p (time: %g, "
+- "size: %i): Definitely not good or prohibited.\n",
+- time_benefit.to_double (), size_cost);
+- return false;
+- }
++ return false;
+
+ gcc_assert (size_cost > 0);
+
+@@ -5290,29 +5238,24 @@ self_recursive_agg_pass_through_p (const cgraph_edge *cs,
+ KNOWN_CSTS with constants that are also known for all of the CALLERS. */
+
+ static void
+-find_scalar_values_for_callers_subset (vec &known_csts,
+- ipa_node_params *info,
+- const vec &callers)
++find_more_scalar_values_for_callers_subset (struct cgraph_node *node,
++ vec &known_csts,
++ const vec &callers)
+ {
++ ipa_node_params *info = ipa_node_params_sum->get (node);
+ int i, count = ipa_get_param_count (info);
+
+ for (i = 0; i < count; i++)
+ {
+- ipcp_lattice *lat = ipa_get_scalar_lat (info, i);
+- if (lat->bottom)
+- continue;
+- if (lat->is_single_const ())
+- {
+- known_csts[i] = lat->values->value;
+- continue;
+- }
+-
+ struct cgraph_edge *cs;
+ tree newval = NULL_TREE;
+ int j;
+ bool first = true;
+ tree type = ipa_get_type (info, i);
+
++ if (ipa_get_scalar_lat (info, i)->bottom || known_csts[i])
++ continue;
++
+ FOR_EACH_VEC_ELT (callers, j, cs)
+ {
+ struct ipa_jump_func *jump_func;
+@@ -5369,7 +5312,18 @@ find_scalar_values_for_callers_subset (vec &known_csts,
+ }
+
+ if (newval)
+- known_csts[i] = newval;
++ {
++ if (dump_file && (dump_flags & TDF_DETAILS))
++ {
++ fprintf (dump_file, " adding an extra known scalar value ");
++ print_ipcp_constant_value (dump_file, newval);
++ fprintf (dump_file, " for ");
++ ipa_dump_param (dump_file, info, i);
++ fprintf (dump_file, "\n");
++ }
++
++ known_csts[i] = newval;
++ }
+ }
+ }
+
+@@ -5378,34 +5332,23 @@ find_scalar_values_for_callers_subset (vec &known_csts,
+ CALLERS. */
+
+ static void
+-find_contexts_for_caller_subset (vec
+- &known_contexts,
+- ipa_node_params *info,
+- const vec &callers)
++find_more_contexts_for_caller_subset (cgraph_node *node,
++ vec
++ *known_contexts,
++ const vec &callers)
+ {
++ ipa_node_params *info = ipa_node_params_sum->get (node);
+ int i, count = ipa_get_param_count (info);
+
+ for (i = 0; i < count; i++)
+ {
+- if (!ipa_is_param_used (info, i))
+- continue;
++ cgraph_edge *cs;
+
+- ipcp_lattice *ctxlat
+- = ipa_get_poly_ctx_lat (info, i);
+- if (ctxlat->bottom)
++ if (ipa_get_poly_ctx_lat (info, i)->bottom
++ || (known_contexts->exists ()
++ && !(*known_contexts)[i].useless_p ()))
+ continue;
+- if (ctxlat->is_single_const ())
+- {
+- if (!ctxlat->values->value.useless_p ())
+- {
+- if (known_contexts.is_empty ())
+- known_contexts.safe_grow_cleared (count, true);
+- known_contexts[i] = ctxlat->values->value;
+- }
+- continue;
+- }
+
+- cgraph_edge *cs;
+ ipa_polymorphic_call_context newval;
+ bool first = true;
+ int j;
+@@ -5433,9 +5376,20 @@ find_contexts_for_caller_subset (vec
+
+ if (!newval.useless_p ())
+ {
+- if (known_contexts.is_empty ())
+- known_contexts.safe_grow_cleared (count, true);
+- known_contexts[i] = newval;
++ if (dump_file && (dump_flags & TDF_DETAILS))
++ {
++ fprintf (dump_file, " adding an extra known polymorphic "
++ "context ");
++ print_ipcp_constant_value (dump_file, newval);
++ fprintf (dump_file, " for ");
++ ipa_dump_param (dump_file, info, i);
++ fprintf (dump_file, "\n");
++ }
++
++ if (!known_contexts->exists ())
++ known_contexts->safe_grow_cleared (ipa_get_param_count (info),
++ true);
++ (*known_contexts)[i] = newval;
+ }
+
+ }
+@@ -5622,12 +5576,11 @@ push_agg_values_from_edge (struct cgraph_edge *cs,
+
+
+ /* Look at edges in CALLERS and collect all known aggregate values that arrive
+- from all of them into INTERIM. Return how many there are. */
++ from all of them. Return nullptr if there are none. */
+
+-static unsigned int
+-find_aggregate_values_for_callers_subset_1 (vec &interim,
+- struct cgraph_node *node,
+- const vec &callers)
++static struct vec *
++find_aggregate_values_for_callers_subset (struct cgraph_node *node,
++ const vec &callers)
+ {
+ ipa_node_params *dest_info = ipa_node_params_sum->get (node);
+ if (dest_info->ipcp_orig_node)
+@@ -5635,11 +5588,12 @@ find_aggregate_values_for_callers_subset_1 (vec &interim,
+
+ /* gather_edges_for_value puts a non-recursive call into the first element of
+ callers if it can. */
++ auto_vec interim;
+ push_agg_values_from_edge (callers[0], dest_info, &interim, NULL, true);
+
+ unsigned valid_entries = interim.length ();
+ if (!valid_entries)
+- return 0;
++ return nullptr;
+
+ unsigned caller_count = callers.length();
+ for (unsigned i = 1; i < caller_count; i++)
+@@ -5650,47 +5604,9 @@ find_aggregate_values_for_callers_subset_1 (vec &interim,
+
+ valid_entries = intersect_argaggs_with (interim, last);
+ if (!valid_entries)
+- return 0;
++ return nullptr;
+ }
+
+- return valid_entries;
+-}
+-
+-/* Look at edges in CALLERS and collect all known aggregate values that arrive
+- from all of them and return them in a garbage-collected vector. Return
+- nullptr if there are none. */
+-
+-static void
+-find_aggregate_values_for_callers_subset (vec &res,
+- struct cgraph_node *node,
+- const vec &callers)
+-{
+- auto_vec interim;
+- unsigned valid_entries
+- = find_aggregate_values_for_callers_subset_1 (interim, node, callers);
+- if (!valid_entries)
+- return;
+-
+- for (const ipa_argagg_value &av : interim)
+- if (av.value)
+- res.safe_push(av);
+- return;
+-}
+-
+-/* Look at edges in CALLERS and collect all known aggregate values that arrive
+- from all of them and return them in a garbage-collected vector. Return
+- nullptr if there are none. */
+-
+-static struct vec *
+-find_aggregate_values_for_callers_subset_gc (struct cgraph_node *node,
+- const vec &callers)
+-{
+- auto_vec interim;
+- unsigned valid_entries
+- = find_aggregate_values_for_callers_subset_1 (interim, node, callers);
+- if (!valid_entries)
+- return nullptr;
+-
+ vec *res = NULL;
+ vec_safe_reserve_exact (res, valid_entries);
+ for (const ipa_argagg_value &av : interim)
+@@ -5821,78 +5737,62 @@ copy_useful_known_contexts (const vec &known_conte
+ return vNULL;
+ }
+
+-/* Return true if the VALUE is represented in KNOWN_CSTS at INDEX if OFFSET is
+- minus one or in AGGVALS for INDEX and OFFSET otherwise. */
++/* Copy known scalar values from AVALS into KNOWN_CSTS and modify the copy
++ according to VAL and INDEX. If non-empty, replace KNOWN_CONTEXTS with its
++ copy too. */
+
+-DEBUG_FUNCTION bool
+-ipcp_val_replacement_ok_p (vec &known_csts,
+- vec &,
+- vec *aggvals,
+- int index, HOST_WIDE_INT offset, tree value)
++static void
++copy_known_vectors_add_val (ipa_auto_call_arg_values *avals,
++ vec *known_csts,
++ vec *known_contexts,
++ ipcp_value *val, int index)
+ {
+- tree v;
+- if (offset == -1)
+- v = known_csts[index];
+- else
+- {
+- const ipa_argagg_value_list avl (aggvals);
+- v = avl.get_value (index, offset / BITS_PER_UNIT);
+- }
++ *known_csts = avals->m_known_vals.copy ();
++ *known_contexts = copy_useful_known_contexts (avals->m_known_contexts);
++ (*known_csts)[index] = val->value;
++}
+
+- return v && values_equal_for_ipcp_p (v, value);
++/* Copy known scalar values from AVALS into KNOWN_CSTS. Similarly, copy
++ contexts to KNOWN_CONTEXTS and modify the copy according to VAL and
++ INDEX. */
++
++static void
++copy_known_vectors_add_val (ipa_auto_call_arg_values *avals,
++ vec *known_csts,
++ vec *known_contexts,
++ ipcp_value *val,
++ int index)
++{
++ *known_csts = avals->m_known_vals.copy ();
++ *known_contexts = avals->m_known_contexts.copy ();
++ (*known_contexts)[index] = val->value;
+ }
+
+-/* Dump to F all the values in AVALS for which we are re-evaluating the effects
+- on the function represented b INFO. */
++/* Return true if OFFSET indicates this was not an aggregate value or there is
++ a replacement equivalent to VALUE, INDEX and OFFSET among those in the
++ AGGVALS list. */
+
+-DEBUG_FUNCTION void
+-dump_reestimation_message (FILE *f, ipa_node_params *info,
+- const ipa_auto_call_arg_values &avals)
+-{
+- fprintf (f, " Re-estimating effects with\n"
+- " Scalar constants:");
+- int param_count = ipa_get_param_count (info);
+- for (int i = 0; i < param_count; i++)
+- if (avals.m_known_vals[i])
+- {
+- fprintf (f, " %i:", i);
+- print_ipcp_constant_value (f, avals.m_known_vals[i]);
+- }
+- fprintf (f, "\n");
+- if (!avals.m_known_contexts.is_empty ())
+- {
+- fprintf (f, " Pol. contexts:");
+- for (int i = 0; i < param_count; i++)
+- if (!avals.m_known_contexts[i].useless_p ())
+- {
+- fprintf (f, " %i:", i);
+- avals.m_known_contexts[i].dump (f);
+- }
+- fprintf (f, "\n");
+- }
+- if (!avals.m_known_aggs.is_empty ())
+- {
+- fprintf (f, " Aggregate replacements:");
+- ipa_argagg_value_list avs (&avals);
+- avs.dump (f);
+- }
++DEBUG_FUNCTION bool
++ipcp_val_agg_replacement_ok_p (vec *aggvals,
++ int index, HOST_WIDE_INT offset, tree value)
++{
++ if (offset == -1)
++ return true;
++
++ const ipa_argagg_value_list avl (aggvals);
++ tree v = avl.get_value (index, offset / BITS_PER_UNIT);
++ return v && values_equal_for_ipcp_p (v, value);
+ }
+
+-/* Return true if the VALUE is represented in KNOWN_CONTEXTS at INDEX and that
+- if OFFSET is is equal to minus one (because source of a polymorphic context
+- cannot be an aggregate value). */
++/* Return true if offset is minus one because source of a polymorphic context
++ cannot be an aggregate value. */
+
+ DEBUG_FUNCTION bool
+-ipcp_val_replacement_ok_p (vec &,
+- vec &known_contexts,
+- vec *,
+- int index, HOST_WIDE_INT offset,
+- ipa_polymorphic_call_context value)
++ipcp_val_agg_replacement_ok_p (vec *,
++ int , HOST_WIDE_INT offset,
++ ipa_polymorphic_call_context)
+ {
+- if (offset != -1)
+- return false;
+- return (!known_contexts[index].useless_p ()
+- && known_contexts[index].equal_to (value));
++ return offset == -1;
+ }
+
+ /* Decide whether to create a special version of NODE for value VAL of
+@@ -5906,12 +5806,13 @@ ipcp_val_replacement_ok_p (vec &,
+ template
+ static bool
+ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset,
+- ipcp_value *val,
++ ipcp_value *val, ipa_auto_call_arg_values *avals,
+ vec *self_gen_clones, int cur_sweep)
+ {
+ int caller_count;
+ sreal freq_sum;
+ profile_count count_sum, rec_count_sum;
++ vec callers;
+ bool called_without_ipa_profile;
+
+ if (val->spec_node)
+@@ -5965,78 +5866,36 @@ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset,
+ fprintf (dump_file, " (caller_count: %i)\n", caller_count);
+ }
+
+- vec callers;
+- callers = gather_edges_for_value (val, node, caller_count);
+- ipa_node_params *info = ipa_node_params_sum->get (node);
+- ipa_auto_call_arg_values avals;
+- avals.m_known_vals.safe_grow_cleared (ipa_get_param_count (info), true);
+- find_scalar_values_for_callers_subset (avals.m_known_vals, info, callers);
+- find_contexts_for_caller_subset (avals.m_known_contexts, info, callers);
+- find_aggregate_values_for_callers_subset (avals.m_known_aggs, node, callers);
+-
+-
+- if (good_cloning_opportunity_p (node, val->prop_time_benefit,
+- freq_sum, count_sum, val->prop_size_cost,
+- called_without_ipa_profile, cur_sweep))
+- ;
+- else
+- {
+- /* Extern inline functions are only meaningful to clione to propagate
+- values to their callees. */
+- if (DECL_EXTERNAL (node->decl) && DECL_DECLARED_INLINE_P (node->decl))
+- {
+- if (dump_file && (dump_flags & TDF_DETAILS))
+- fprintf (dump_file, " Skipping extern inline.\n");
+- return false;
+- }
+- if (dump_file && (dump_flags & TDF_DETAILS))
+- dump_reestimation_message (dump_file, info, avals);
+-
+- ipa_call_estimates estimates;
+- estimate_ipcp_clone_size_and_time (node, &avals, &estimates);
+- int removable_params_cost = 0;
+- for (tree t : avals.m_known_vals)
+- if (t)
+- removable_params_cost += estimate_move_cost (TREE_TYPE (t), true);
+-
+- int size = estimates.size - caller_count * removable_params_cost;
+-
+- if (size <= 0)
+- {
+- if (dump_file)
+- fprintf (dump_file, " Code not going to grow.\n");
+- }
+- else
+- {
+- sreal time_benefit
+- = ((estimates.nonspecialized_time - estimates.time)
+- + hint_time_bonus (node, estimates)
+- + (devirtualization_time_bonus (node, &avals)
+- + removable_params_cost));
+-
+- if (!good_cloning_opportunity_p (node, time_benefit, freq_sum,
+- count_sum, size,
+- called_without_ipa_profile,
+- cur_sweep))
+- return false;
+- }
+- }
++ if (!good_cloning_opportunity_p (node, val->local_time_benefit,
++ freq_sum, count_sum,
++ val->local_size_cost,
++ called_without_ipa_profile, cur_sweep)
++ && !good_cloning_opportunity_p (node, val->prop_time_benefit,
++ freq_sum, count_sum, val->prop_size_cost,
++ called_without_ipa_profile, cur_sweep))
++ return false;
+
+ if (dump_file)
+ fprintf (dump_file, " Creating a specialized node of %s.\n",
+ node->dump_name ());
+
+- vec known_csts = avals.m_known_vals.copy ();
+- vec known_contexts
+- = copy_useful_known_contexts (avals.m_known_contexts);
+-
+- vec *aggvals = NULL;
+- vec_safe_reserve_exact (aggvals, avals.m_known_aggs.length ());
+- for (const ipa_argagg_value &av : avals.m_known_aggs)
+- aggvals->quick_push (av);
+- gcc_checking_assert (ipcp_val_replacement_ok_p (known_csts, known_contexts,
+- aggvals, index,
+- offset, val->value));
++ vec known_csts;
++ vec known_contexts;
++
++ callers = gather_edges_for_value (val, node, caller_count);
++ if (offset == -1)
++ copy_known_vectors_add_val (avals, &known_csts, &known_contexts, val, index);
++ else
++ {
++ known_csts = avals->m_known_vals.copy ();
++ known_contexts = copy_useful_known_contexts (avals->m_known_contexts);
++ }
++ find_more_scalar_values_for_callers_subset (node, known_csts, callers);
++ find_more_contexts_for_caller_subset (node, &known_contexts, callers);
++ vec *aggvals
++ = find_aggregate_values_for_callers_subset (node, callers);
++ gcc_checking_assert (ipcp_val_agg_replacement_ok_p (aggvals, index,
++ offset, val->value));
+ val->spec_node = create_specialized_node (node, known_csts, known_contexts,
+ aggvals, callers);
+
+@@ -6074,52 +5933,6 @@ ipa_range_contains_p (const vrange &r, tree val)
+ return r.contains_p (val);
+ }
+
+-/* Structure holding opportunitties so that they can be pre-sorted. */
+-
+-struct cloning_opportunity_ranking
+-{
+- /* A very rough evaluation of likely benefit. */
+- sreal eval;
+- /* In the case of aggregate constants, a non-negative offset within their
+- aggregates. -1 for scalar constants, -2 for polymorphic contexts. */
+- HOST_WIDE_INT offset;
+- /* The value being considered for evaluation for cloning. */
+- ipcp_value_base *val;
+- /* Index of the formal parameter the value is coming in. */
+- int index;
+-};
+-
+-/* Helper function to qsort a vecotr of cloning opportunities. */
+-
+-static int
+-compare_cloning_opportunities (const void *a, const void *b)
+-{
+- const cloning_opportunity_ranking *o1
+- = (const cloning_opportunity_ranking *) a;
+- const cloning_opportunity_ranking *o2
+- = (const cloning_opportunity_ranking *) b;
+- if (o1->eval < o2->eval)
+- return 1;
+- if (o1->eval > o2->eval)
+- return -1;
+- return 0;
+-}
+-
+-/* Use the estimations in VAL to determine how good a candidate it represents
+- for the purposes of ordering real evaluation of opportunities (which
+- includes information about incoming edges, among other things). */
+-
+-static sreal
+-cloning_opportunity_ranking_evaluation (const ipcp_value_base *val)
+-{
+- sreal e1 = (val->local_time_benefit * 1000) / MAX (val->local_size_cost, 1);
+- sreal e2 = (val->prop_time_benefit * 1000) / MAX (val->prop_size_cost, 1);
+- if (e2 > e1)
+- return e2;
+- else
+- return e1;
+-}
+-
+ /* Decide whether and what specialized clones of NODE should be created.
+ CUR_SWEEP is the number of the current sweep of the call-graph during the
+ decision stage. */
+@@ -6128,7 +5941,7 @@ static bool
+ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
+ {
+ ipa_node_params *info = ipa_node_params_sum->get (node);
+- int count = ipa_get_param_count (info);
++ int i, count = ipa_get_param_count (info);
+ bool ret = false;
+
+ if (info->node_dead || count == 0)
+@@ -6138,8 +5951,13 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
+ fprintf (dump_file, "\nEvaluating opportunities for %s.\n",
+ node->dump_name ());
+
+- auto_vec opp_ranking;
+- for (int i = 0; i < count;i++)
++ auto_vec self_gen_clones;
++ ipa_auto_call_arg_values avals;
++ int removable_params_cost;
++ bool ctx_independent_const
++ = gather_context_independent_values (info, &avals, &removable_params_cost);
++
++ for (i = 0; i < count;i++)
+ {
+ if (!ipa_is_param_used (info, i))
+ continue;
+@@ -6149,7 +5967,7 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
+ ipcp_lattice *ctxlat = &plats->ctxlat;
+
+ if (!lat->bottom
+- && !lat->is_single_const ())
++ && !avals.m_known_vals[i])
+ {
+ ipcp_value *val;
+ for (val = lat->values; val; val = val->next)
+@@ -6176,12 +5994,8 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
+ }
+ continue;
+ }
+- cloning_opportunity_ranking opp;
+- opp.eval = cloning_opportunity_ranking_evaluation (val);
+- opp.offset = -1;
+- opp.val = val;
+- opp.index = i;
+- opp_ranking.safe_push (opp);
++ ret |= decide_about_value (node, i, -1, val, &avals,
++ &self_gen_clones, cur_sweep);
+ }
+ }
+
+@@ -6196,83 +6010,37 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
+ && (plats->aggs_contain_variable
+ || !aglat->is_single_const ()))
+ for (val = aglat->values; val; val = val->next)
+- {
+- cloning_opportunity_ranking opp;
+- opp.eval = cloning_opportunity_ranking_evaluation (val);
+- opp.offset = aglat->offset;
+- opp.val = val;
+- opp.index = i;
+- opp_ranking.safe_push (opp);
+- }
++ ret |= decide_about_value (node, i, aglat->offset, val, &avals,
++ &self_gen_clones, cur_sweep);
+ }
+
+ if (!ctxlat->bottom
+- && !ctxlat->is_single_const ())
++ && avals.m_known_contexts[i].useless_p ())
+ {
+ ipcp_value *val;
+ for (val = ctxlat->values; val; val = val->next)
+- if (!val->value.useless_p ())
+- {
+- cloning_opportunity_ranking opp;
+- opp.eval = cloning_opportunity_ranking_evaluation (val);
+- opp.offset = -2;
+- opp.val = val;
+- opp.index = i;
+- opp_ranking.safe_push (opp);
+- }
+- }
+- }
+-
+- if (!opp_ranking.is_empty ())
+- {
+- opp_ranking.qsort (compare_cloning_opportunities);
+- auto_vec self_gen_clones;
+- for (const cloning_opportunity_ranking &opp : opp_ranking)
+- if (opp.offset == -2)
+- {
+- ipcp_value *val
+- = static_cast *>
+- (opp.val);
+- ret |= decide_about_value (node, opp.index, -1, val,
++ ret |= decide_about_value (node, i, -1, val, &avals,
+ &self_gen_clones, cur_sweep);
+- }
+- else
+- {
+- ipcp_value *val = static_cast *> (opp.val);
+- ret |= decide_about_value (node, opp.index, opp.offset, val,
+- &self_gen_clones, cur_sweep);
+- }
+-
+- if (!self_gen_clones.is_empty ())
+- {
+- self_gen_clones.safe_push (node);
+- update_counts_for_self_gen_clones (node, self_gen_clones);
+ }
+ }
+
+- struct caller_statistics stats;
+- init_caller_stats (&stats);
+- node->call_for_symbol_thunks_and_aliases (gather_caller_stats, &stats,
+- false);
+- if (!stats.n_calls)
++ if (!self_gen_clones.is_empty ())
+ {
+- if (dump_file)
+- fprintf (dump_file, " Not cloning for all contexts because "
+- "there are no callers of the original node (any more).\n");
+- return ret;
++ self_gen_clones.safe_push (node);
++ update_counts_for_self_gen_clones (node, self_gen_clones);
+ }
+
+ bool do_clone_for_all_contexts = false;
+- ipa_auto_call_arg_values avals;
+- int removable_params_cost;
+- bool ctx_independent_const
+- = gather_context_independent_values (info, &avals, &removable_params_cost);
+ sreal devirt_bonus = devirtualization_time_bonus (node, &avals);
+ if (ctx_independent_const || devirt_bonus > 0
+ || (removable_params_cost && clone_for_param_removal_p (node)))
+ {
+- ipa_call_estimates estimates;
++ struct caller_statistics stats;
++ ipa_call_estimates estimates;
+
++ init_caller_stats (&stats);
++ node->call_for_symbol_thunks_and_aliases (gather_caller_stats, &stats,
++ false);
+ estimate_ipcp_clone_size_and_time (node, &avals, &estimates);
+ sreal time = estimates.nonspecialized_time - estimates.time;
+ time += devirt_bonus;
+@@ -6284,7 +6052,13 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
+ fprintf (dump_file, " - context independent values, size: %i, "
+ "time_benefit: %f\n", size, (time).to_double ());
+
+- if (size <= 0 || node->local)
++ if (!stats.n_calls)
++ {
++ if (dump_file)
++ fprintf (dump_file, " Not cloning for all contexts because "
++ "there are no callers of the original node left.\n");
++ }
++ else if (size <= 0 || node->local)
+ {
+ if (!dbg_cnt (ipa_cp_values))
+ return ret;
+@@ -6344,14 +6118,19 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
+ fprintf (dump_file, " Creating a specialized node of %s "
+ "for all known contexts.\n", node->dump_name ());
+
+- vec known_csts = vNULL;
+- known_csts.safe_grow_cleared (count, true);
+- find_scalar_values_for_callers_subset (known_csts, info, callers);
+- vec known_contexts = vNULL;
+- find_contexts_for_caller_subset (known_contexts, info, callers);
++ vec known_csts = avals.m_known_vals.copy ();
++ vec known_contexts
++ = copy_useful_known_contexts (avals.m_known_contexts);
++ find_more_scalar_values_for_callers_subset (node, known_csts, callers);
++ find_more_contexts_for_caller_subset (node, &known_contexts, callers);
+ vec *aggvals
+- = find_aggregate_values_for_callers_subset_gc (node, callers);
++ = find_aggregate_values_for_callers_subset (node, callers);
+
++ if (!known_contexts_useful_p (known_contexts))
++ {
++ known_contexts.release ();
++ known_contexts = vNULL;
++ }
+ struct cgraph_node *clone = create_specialized_node (node, known_csts,
+ known_contexts,
+ aggvals, callers);
+@@ -6576,11 +6355,6 @@ ipcp_store_vr_results (void)
+ bool do_vr = true;
+ bool do_bits = true;
+
+- /* If the function is not local, the gathered information is only useful
+- for clones. */
+- if (!node->local)
+- continue;
+-
+ if (!info || !opt_for_fn (node->decl, flag_ipa_vrp))
+ {
+ if (dump_file)
+--- gcc/ipa-cp.h
++++ gcc/ipa-cp.h
+@@ -201,8 +201,6 @@ public:
+ bool set_to_bottom ();
+ bool set_to_constant (widest_int, widest_int);
+ bool known_nonzero_p () const;
+- bool set_recipient_only ();
+- bool recipient_only_p () const {return m_recipient_only; }
+
+ widest_int get_value () const { return m_value; }
+ widest_int get_mask () const { return m_mask; }
+@@ -218,11 +216,6 @@ private:
+ enum { IPA_BITS_UNDEFINED, IPA_BITS_CONSTANT, IPA_BITS_VARYING }
+ m_lattice_val = IPA_BITS_UNDEFINED;
+
+- /* Set to true if the lattice is valid only as a recipient of propagatad
+- values but cannot be used as source of propagation because there may be
+- unknown callers. */
+- bool m_recipient_only;
+-
+ /* Similar to ccp_lattice_t, mask represents which bits of value are constant.
+ If a bit in mask is set to 0, then the corresponding bit in
+ value is known to be constant. */
+@@ -238,16 +231,10 @@ class ipcp_vr_lattice
+ {
+ public:
+ value_range m_vr;
+- /* Set to true if the lattice is valid only as a recipient of propagatad
+- values but cannot be used as source of propagation because there may be
+- unknown callers. */
+- bool m_recipient_only;
+
+ inline bool bottom_p () const;
+ inline bool top_p () const;
+ inline bool set_to_bottom ();
+- bool set_recipient_only ();
+- bool recipient_only_p () const {return m_recipient_only; }
+ bool meet_with (const vrange &p_vr);
+ bool meet_with (const ipcp_vr_lattice &other);
+ void init (tree type);
+@@ -264,7 +251,6 @@ ipcp_vr_lattice::init (tree type)
+ m_vr.set_type (type);
+
+ // Otherwise m_vr will default to unsupported_range.
+- m_recipient_only = false;
+ }
+
+ /* Structure containing lattices for a parameter itself and for pieces of
+--- gcc/testsuite/gcc.dg/ipa/ipcp-agg-14.c
++++ gcc/testsuite/gcc.dg/ipa/ipcp-agg-14.c
+@@ -1,49 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-options "-O3 -fno-ipa-sra -fno-partial-inlining -fdump-ipa-cp-details" } */
+-
+-struct S
+-{
+- int a, b, m, n, o, p;
+-};
+-
+-
+-void __attribute__ ((noinline))
+-foo (struct S *p, double *x, double *y, double *z)
+-{
+- if (p->a == 0 && p->b == 0)
+- return;
+-
+- /* Something long so that we do not clone unless we know it will
+- disappear: */
+- for (int i = 0; i < p->m; i++)
+- {
+- if (i < p->m-1)
+- x[i] += x[i+1] * y[0];
+- for (int j = 0; j < p->n; j++)
+- for (int k = 0; j < p->o; k++)
+- {
+- double s = *z;
+- for (int l = 1; l < p->p; l++)
+- s += z[l];
+- x[i] += s + 2*y[j] + 7*z[k];
+- }
+- }
+-}
+-
+-int get_int (void);
+-
+-void
+- entry (int c, double *x, double *y, double *z)
+-{
+- struct S s;
+-
+- s.a = 0;
+- s.b = 0;
+- s.m = get_int ();
+- s.n = get_int ();
+- s.o = get_int ();
+- s.p = get_int ();
+- foo (&s, x, y, z);
+-}
+-
+-/* { dg-final { scan-ipa-dump "Creating a specialized node of foo" "cp" } } */
+--- gcc/testsuite/gcc.dg/ipa/ipcp-agg-2.c
++++ gcc/testsuite/gcc.dg/ipa/ipcp-agg-2.c
+@@ -37,5 +37,5 @@ entry (int c)
+ foo (&s);
+ }
+ /* { dg-final { scan-ipa-dump-times "Creating a specialized node of foo/\[0-9\]*\\." 2 "cp" } } */
+-/* { dg-final { scan-ipa-dump "Aggregate replacements:" "cp" } } */
++/* { dg-final { scan-ipa-dump-times "Aggregate replacements:" 4 "cp" } } */
+ /* { dg-final { scan-tree-dump-not "->c;" "optimized" } } */
+--- gcc/testsuite/gcc.dg/ipa/ipcp-agg-3.c
++++ gcc/testsuite/gcc.dg/ipa/ipcp-agg-3.c
+@@ -37,6 +37,6 @@ entry (int c)
+ foo (0, &s);
+ }
+ /* { dg-final { scan-ipa-dump-times "Creating a specialized node of foo/\[0-9\]*\\." 2 "cp" } } */
+-/* { dg-final { scan-ipa-dump "Aggregate replacements: 1" "cp" } } */
+-/* { dg-final { scan-ipa-dump "Aggregate replacements: 0" "cp" } } */
++/* { dg-final { scan-ipa-dump-times "Aggregate replacements: 1" 2 "cp" } } */
++/* { dg-final { scan-ipa-dump-times "Aggregate replacements: 0" 2 "cp" } } */
+ /* { dg-final { scan-tree-dump-not "->c;" "optimized" } } */
+--- gcc/testsuite/gcc.dg/ipa/ipcp-agg-4.c
++++ gcc/testsuite/gcc.dg/ipa/ipcp-agg-4.c
+@@ -56,5 +56,5 @@ entry2 (int c)
+ }
+
+ /* { dg-final { scan-ipa-dump-times "Creating a specialized node of foo/\[0-9\]*\\." 2 "cp" } } */
+-/* { dg-final { scan-ipa-dump "Aggregate replacements:" "cp" } } */
++/* { dg-final { scan-ipa-dump-times "Aggregate replacements:" 4 "cp" } } */
+ /* { dg-final { scan-tree-dump-not "->c;" "optimized" } } */
+--- gcc/testsuite/gcc.dg/vect/pr101145_1.c
++++ gcc/testsuite/gcc.dg/vect/pr101145_1.c
+@@ -1,5 +1,5 @@
+ /* { dg-require-effective-target vect_char_add } */
+-/* { dg-additional-options "-O3 -fno-ipa-cp" } */
++/* { dg-additional-options "-O3" } */
+ #define TYPE signed char
+ #define MIN -128
+ #define MAX 127
+--- gcc/testsuite/gcc.dg/vect/pr101145_2.c
++++ gcc/testsuite/gcc.dg/vect/pr101145_2.c
+@@ -1,5 +1,5 @@
+ /* { dg-require-effective-target vect_char_add } */
+-/* { dg-additional-options "-O3 -fno-ipa-cp" } */
++/* { dg-additional-options "-O3" } */
+ #define TYPE unsigned char
+ #define MIN 0
+ #define MAX 255
+--- gcc/testsuite/gcc.dg/vect/pr101145_3.c
++++ gcc/testsuite/gcc.dg/vect/pr101145_3.c
+@@ -1,5 +1,5 @@
+ /* { dg-require-effective-target vect_long_long } */
+-/* { dg-additional-options "-O3 -fno-ipa-cp" } */
++/* { dg-additional-options "-O3" } */
+ #define TYPE int *
+ #define MIN ((TYPE)0)
+ #define MAX ((TYPE)((long long)-1))
+--- gcc/testsuite/gcc.dg/ipa/pr123543.c
++++ gcc/testsuite/gcc.dg/ipa/pr123543.c
+@@ -1,14 +0,0 @@
++/* { dg-do run } */
++/* { dg-options "-O3" } */
++
++__attribute__((noinline))
++static int local_f(int a, int b) { return a + b; }
++
++__attribute__((noinline))
++int extern_f(int a, int b) { return local_f(a, b); }
++
++int unused_g1(int b) { return extern_f(0, b); }
++
++int (*volatile fp)(int, int) = extern_f;
++
++int main() { if (fp(1, 2) != 3) __builtin_abort(); }
diff --git a/gcc16-libstdc++-docs.patch b/gcc16-libstdc++-docs.patch
index f1fa736..7d2d357 100644
--- a/gcc16-libstdc++-docs.patch
+++ b/gcc16-libstdc++-docs.patch
@@ -4,7 +4,7 @@
FSF
-+ Release 16.0.0
++ Release 16.0.1
+
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
@@ -17,7 +17,7 @@
- The API documentation, rendered into HTML, can be viewed online
+ The API documentation, rendered into HTML, can be viewed locally
-+ for the 16.0.0 release,
++ for the 16.0.1 release,
+ online
for each GCC release
and
diff --git a/gcc16-pr121778-revert.patch b/gcc16-pr121778-revert.patch
new file mode 100644
index 0000000..5d43cad
--- /dev/null
+++ b/gcc16-pr121778-revert.patch
@@ -0,0 +1,170 @@
+Temporarily revert PR121778 until PR123530 is fixed.
+
+2026-01-09 Shreya Munnangi
+ Jeff Law
+
+ PR target/121778
+ gcc/
+ * match.pd: Add pattern to recognize rotate with one or more
+ bits flipped via xor.
+ * config/sh/sh.md (*rotcl); New variant which handles the output
+ we get after the match.pd change above.
+
+ gcc/testsuite/
+ * gcc.target/riscv/pr121778.c: New test.
+
+--- gcc/config/sh/sh.md
++++ gcc/config/sh/sh.md
+@@ -3271,25 +3271,6 @@ (define_insn_and_split "*rotcl"
+ operands[3] = get_t_reg_rtx ();
+ })
+
+-(define_insn_and_split "*rotcl"
+- [(set (match_operand:SI 0 "arith_reg_dest")
+- (xor:SI (rotate:SI (match_operand:SI 1 "arith_reg_operand")
+- (const_int 1))
+- (const_int 1)))
+- (clobber (reg:SI T_REG))]
+- "TARGET_SH1 && can_create_pseudo_p ()"
+- "#"
+- "&& 1"
+- [(parallel [(set (match_dup 0)
+- (ior:SI (ashift:SI (match_dup 1) (const_int 1))
+- (and:SI (match_dup 3) (const_int 1))))
+- (clobber (reg:SI T_REG))])]
+-{
+- rtx t = gen_rtx_GE (SImode, operands[1], const0_rtx);
+- sh_split_treg_set_expr (t, curr_insn);
+- operands[3] = get_t_reg_rtx ();
+-})
+-
+ (define_insn_and_split "*rotcl"
+ [(set (match_operand:SI 0 "arith_reg_dest")
+ (ior:SI (and:SI (match_operand:SI 1 "arith_reg_or_t_reg_operand")
+--- gcc/match.pd
++++ gcc/match.pd
+@@ -12172,27 +12172,3 @@ and,
+ (simplify
+ (IFN_VEC_SHL_INSERT (vec_duplicate@1 @0) @0)
+ @1)
+-
+-/* In this case the XOR flips bits that originate from the result of the
+- right shift and do not impact the result of the left shift. We can
+- reassociate the XOR to work on the final result and simplify the rest
+- to a rotate. */
+-(simplify
+- (bit_ior:c (lshift @0 INTEGER_CST@1)
+- (bit_xor (rshift @2 INTEGER_CST@3) INTEGER_CST@4))
+- (if (((~((HOST_WIDE_INT_1U << tree_to_uhwi (@1)) - 1)) & tree_to_uhwi (@4)) == 0
+- && (tree_to_uhwi (@1) + tree_to_uhwi (@3)) == TYPE_PRECISION (type)
+- && TYPE_UNSIGNED (type)
+- && @0 == @2)
+- (bit_xor (rrotate @0 @3) @4)))
+-
+-/* Similarly, but in this case the XOR flips bits that originate from the
+- result of the left shift. */
+-(simplify
+- (bit_ior:c (bit_xor (lshift @0 INTEGER_CST@1) INTEGER_CST@2)
+- (rshift @3 INTEGER_CST@4))
+- (if ((((((HOST_WIDE_INT_1U << tree_to_uhwi (@1)) - 1)) & tree_to_uhwi (@2)) == 0)
+- && (tree_to_uhwi (@1) + tree_to_uhwi (@4)) == TYPE_PRECISION (type)
+- && TYPE_UNSIGNED (type)
+- && @0 == @3)
+- (bit_xor (rrotate @0 @4) @2)))
+--- gcc/testsuite/gcc.target/riscv/pr121778.c
++++ gcc/testsuite/gcc.target/riscv/pr121778.c
+@@ -1,94 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-options "-O2 -march=rv64gcb -mabi=lp64d" { target rv64} } */
+-/* { dg-options "-O2 -march=rv32gcb -mabi=ilp32" { target rv32} } */
+-
+-/* We need to adjust the constant so this works for rv32 and rv64. */
+-#if __riscv_xlen == 32
+-#define ONE 1U
+-#define TYPE unsigned int
+-#else
+-#define ONE 1UL
+-#define TYPE unsigned long
+-#endif
+-
+-#define F1(C) TYPE test_01##C (TYPE a) { return (a << (__riscv_xlen - C)) | ((a >> C) ^ 1); }
+-#define F2(C) TYPE test_02##C (TYPE a) { return ((a >> (__riscv_xlen - C)) ^ 1) | (a << C); }
+-#define F3(C) TYPE test_03##C (TYPE a) { return ((a << (__riscv_xlen - C)) ^ (ONE << (__riscv_xlen - 1))) | (a >> C); }
+-#define F4(C) TYPE test_04##C (TYPE a) { return (a >> (__riscv_xlen - C)) | ((a << C) ^ (ONE << (__riscv_xlen - 1))); }
+-
+-#define F(C) F1(C) F2(C) F3(C) F4(C)
+-
+-
+-F (1)
+-F (2)
+-F (3)
+-F (4)
+-F (5)
+-F (6)
+-F (7)
+-F (8)
+-F (9)
+-F (10)
+-F (11)
+-F (12)
+-F (13)
+-F (14)
+-F (15)
+-F (16)
+-F (17)
+-F (18)
+-F (19)
+-F (20)
+-F (21)
+-F (22)
+-F (23)
+-F (24)
+-F (25)
+-F (26)
+-F (27)
+-F (28)
+-F (29)
+-F (30)
+-F (31)
+-#if __riscv_xlen == 64
+-F (32)
+-F (33)
+-F (34)
+-F (35)
+-F (36)
+-F (37)
+-F (38)
+-F (39)
+-F (40)
+-F (41)
+-F (42)
+-F (43)
+-F (44)
+-F (45)
+-F (46)
+-F (47)
+-F (48)
+-F (49)
+-F (50)
+-F (51)
+-F (52)
+-F (53)
+-F (54)
+-F (55)
+-F (56)
+-F (57)
+-F (58)
+-F (59)
+-F (60)
+-F (61)
+-F (62)
+-F (63)
+-
+-/* { dg-final { scan-assembler-times "\trori" 252 { target { rv64 } } } } */
+-/* { dg-final { scan-assembler-times "\txori" 126 { target { rv64 } } } } */
+-/* { dg-final { scan-assembler-times "\tbinv" 126 { target { rv64 } } } } */
+-
+-/* { dg-final { scan-assembler-times "\trori" 124 { target { rv32 } } } } */
+-/* { dg-final { scan-assembler-times "\txori" 62 { target { rv32 } } } } */
+-/* { dg-final { scan-assembler-times "\tbinv" 62 { target { rv32 } } } } */
+-#endif
diff --git a/gcc16-pr123189.patch b/gcc16-pr123189.patch
deleted file mode 100644
index 4262362..0000000
--- a/gcc16-pr123189.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-Since we now defer noexcept parsing for templated friends, some places
-need to be updated to cope with friend template specializations -- their
-TI_TEMPLATE is a TREE_LIST rather than a TEMPLATE_DECL, and they never
-introduce new template parameters.
-
-2026-01-09 Patrick Palka
-
- PR c++/123189
-
-gcc/cp/ChangeLog:
-
- * name-lookup.cc (binding_to_template_parms_of_scope_p):
- Gracefully handle TEMPLATE_INFO whose TI_TEMPLATE is a TREE_LIST.
- * pt.cc (maybe_begin_member_template_processing): For a friend
- template specialization consider its class context instead.
-
-gcc/testsuite/ChangeLog:
-
- * g++.dg/cpp0x/noexcept92.C: New test.
-
---- gcc/cp/name-lookup.cc
-+++ gcc/cp/name-lookup.cc
-@@ -8004,6 +8004,7 @@ binding_to_template_parms_of_scope_p (cxx_binding *binding,
- /* The template of the current scope, iff said scope is a primary
- template. */
- tmpl = (tinfo
-+ && TREE_CODE (TI_TEMPLATE (tinfo)) == TEMPLATE_DECL
- && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
- ? TI_TEMPLATE (tinfo)
- : NULL_TREE);
---- gcc/cp/pt.cc
-+++ gcc/cp/pt.cc
-@@ -546,9 +546,9 @@ maybe_begin_member_template_processing (tree decl)
- int levels = 0;
- bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
-
-- if (nsdmi)
-+ if (nsdmi || decl_specialization_friend_p (decl))
- {
-- tree ctx = DECL_CONTEXT (decl);
-+ tree ctx = nsdmi ? DECL_CONTEXT (decl) : DECL_CHAIN (decl);
- decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
- /* Disregard full specializations (c++/60999). */
- && uses_template_parms (ctx)
---- gcc/testsuite/g++.dg/cpp0x/noexcept92.C
-+++ gcc/testsuite/g++.dg/cpp0x/noexcept92.C
-@@ -0,0 +1,11 @@
-+// PR c++/123189
-+// { dg-do compile { target c++11 } }
-+
-+template void f() noexcept(noexcept(T()));
-+
-+template
-+struct A {
-+ friend void f() noexcept(noexcept(T()));
-+};
-+
-+template struct A;
diff --git a/gcc16-pr123414-revert.patch b/gcc16-pr123414-revert.patch
new file mode 100644
index 0000000..475ca7b
--- /dev/null
+++ b/gcc16-pr123414-revert.patch
@@ -0,0 +1,92 @@
+Temporarily revert PR123414 until PR123525 is fixed.
+
+2026-01-09 Robin Dapp
+
+ PR tree-optimization/123414
+ * tree-ssa-forwprop.cc (simplify_vector_constructor):
+ Use ssizetype as mask type.
+
+--- gcc/tree-ssa-forwprop.cc
++++ gcc/tree-ssa-forwprop.cc
+@@ -3829,8 +3829,8 @@ static bool
+ simplify_vector_constructor (gimple_stmt_iterator *gsi)
+ {
+ gimple *stmt = gsi_stmt (*gsi);
+- tree op, orig[2], type;
+- unsigned i;
++ tree op, orig[2], type, elem_type;
++ unsigned elem_size, i;
+ unsigned HOST_WIDE_INT nelts;
+ unsigned HOST_WIDE_INT refnelts;
+ enum tree_code conv_code;
+@@ -3843,6 +3843,8 @@ simplify_vector_constructor (gimple_stmt_iterator *gsi)
+
+ if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&nelts))
+ return false;
++ elem_type = TREE_TYPE (type);
++ elem_size = TREE_INT_CST_LOW (TYPE_SIZE (elem_type));
+
+ orig[0] = NULL;
+ orig[1] = NULL;
+@@ -4175,7 +4177,13 @@ simplify_vector_constructor (gimple_stmt_iterator *gsi)
+ machine_mode vmode = TYPE_MODE (perm_type);
+ if (!can_vec_perm_const_p (vmode, vmode, indices))
+ return false;
+- mask_type = build_vector_type (ssizetype, refnelts);
++ mask_type
++ = build_vector_type (build_nonstandard_integer_type (elem_size, 1),
++ refnelts);
++ if (GET_MODE_CLASS (TYPE_MODE (mask_type)) != MODE_VECTOR_INT
++ || maybe_ne (GET_MODE_SIZE (TYPE_MODE (mask_type)),
++ GET_MODE_SIZE (TYPE_MODE (perm_type))))
++ return false;
+ tree op2 = vec_perm_indices_to_tree (mask_type, indices);
+ bool converted_orig1 = false;
+ gimple_seq stmts = NULL;
+@@ -4240,7 +4248,13 @@ simplify_vector_constructor (gimple_stmt_iterator *gsi)
+ machine_mode vmode = TYPE_MODE (type);
+ if (!can_vec_perm_const_p (vmode, vmode, indices))
+ return false;
+- mask_type = build_vector_type (ssizetype, nelts);
++ mask_type
++ = build_vector_type (build_nonstandard_integer_type (elem_size, 1),
++ nelts);
++ if (GET_MODE_CLASS (TYPE_MODE (mask_type)) != MODE_VECTOR_INT
++ || maybe_ne (GET_MODE_SIZE (TYPE_MODE (mask_type)),
++ GET_MODE_SIZE (TYPE_MODE (type))))
++ return false;
+ blend_op2 = vec_perm_indices_to_tree (mask_type, indices);
+ }
+
+--- gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123414.c
++++ gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123414.c
+@@ -1,29 +0,0 @@
+-/* { dg-do compile } */
+-/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fsigned-char -fno-strict-aliasing -fwrapv -fdump-tree-optimized -std=gnu99" } */
+-
+-signed char a=2;
+-long long b;
+-long c = 93;
+-int e[1][9];
+-
+-void
+-g (long cc, int ee[][9])
+-{
+- for (int i = 0; i < 4; i++)
+- for (int j = 0; j < 5; j++)
+- for (unsigned k = 0; k < 9; k++)
+- {
+- a *= cc;
+- for (int l = 0; l < 6; l += (ee[k] <= 0) + 2)
+- ;
+- }
+-}
+-
+-int main() {
+- g( c, e);
+- b = (int)a;
+- if (b != 34)
+- __builtin_abort ();
+-}
+-
+-/* { dg-final { scan-tree-dump-times "\[a-zA-Z_\]\[a-zA-Z0-9_\]+.=.VEC_PERM_EXPR <_\[0-9\]+, \\\{ 1(?:, 1){255} \\\}, \\\{ 0, 257, 258" 3 "optimized" } } */
diff --git a/sources b/sources
index 2d3f1fe..7ba5726 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-16.0.0-20260110.tar.xz) = 9be9b72ae45f888efe30ef50f8b497ebeaef327d037ab7a70a354d05986567115447dce8ff660b69b96d3cc6e145f509f35261d3f33902f97a7169817a972eed
+SHA512 (gcc-16.0.1-20260112.tar.xz) = ca2a3a0daae98b90dbde92591126de93325e8caee66fd7f6cbdff7ef453d1329e87c0593636e4db5d63a3503645cabede86ed894760ce6d3ccd3a95a974dc120
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From 1c7da76a52dc36fd6ace3cfeba45abdee82d820d Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Mon, 12 Jan 2026 20:27:05 +0100
Subject: [PATCH 69/71] 16.0.1-0.1
---
gcc16-ipacp-revert.patch | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/gcc16-ipacp-revert.patch b/gcc16-ipacp-revert.patch
index dae3ba2..c1424b4 100644
--- a/gcc16-ipacp-revert.patch
+++ b/gcc16-ipacp-revert.patch
@@ -1063,17 +1063,17 @@ Temporarily revert until PR123542 is resolved.
--- gcc/testsuite/gcc.dg/ipa/pr123543.c
+++ gcc/testsuite/gcc.dg/ipa/pr123543.c
@@ -1,14 +0,0 @@
-+/* { dg-do run } */
-+/* { dg-options "-O3" } */
-+
-+__attribute__((noinline))
-+static int local_f(int a, int b) { return a + b; }
-+
-+__attribute__((noinline))
-+int extern_f(int a, int b) { return local_f(a, b); }
-+
-+int unused_g1(int b) { return extern_f(0, b); }
-+
-+int (*volatile fp)(int, int) = extern_f;
-+
-+int main() { if (fp(1, 2) != 3) __builtin_abort(); }
+-/* { dg-do run } */
+-/* { dg-options "-O3" } */
+-
+-__attribute__((noinline))
+-static int local_f(int a, int b) { return a + b; }
+-
+-__attribute__((noinline))
+-int extern_f(int a, int b) { return local_f(a, b); }
+-
+-int unused_g1(int b) { return extern_f(0, b); }
+-
+-int (*volatile fp)(int, int) = extern_f;
+-
+-int main() { if (fp(1, 2) != 3) __builtin_abort(); }
From fa1effd14b1163d57f66a353a5cb3a20f13edf04 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Tue, 13 Jan 2026 14:43:02 +0100
Subject: [PATCH 70/71] 16.0.1-0.2
---
.gitignore | 1 +
gcc.spec | 76 ++++++++++++++++++++++++++++--
gcc16-pr123414-revert.patch | 92 -------------------------------------
gcc16-pr123573.patch | 53 +++++++++++++++++++++
sources | 2 +-
5 files changed, 127 insertions(+), 97 deletions(-)
delete mode 100644 gcc16-pr123414-revert.patch
create mode 100644 gcc16-pr123573.patch
diff --git a/.gitignore b/.gitignore
index 73b38af..5fed11f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,3 +28,4 @@
/gcc-16.0.0-20260110.tar.xz
/gcc-16.0.0-20260112.tar.xz
/gcc-16.0.1-20260112.tar.xz
+/gcc-16.0.1-20260113.tar.xz
diff --git a/gcc.spec b/gcc.spec
index e461bcf..6e7eb04 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20260112
-%global gitrev 25ea0dce3d78a294015cf5df891a4630172b0d12
+%global DATE 20260113
+%global gitrev a0ec01c1ccb192681b09dd03c265e84fe2bd00e5
%global gcc_version 16.0.1
%global gcc_major 16
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -158,7 +158,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.1%{?dist}
+Release: %{gcc_release}.2%{?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
@@ -327,7 +327,7 @@ Patch14: gcc16-pr120250.patch
Patch15: gcc16-pr123273.patch
Patch16: gcc16-ipacp-revert.patch
Patch17: gcc16-pr121778-revert.patch
-Patch18: gcc16-pr123414-revert.patch
+Patch18: gcc16-pr123573.patch
Patch50: isl-rh2155127.patch
@@ -1762,6 +1762,11 @@ GROUP ( /%{_lib}/libgcc_s.so.1 libgcc.a )' > $FULLPATH/libgcc_s.so
%else
ln -sf /%{_lib}/libgcc_s.so.1 $FULLPATH/libgcc_s.so
%endif
+rm -f $FULLPATH/libgcc_s_asneeded.so
+echo '/* GNU ld script
+ Add DT_NEEDED entry for libgcc_s.so only if needed. */
+OUTPUT_FORMAT('`gcc -Wl,--print-output-format -nostdlib -r -o /dev/null`')
+INPUT ( AS_NEEDED ( -lgcc_s ) )' > $FULLPATH/libgcc_s_asneeded.so
%ifarch sparcv9 ppc
%ifarch ppc
rm -f $FULLPATH/64/libgcc_s.so
@@ -1773,6 +1778,11 @@ GROUP ( /lib64/libgcc_s.so.1 libgcc.a )' > $FULLPATH/64/libgcc_s.so
%else
ln -sf /lib64/libgcc_s.so.1 $FULLPATH/64/libgcc_s.so
%endif
+rm -f $FULLPATH/64/libgcc_s_asneeded.so
+echo '/* GNU ld script
+ Add DT_NEEDED entry for libgcc_s.so only if needed. */
+OUTPUT_FORMAT('`gcc -m64 -Wl,--print-output-format -nostdlib -r -o /dev/null`')
+INPUT ( AS_NEEDED ( -lgcc_s ) )' > $FULLPATH/64/libgcc_s_asneeded.so
%endif
%ifarch %{multilib_64_archs}
%ifarch x86_64 ppc64 ppc64p7
@@ -1785,6 +1795,11 @@ GROUP ( /lib/libgcc_s.so.1 libgcc.a )' > $FULLPATH/32/libgcc_s.so
%else
ln -sf /lib/libgcc_s.so.1 $FULLPATH/32/libgcc_s.so
%endif
+rm -f $FULLPATH/32/libgcc_s_asneeded.so
+echo '/* GNU ld script
+ Add DT_NEEDED entry for libgcc_s.so only if needed. */
+OUTPUT_FORMAT('`gcc -m32 -Wl,--print-output-format -nostdlib -r -o /dev/null`')
+INPUT ( AS_NEEDED ( -lgcc_s ) )' > $FULLPATH/32/libgcc_s_asneeded.so
%endif
mv -f %{buildroot}%{_prefix}/%{_lib}/libgomp.spec $FULLPATH/
@@ -1857,6 +1872,12 @@ ln -sf ../../../libitm.so.1.* libitm.so
%endif
%if %{build_libatomic}
ln -sf ../../../libatomic.so.1.* libatomic.so
+rm -f libatomic_asneeded.so libatomic_asneeded.a
+echo '/* GNU ld script
+ Add DT_NEEDED entry for -latomic only if needed. */
+OUTPUT_FORMAT('`gcc -Wl,--print-output-format -nostdlib -r -o /dev/null`')
+INPUT ( AS_NEEDED ( -latomic ) )' > libatomic_asneeded.so
+ln -sf libatomic.a libatomic_asneeded.a
%endif
%if %{build_libasan}
ln -sf ../../../libasan.so.8.* libasan.so
@@ -1898,6 +1919,12 @@ ln -sf ../../../../%{_lib}/libitm.so.1.* libitm.so
%endif
%if %{build_libatomic}
ln -sf ../../../../%{_lib}/libatomic.so.1.* libatomic.so
+rm -f libatomic_asneeded.so libatomic_asneeded.a
+echo '/* GNU ld script
+ Add DT_NEEDED entry for -latomic only if needed. */
+OUTPUT_FORMAT('`gcc -Wl,--print-output-format -nostdlib -r -o /dev/null`')
+INPUT ( AS_NEEDED ( -latomic ) )' > libatomic_asneeded.so
+ln -sf libatomic.a libatomic_asneeded.a
%endif
%if %{build_libasan}
ln -sf ../../../../%{_lib}/libasan.so.8.* libasan.so
@@ -2072,6 +2099,17 @@ rm -f libatomic.so
echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libatomic.so.1.* | sed 's,^.*liba,liba,'`' )' > libatomic.so
echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libatomic.so.1.* | sed 's,^.*liba,liba,'`' )' > 64/libatomic.so
mv -f %{buildroot}%{_prefix}/lib64/libatomic.*a 64/
+rm -f libatomic_asneeded.so libatomic_asneeded.a 64/libatomic_asneeded.so 64/libatomic_asneeded.a
+echo '/* GNU ld script
+ Add DT_NEEDED entry for -latomic only if needed. */
+OUTPUT_FORMAT('`gcc -Wl,--print-output-format -nostdlib -r -o /dev/null`')
+INPUT ( AS_NEEDED ( -latomic ) )' > libatomic_asneeded.so
+ln -sf libatomic.a libatomic_asneeded.a
+echo '/* GNU ld script
+ Add DT_NEEDED entry for -latomic only if needed. */
+OUTPUT_FORMAT('`gcc -m64 -Wl,--print-output-format -nostdlib -r -o /dev/null`')
+INPUT ( AS_NEEDED ( -latomic ) )' > 64/libatomic_asneeded.so
+ln -sf libatomic.a 64/libatomic_asneeded.a
%endif
%if %{build_libasan}
rm -f libasan.so
@@ -2204,6 +2242,17 @@ rm -f libatomic.so
echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libatomic.so.1.* | sed 's,^.*liba,liba,'`' )' > libatomic.so
echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libatomic.so.1.* | sed 's,^.*liba,liba,'`' )' > 32/libatomic.so
mv -f %{buildroot}%{_prefix}/lib/libatomic.*a 32/
+rm -f libatomic_asneeded.so libatomic_asneeded.a 32/libatomic_asneeded.so 32/libatomic_asneeded.a
+echo '/* GNU ld script
+ Add DT_NEEDED entry for -latomic only if needed. */
+OUTPUT_FORMAT('`gcc -Wl,--print-output-format -nostdlib -r -o /dev/null`')
+INPUT ( AS_NEEDED ( -latomic ) )' > libatomic_asneeded.so
+ln -sf libatomic.a libatomic_asneeded.a
+echo '/* GNU ld script
+ Add DT_NEEDED entry for -latomic only if needed. */
+OUTPUT_FORMAT('`gcc -m32 -Wl,--print-output-format -nostdlib -r -o /dev/null`')
+INPUT ( AS_NEEDED ( -latomic ) )' > 32/libatomic_asneeded.so
+ln -sf libatomic.a 32/libatomic_asneeded.a
%endif
%if %{build_libasan}
rm -f libasan.so
@@ -2919,6 +2968,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcov.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcc_eh.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcc_s.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgcc_s_asneeded.so
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgomp.spec
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgomp.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libgomp.so
@@ -2938,6 +2988,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libgcov.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libgcc_eh.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libgcc_s.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libgcc_s_asneeded.so
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libgomp.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libgomp.so
%if %{build_libquadmath}
@@ -2951,6 +3002,8 @@ end
%if %{build_libatomic}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libatomic.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libatomic.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libatomic_asneeded.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libatomic_asneeded.so
%endif
%if %{build_libasan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libasan.a
@@ -2969,6 +3022,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgcov.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgcc_eh.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgcc_s.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgcc_s_asneeded.so
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgomp.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libgomp.so
%if %{build_libquadmath}
@@ -2982,6 +3036,8 @@ end
%if %{build_libatomic}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libatomic.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libatomic.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libatomic_asneeded.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libatomic_asneeded.so
%endif
%if %{build_libasan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libasan.a
@@ -3005,6 +3061,8 @@ end
%if %{build_libatomic}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic_asneeded.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic_asneeded.so
%endif
%if %{build_libasan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libasan.a
@@ -3019,6 +3077,8 @@ end
%if %{build_libatomic}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic_asneeded.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libatomic_asneeded.so
%endif
%if %{build_libasan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libasan.so
@@ -3914,6 +3974,14 @@ end
%endif
%changelog
+* Tue Jan 13 2026 Jakub Jelinek 16.0.1-0.2
+- update from trunk
+ - PRs fortran/91960, fortran/112460, libstdc++/123396,
+ rtl-optimization/123444, rtl-optimization/123501, target/117581,
+ target/123484, testsuite/123098, tree-optimization/122843,
+ tree-optimization/122845, tree-optimization/123301,
+ tree-optimization/123525, tree-optimization/123539
+
* Mon Jan 12 2026 Jakub Jelinek 16.0.1-0.1
- update from trunk
- PRs c++/81337, c++/115163, c++/123526, fortran/77415, ipa/122458,
diff --git a/gcc16-pr123414-revert.patch b/gcc16-pr123414-revert.patch
deleted file mode 100644
index 475ca7b..0000000
--- a/gcc16-pr123414-revert.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-Temporarily revert PR123414 until PR123525 is fixed.
-
-2026-01-09 Robin Dapp
-
- PR tree-optimization/123414
- * tree-ssa-forwprop.cc (simplify_vector_constructor):
- Use ssizetype as mask type.
-
---- gcc/tree-ssa-forwprop.cc
-+++ gcc/tree-ssa-forwprop.cc
-@@ -3829,8 +3829,8 @@ static bool
- simplify_vector_constructor (gimple_stmt_iterator *gsi)
- {
- gimple *stmt = gsi_stmt (*gsi);
-- tree op, orig[2], type;
-- unsigned i;
-+ tree op, orig[2], type, elem_type;
-+ unsigned elem_size, i;
- unsigned HOST_WIDE_INT nelts;
- unsigned HOST_WIDE_INT refnelts;
- enum tree_code conv_code;
-@@ -3843,6 +3843,8 @@ simplify_vector_constructor (gimple_stmt_iterator *gsi)
-
- if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&nelts))
- return false;
-+ elem_type = TREE_TYPE (type);
-+ elem_size = TREE_INT_CST_LOW (TYPE_SIZE (elem_type));
-
- orig[0] = NULL;
- orig[1] = NULL;
-@@ -4175,7 +4177,13 @@ simplify_vector_constructor (gimple_stmt_iterator *gsi)
- machine_mode vmode = TYPE_MODE (perm_type);
- if (!can_vec_perm_const_p (vmode, vmode, indices))
- return false;
-- mask_type = build_vector_type (ssizetype, refnelts);
-+ mask_type
-+ = build_vector_type (build_nonstandard_integer_type (elem_size, 1),
-+ refnelts);
-+ if (GET_MODE_CLASS (TYPE_MODE (mask_type)) != MODE_VECTOR_INT
-+ || maybe_ne (GET_MODE_SIZE (TYPE_MODE (mask_type)),
-+ GET_MODE_SIZE (TYPE_MODE (perm_type))))
-+ return false;
- tree op2 = vec_perm_indices_to_tree (mask_type, indices);
- bool converted_orig1 = false;
- gimple_seq stmts = NULL;
-@@ -4240,7 +4248,13 @@ simplify_vector_constructor (gimple_stmt_iterator *gsi)
- machine_mode vmode = TYPE_MODE (type);
- if (!can_vec_perm_const_p (vmode, vmode, indices))
- return false;
-- mask_type = build_vector_type (ssizetype, nelts);
-+ mask_type
-+ = build_vector_type (build_nonstandard_integer_type (elem_size, 1),
-+ nelts);
-+ if (GET_MODE_CLASS (TYPE_MODE (mask_type)) != MODE_VECTOR_INT
-+ || maybe_ne (GET_MODE_SIZE (TYPE_MODE (mask_type)),
-+ GET_MODE_SIZE (TYPE_MODE (type))))
-+ return false;
- blend_op2 = vec_perm_indices_to_tree (mask_type, indices);
- }
-
---- gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123414.c
-+++ gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123414.c
-@@ -1,29 +0,0 @@
--/* { dg-do compile } */
--/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fsigned-char -fno-strict-aliasing -fwrapv -fdump-tree-optimized -std=gnu99" } */
--
--signed char a=2;
--long long b;
--long c = 93;
--int e[1][9];
--
--void
--g (long cc, int ee[][9])
--{
-- for (int i = 0; i < 4; i++)
-- for (int j = 0; j < 5; j++)
-- for (unsigned k = 0; k < 9; k++)
-- {
-- a *= cc;
-- for (int l = 0; l < 6; l += (ee[k] <= 0) + 2)
-- ;
-- }
--}
--
--int main() {
-- g( c, e);
-- b = (int)a;
-- if (b != 34)
-- __builtin_abort ();
--}
--
--/* { dg-final { scan-tree-dump-times "\[a-zA-Z_\]\[a-zA-Z0-9_\]+.=.VEC_PERM_EXPR <_\[0-9\]+, \\\{ 1(?:, 1){255} \\\}, \\\{ 0, 257, 258" 3 "optimized" } } */
diff --git a/gcc16-pr123573.patch b/gcc16-pr123573.patch
new file mode 100644
index 0000000..2bc769d
--- /dev/null
+++ b/gcc16-pr123573.patch
@@ -0,0 +1,53 @@
+The following fixes the fix from r16-6709-ga4716ece529dfd some
+more by making sure permute to one operand folding faces same
+element number vectors but also insert a VIEW_CONVERT_EXPR for
+the case one is VLA and one is VLS (when the VLA case is actually
+constant, like with -msve-vector-bits=128). It also makes the
+assert that output and input element numbers match done in
+fold_vec_perm which this pattern eventually dispatches to into
+a check (as the comment already indicates).
+
+Testcases are in the target specific aarch64 testsuite already.
+
+Bootstrap and regtest ongoing on x86_64-unknown-linux-gnu.
+
+2026-01-13 Richard Biener
+
+ PR middle-end/123573
+ * fold-const.cc (fold_vec_perm): Actually check, not assert,
+ that input and output vector element numbers agree.
+ * match.pd (vec_perm @0 @1 @2): Make sure element numbers
+ are the same when folding to an input vector and wrap that
+ inside a VIEW_CONVERT_EXPR.
+
+--- gcc/fold-const.cc
++++ gcc/fold-const.cc
+@@ -10704,11 +10704,10 @@ fold_vec_perm (tree type, tree arg0, tree arg1, const vec_perm_indices &sel)
+
+ /* For fall back case, we want to ensure we have VLS vectors
+ with equal length. */
+- if (!sel.length ().is_constant (&nelts))
++ if (!sel.length ().is_constant (&nelts)
++ || !known_eq (sel.length (), TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg0))))
+ return NULL_TREE;
+
+- gcc_assert (known_eq (sel.length (),
+- TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg0))));
+ tree *in_elts = XALLOCAVEC (tree, nelts * 2);
+ if (!vec_cst_ctor_to_array (arg0, nelts, in_elts)
+ || !vec_cst_ctor_to_array (arg1, nelts, in_elts + nelts))
+--- gcc/match.pd
++++ gcc/match.pd
+@@ -11528,9 +11528,9 @@ and,
+ vec_perm_indices sel (builder, single_arg ? 1 : 2, nelts_in);
+ }
+ (if (known_eq (nelts, nelts_in) && sel.series_p (0, 1, 0, 1))
+- { op0; }
+- (if (sel.series_p (0, 1, nelts_in, 1))
+- { op1; }
++ (view_convert @0)
++ (if (known_eq (nelts, nelts_in) && sel.series_p (0, 1, nelts_in, 1))
++ (view_convert @1)
+ (with
+ {
+ if (!single_arg)
diff --git a/sources b/sources
index 7ba5726..5fa3693 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-16.0.1-20260112.tar.xz) = ca2a3a0daae98b90dbde92591126de93325e8caee66fd7f6cbdff7ef453d1329e87c0593636e4db5d63a3503645cabede86ed894760ce6d3ccd3a95a974dc120
+SHA512 (gcc-16.0.1-20260113.tar.xz) = 1cd4985667f4a0add59b053bc1ba945f8e7176eace95f3ba05e15de10e50ceaccc4343237c7e552d9bad36c35a7c15c46dccd9d2ff195ab5a85a32cbd5a78e82
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0
From 11a761516774c8cdcf418b698858b56a72414a39 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek
Date: Thu, 15 Jan 2026 16:59:36 +0100
Subject: [PATCH 71/71] 16.0.1-0.3
---
.gitignore | 1 +
gcc.spec | 27 +-
gcc16-ipacp-revert.patch | 1079 -----------------------------------
gcc16-pr120250.patch | 61 --
gcc16-pr121778-revert.patch | 170 ------
gcc16-pr123115.patch | 17 -
gcc16-pr123573.patch | 53 --
sources | 2 +-
8 files changed, 19 insertions(+), 1391 deletions(-)
delete mode 100644 gcc16-ipacp-revert.patch
delete mode 100644 gcc16-pr120250.patch
delete mode 100644 gcc16-pr121778-revert.patch
delete mode 100644 gcc16-pr123115.patch
delete mode 100644 gcc16-pr123573.patch
diff --git a/.gitignore b/.gitignore
index 5fed11f..b67c902 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,4 @@
/gcc-16.0.0-20260112.tar.xz
/gcc-16.0.1-20260112.tar.xz
/gcc-16.0.1-20260113.tar.xz
+/gcc-16.0.1-20260115.tar.xz
diff --git a/gcc.spec b/gcc.spec
index 6e7eb04..71e5d1d 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
-%global DATE 20260113
-%global gitrev a0ec01c1ccb192681b09dd03c265e84fe2bd00e5
+%global DATE 20260115
+%global gitrev 1a9a51aca25eaad91d80869c43859274fe5e1096
%global gcc_version 16.0.1
%global gcc_major 16
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -158,7 +158,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.2%{?dist}
+Release: %{gcc_release}.3%{?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,12 +322,7 @@ Patch9: gcc16-Wno-format-security.patch
Patch10: gcc16-rh1574936.patch
Patch11: gcc16-d-shared-libphobos.patch
Patch12: gcc16-pr119006.patch
-Patch13: gcc16-pr123115.patch
-Patch14: gcc16-pr120250.patch
-Patch15: gcc16-pr123273.patch
-Patch16: gcc16-ipacp-revert.patch
-Patch17: gcc16-pr121778-revert.patch
-Patch18: gcc16-pr123573.patch
+Patch13: gcc16-pr123273.patch
Patch50: isl-rh2155127.patch
@@ -2553,7 +2548,8 @@ rm -rf %{buildroot}%{_prefix}/lib64/go/%{gcc_major}/%{gcc_target_platform}
rm -f %{buildroot}%{_prefix}/lib*/lib*.spec || :
rm -f %{buildroot}%{_prefix}/lib*/libstdc++.modules.json || :
rm -f %{buildroot}%{_prefix}/%{_lib}/lib{asan,atomic,gcc_s,gcobol,ga68,gdruntime,gfortran,go,gomp-plugin-*,gomp,gphobos,hwasan}.so || :
-rm -f %{buildroot}%{_prefix}/%{_lib}/lib{itm,lsan,m2{cor,iso,log,min,pim},objc,quadmath,stdc++,tsan,ubsan}.so || :
+rm -f %{buildroot}%{_prefix}/%{_lib}/lib{itm,lsan,m2{cor,iso,log,min,pim},objc,quadmath,stdc++,tsan,ubsan,gcc_s_asneeded,atomic_asneeded}.so || :
+rm -f %{buildroot}%{_prefix}/%{_lib}/libatomic_asneeded.a || :
rm -f %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/install-tools/{fixinc.sh,mkinstalldirs} || :
rm -f %{buildroot}%{_prefix}/share/locale/*/LC_MESSAGES/libstdc++.mo || :
rm -f %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include-fixed/README || :
@@ -3974,6 +3970,17 @@ end
%endif
%changelog
+* Thu Jan 15 2026 Jakub Jelinek 16.0.1-0.3
+- update from trunk
+ - PRs c/123309, c++/120775, c++/122634, c++/123081, c++/123551,
+ debug/121045, driver/108865, driver/123504, ipa/122852, ipa/123542,
+ middle-end/123115, middle-end/123392, middle-end/123573,
+ rtl-optimization/123312, rtl-optimization/123544, target/38118,
+ target/114528, target/120250, target/121240, target/123092,
+ testsuite/122522, tree-optimization/119402, tree-optimization/120322,
+ tree-optimization/123109, tree-optimization/123190,
+ tree-optimization/123530
+
* Tue Jan 13 2026 Jakub Jelinek 16.0.1-0.2
- update from trunk
- PRs fortran/91960, fortran/112460, libstdc++/123396,
diff --git a/gcc16-ipacp-revert.patch b/gcc16-ipacp-revert.patch
deleted file mode 100644
index c1424b4..0000000
--- a/gcc16-ipacp-revert.patch
+++ /dev/null
@@ -1,1079 +0,0 @@
-Temporarily revert until PR123542 is resolved.
-
-2026-01-06 Martin Jambor
-
- * ipa-cp.h (class ipcp_bits_lattice): New members set_recipient_only,
- recipient_only_p and m_recipient_only.
- (class ipcp_vr_lattice): Likewise.
- (ipcp_vr_lattice::init): Initialize also m_recipient_only.
- * ipa-cp.cc (ipcp_bits_lattice::print): Adjust printting to also
- print the new flag.
- (ipcp_vr_lattice::print): Likewise.
- (ipcp_vr_lattice::set_recipient_only): New function.
- (ipcp_bits_lattice::set_recipient_only): Likewise.
- (set_all_contains_variable): New parameter MAKE_SIMPLE_RECIPIENTS, set
- bits and vr lattices to recibient only insted to bottom when it is
- true.
- (initialize_node_lattices): Pass true to the second parameter of
- set_all_contains_variable.
- (propagate_bits_across_jump_function): Treat recipient_only source
- lattices like bottom.
- (propagate_vr_across_jump_function): Likewise.
- (ipcp_store_vr_results): Skip non-local nodes.
-
-2026-01-09 Martin Jambor
-
- * ipa-cp.cc (good_cloning_opportunity_p): Dump a message when
- bailing out early too.
- (find_more_scalar_values_for_callers_subset): Rename to
- find_scalar_values_for_callers_subset, collect constants regardless of
- what is already in the vector. Remove dumping.
- (find_more_contexts_for_caller_subset): Rename to
- find_contexts_for_caller_subset, collect contexts regardless of what
- is already in the vector. Remove dumping.
- (find_aggregate_values_for_callers_subset): Rename to
- find_aggregate_values_for_callers_subset_gc, implement using new
- functions.
- (find_aggregate_values_for_callers_subset_1): New function.
- (find_aggregate_values_for_callers_subset): Likewise.
- (copy_known_vectors_add_val): Removed.
- (dump_reestimation_message): New function.
- (decide_about_value): Remove formal parameter avals, compute it
- independently, and use it to estimate local cloning effects.
- (struct cloning_opportunity_ranking): New type.
- (compare_cloning_opportunities): New function.
- (cloning_opportunity_ranking_evaluation): Likewise.
- (decide_whether_version_node): Pre-sort candidates for cloning before
- really evaluating them. Calculate context independent values only
- when considering versioning for all contexts.
- (ipcp_val_agg_replacement_ok_p): Renamed to
- ipcp_val_replacement_ok_p, check also non-aggregate values.
-
---- gcc/ipa-cp.cc
-+++ gcc/ipa-cp.cc
-@@ -339,25 +339,18 @@ ipcp_print_widest_int (FILE *f, const widest_int &value)
- void
- ipcp_bits_lattice::print (FILE *f)
- {
-- if (bottom_p ())
-- {
-- fprintf (f, " Bits unusable (BOTTOM)\n");
-- return;
-- }
--
- if (top_p ())
-- fprintf (f, " Bits unknown (TOP)");
-+ fprintf (f, " Bits unknown (TOP)\n");
-+ else if (bottom_p ())
-+ fprintf (f, " Bits unusable (BOTTOM)\n");
- else
- {
- fprintf (f, " Bits: value = ");
- ipcp_print_widest_int (f, get_value ());
- fprintf (f, ", mask = ");
- ipcp_print_widest_int (f, get_mask ());
-+ fprintf (f, "\n");
- }
--
-- if (m_recipient_only)
-- fprintf (f, " (recipient only)");
-- fprintf (f, "\n");
- }
-
- /* Print value range lattice to F. */
-@@ -365,8 +358,6 @@ ipcp_bits_lattice::print (FILE *f)
- void
- ipcp_vr_lattice::print (FILE * f)
- {
-- if (m_recipient_only)
-- fprintf (f, "(recipient only) ");
- m_vr.dump (f);
- }
-
-@@ -897,18 +888,6 @@ ipcp_vr_lattice::set_to_bottom ()
- return true;
- }
-
--/* Set the flag that this lattice is a recipient only, return true if it was
-- not set before. */
--
--bool
--ipcp_vr_lattice::set_recipient_only ()
--{
-- if (m_recipient_only)
-- return false;
-- m_recipient_only = true;
-- return true;
--}
--
- /* Set lattice value to bottom, if it already isn't the case. */
-
- bool
-@@ -945,18 +924,6 @@ ipcp_bits_lattice::known_nonzero_p () const
- return wi::ne_p (wi::bit_and (wi::bit_not (m_mask), m_value), 0);
- }
-
--/* Set the flag that this lattice is a recipient only, return true if it was not
-- set before. */
--
--bool
--ipcp_bits_lattice::set_recipient_only ()
--{
-- if (m_recipient_only)
-- return false;
-- m_recipient_only = true;
-- return true;
--}
--
- /* Convert operand to value, mask form. */
-
- void
-@@ -1359,28 +1326,17 @@ intersect_argaggs_with (vec &elts,
- }
-
- /* Mark bot aggregate and scalar lattices as containing an unknown variable,
-- return true is any of them has not been marked as such so far. If if
-- MAKE_SIMPLE_RECIPIENTS is true, set the lattices that can only hold one
-- value to being recipients only, otherwise also set them to bottom. */
-+ return true is any of them has not been marked as such so far. */
-
- static inline bool
--set_all_contains_variable (class ipcp_param_lattices *plats,
-- bool make_simple_recipients = false)
-+set_all_contains_variable (class ipcp_param_lattices *plats)
- {
- bool ret;
- ret = plats->itself.set_contains_variable ();
- ret |= plats->ctxlat.set_contains_variable ();
- ret |= set_agg_lats_contain_variable (plats);
-- if (make_simple_recipients)
-- {
-- ret |= plats->bits_lattice.set_recipient_only ();
-- ret |= plats->m_value_range.set_recipient_only ();
-- }
-- else
-- {
-- ret |= plats->bits_lattice.set_to_bottom ();
-- ret |= plats->m_value_range.set_to_bottom ();
-- }
-+ ret |= plats->bits_lattice.set_to_bottom ();
-+ ret |= plats->m_value_range.set_to_bottom ();
- return ret;
- }
-
-@@ -1525,7 +1481,7 @@ initialize_node_lattices (struct cgraph_node *node)
- {
- plats->m_value_range.init (type);
- if (variable)
-- set_all_contains_variable (plats, true);
-+ set_all_contains_variable (plats);
- }
- }
-
-@@ -2617,8 +2573,7 @@ propagate_bits_across_jump_function (cgraph_edge *cs, int idx,
- result of x & 0xff == 0xff, which gets computed during ccp1 pass
- and we store it in jump function during analysis stage. */
-
-- if (!src_lats->bits_lattice.bottom_p ()
-- && !src_lats->bits_lattice.recipient_only_p ())
-+ if (!src_lats->bits_lattice.bottom_p ())
- {
- if (!op_type)
- op_type = ipa_get_type (caller_info, src_idx);
-@@ -2684,8 +2639,7 @@ propagate_vr_across_jump_function (cgraph_edge *cs, ipa_jump_func *jfunc,
- = ipa_get_parm_lattices (caller_info, src_idx);
- tree operand_type = ipa_get_type (caller_info, src_idx);
-
-- if (src_lats->m_value_range.bottom_p ()
-- || src_lats->m_value_range.recipient_only_p ())
-+ if (src_lats->m_value_range.bottom_p ())
- return dest_lat->set_to_bottom ();
-
- if (ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR
-@@ -3443,13 +3397,7 @@ good_cloning_opportunity_p (struct cgraph_node *node, sreal time_benefit,
- /* If there is no call which was executed in profiling or where
- profile is missing, we do not want to clone. */
- || (!called_without_ipa_profile && !count_sum.nonzero_p ()))
-- {
-- if (dump_file && (dump_flags & TDF_DETAILS))
-- fprintf (dump_file, " good_cloning_opportunity_p (time: %g, "
-- "size: %i): Definitely not good or prohibited.\n",
-- time_benefit.to_double (), size_cost);
-- return false;
-- }
-+ return false;
-
- gcc_assert (size_cost > 0);
-
-@@ -5290,29 +5238,24 @@ self_recursive_agg_pass_through_p (const cgraph_edge *cs,
- KNOWN_CSTS with constants that are also known for all of the CALLERS. */
-
- static void
--find_scalar_values_for_callers_subset (vec &known_csts,
-- ipa_node_params *info,
-- const vec &callers)
-+find_more_scalar_values_for_callers_subset (struct cgraph_node *node,
-+ vec &known_csts,
-+ const vec &callers)
- {
-+ ipa_node_params *info = ipa_node_params_sum->get (node);
- int i, count = ipa_get_param_count (info);
-
- for (i = 0; i < count; i++)
- {
-- ipcp_lattice *lat = ipa_get_scalar_lat (info, i);
-- if (lat->bottom)
-- continue;
-- if (lat->is_single_const ())
-- {
-- known_csts[i] = lat->values->value;
-- continue;
-- }
--
- struct cgraph_edge *cs;
- tree newval = NULL_TREE;
- int j;
- bool first = true;
- tree type = ipa_get_type (info, i);
-
-+ if (ipa_get_scalar_lat (info, i)->bottom || known_csts[i])
-+ continue;
-+
- FOR_EACH_VEC_ELT (callers, j, cs)
- {
- struct ipa_jump_func *jump_func;
-@@ -5369,7 +5312,18 @@ find_scalar_values_for_callers_subset (vec &known_csts,
- }
-
- if (newval)
-- known_csts[i] = newval;
-+ {
-+ if (dump_file && (dump_flags & TDF_DETAILS))
-+ {
-+ fprintf (dump_file, " adding an extra known scalar value ");
-+ print_ipcp_constant_value (dump_file, newval);
-+ fprintf (dump_file, " for ");
-+ ipa_dump_param (dump_file, info, i);
-+ fprintf (dump_file, "\n");
-+ }
-+
-+ known_csts[i] = newval;
-+ }
- }
- }
-
-@@ -5378,34 +5332,23 @@ find_scalar_values_for_callers_subset (vec &known_csts,
- CALLERS. */
-
- static void
--find_contexts_for_caller_subset (vec
-- &known_contexts,
-- ipa_node_params *info,
-- const vec &callers)
-+find_more_contexts_for_caller_subset (cgraph_node *node,
-+ vec
-+ *known_contexts,
-+ const vec &callers)
- {
-+ ipa_node_params *info = ipa_node_params_sum->get (node);
- int i, count = ipa_get_param_count (info);
-
- for (i = 0; i < count; i++)
- {
-- if (!ipa_is_param_used (info, i))
-- continue;
-+ cgraph_edge *cs;
-
-- ipcp_lattice *ctxlat
-- = ipa_get_poly_ctx_lat (info, i);
-- if (ctxlat->bottom)
-+ if (ipa_get_poly_ctx_lat (info, i)->bottom
-+ || (known_contexts->exists ()
-+ && !(*known_contexts)[i].useless_p ()))
- continue;
-- if (ctxlat->is_single_const ())
-- {
-- if (!ctxlat->values->value.useless_p ())
-- {
-- if (known_contexts.is_empty ())
-- known_contexts.safe_grow_cleared (count, true);
-- known_contexts[i] = ctxlat->values->value;
-- }
-- continue;
-- }
-
-- cgraph_edge *cs;
- ipa_polymorphic_call_context newval;
- bool first = true;
- int j;
-@@ -5433,9 +5376,20 @@ find_contexts_for_caller_subset (vec
-
- if (!newval.useless_p ())
- {
-- if (known_contexts.is_empty ())
-- known_contexts.safe_grow_cleared (count, true);
-- known_contexts[i] = newval;
-+ if (dump_file && (dump_flags & TDF_DETAILS))
-+ {
-+ fprintf (dump_file, " adding an extra known polymorphic "
-+ "context ");
-+ print_ipcp_constant_value (dump_file, newval);
-+ fprintf (dump_file, " for ");
-+ ipa_dump_param (dump_file, info, i);
-+ fprintf (dump_file, "\n");
-+ }
-+
-+ if (!known_contexts->exists ())
-+ known_contexts->safe_grow_cleared (ipa_get_param_count (info),
-+ true);
-+ (*known_contexts)[i] = newval;
- }
-
- }
-@@ -5622,12 +5576,11 @@ push_agg_values_from_edge (struct cgraph_edge *cs,
-
-
- /* Look at edges in CALLERS and collect all known aggregate values that arrive
-- from all of them into INTERIM. Return how many there are. */
-+ from all of them. Return nullptr if there are none. */
-
--static unsigned int
--find_aggregate_values_for_callers_subset_1 (vec &interim,
-- struct cgraph_node *node,
-- const vec &callers)
-+static struct vec *
-+find_aggregate_values_for_callers_subset (struct cgraph_node *node,
-+ const vec &callers)
- {
- ipa_node_params *dest_info = ipa_node_params_sum->get (node);
- if (dest_info->ipcp_orig_node)
-@@ -5635,11 +5588,12 @@ find_aggregate_values_for_callers_subset_1 (vec &interim,
-
- /* gather_edges_for_value puts a non-recursive call into the first element of
- callers if it can. */
-+ auto_vec interim;
- push_agg_values_from_edge (callers[0], dest_info, &interim, NULL, true);
-
- unsigned valid_entries = interim.length ();
- if (!valid_entries)
-- return 0;
-+ return nullptr;
-
- unsigned caller_count = callers.length();
- for (unsigned i = 1; i < caller_count; i++)
-@@ -5650,47 +5604,9 @@ find_aggregate_values_for_callers_subset_1 (vec &interim,
-
- valid_entries = intersect_argaggs_with (interim, last);
- if (!valid_entries)
-- return 0;
-+ return nullptr;
- }
-
-- return valid_entries;
--}
--
--/* Look at edges in CALLERS and collect all known aggregate values that arrive
-- from all of them and return them in a garbage-collected vector. Return
-- nullptr if there are none. */
--
--static void
--find_aggregate_values_for_callers_subset (vec &res,
-- struct cgraph_node *node,
-- const vec &callers)
--{
-- auto_vec interim;
-- unsigned valid_entries
-- = find_aggregate_values_for_callers_subset_1 (interim, node, callers);
-- if (!valid_entries)
-- return;
--
-- for (const ipa_argagg_value &av : interim)
-- if (av.value)
-- res.safe_push(av);
-- return;
--}
--
--/* Look at edges in CALLERS and collect all known aggregate values that arrive
-- from all of them and return them in a garbage-collected vector. Return
-- nullptr if there are none. */
--
--static struct vec *
--find_aggregate_values_for_callers_subset_gc (struct cgraph_node *node,
-- const vec &callers)
--{
-- auto_vec interim;
-- unsigned valid_entries
-- = find_aggregate_values_for_callers_subset_1 (interim, node, callers);
-- if (!valid_entries)
-- return nullptr;
--
- vec *res = NULL;
- vec_safe_reserve_exact (res, valid_entries);
- for (const ipa_argagg_value &av : interim)
-@@ -5821,78 +5737,62 @@ copy_useful_known_contexts (const vec &known_conte
- return vNULL;
- }
-
--/* Return true if the VALUE is represented in KNOWN_CSTS at INDEX if OFFSET is
-- minus one or in AGGVALS for INDEX and OFFSET otherwise. */
-+/* Copy known scalar values from AVALS into KNOWN_CSTS and modify the copy
-+ according to VAL and INDEX. If non-empty, replace KNOWN_CONTEXTS with its
-+ copy too. */
-
--DEBUG_FUNCTION bool
--ipcp_val_replacement_ok_p (vec &known_csts,
-- vec &,
-- vec *aggvals,
-- int index, HOST_WIDE_INT offset, tree value)
-+static void
-+copy_known_vectors_add_val (ipa_auto_call_arg_values *avals,
-+ vec *known_csts,
-+ vec *known_contexts,
-+ ipcp_value *val, int index)
- {
-- tree v;
-- if (offset == -1)
-- v = known_csts[index];
-- else
-- {
-- const ipa_argagg_value_list avl (aggvals);
-- v = avl.get_value (index, offset / BITS_PER_UNIT);
-- }
-+ *known_csts = avals->m_known_vals.copy ();
-+ *known_contexts = copy_useful_known_contexts (avals->m_known_contexts);
-+ (*known_csts)[index] = val->value;
-+}
-
-- return v && values_equal_for_ipcp_p (v, value);
-+/* Copy known scalar values from AVALS into KNOWN_CSTS. Similarly, copy
-+ contexts to KNOWN_CONTEXTS and modify the copy according to VAL and
-+ INDEX. */
-+
-+static void
-+copy_known_vectors_add_val (ipa_auto_call_arg_values *avals,
-+ vec *known_csts,
-+ vec *known_contexts,
-+ ipcp_value *val,
-+ int index)
-+{
-+ *known_csts = avals->m_known_vals.copy ();
-+ *known_contexts = avals->m_known_contexts.copy ();
-+ (*known_contexts)[index] = val->value;
- }
-
--/* Dump to F all the values in AVALS for which we are re-evaluating the effects
-- on the function represented b INFO. */
-+/* Return true if OFFSET indicates this was not an aggregate value or there is
-+ a replacement equivalent to VALUE, INDEX and OFFSET among those in the
-+ AGGVALS list. */
-
--DEBUG_FUNCTION void
--dump_reestimation_message (FILE *f, ipa_node_params *info,
-- const ipa_auto_call_arg_values &avals)
--{
-- fprintf (f, " Re-estimating effects with\n"
-- " Scalar constants:");
-- int param_count = ipa_get_param_count (info);
-- for (int i = 0; i < param_count; i++)
-- if (avals.m_known_vals[i])
-- {
-- fprintf (f, " %i:", i);
-- print_ipcp_constant_value (f, avals.m_known_vals[i]);
-- }
-- fprintf (f, "\n");
-- if (!avals.m_known_contexts.is_empty ())
-- {
-- fprintf (f, " Pol. contexts:");
-- for (int i = 0; i < param_count; i++)
-- if (!avals.m_known_contexts[i].useless_p ())
-- {
-- fprintf (f, " %i:", i);
-- avals.m_known_contexts[i].dump (f);
-- }
-- fprintf (f, "\n");
-- }
-- if (!avals.m_known_aggs.is_empty ())
-- {
-- fprintf (f, " Aggregate replacements:");
-- ipa_argagg_value_list avs (&avals);
-- avs.dump (f);
-- }
-+DEBUG_FUNCTION bool
-+ipcp_val_agg_replacement_ok_p (vec *aggvals,
-+ int index, HOST_WIDE_INT offset, tree value)
-+{
-+ if (offset == -1)
-+ return true;
-+
-+ const ipa_argagg_value_list avl (aggvals);
-+ tree v = avl.get_value (index, offset / BITS_PER_UNIT);
-+ return v && values_equal_for_ipcp_p (v, value);
- }
-
--/* Return true if the VALUE is represented in KNOWN_CONTEXTS at INDEX and that
-- if OFFSET is is equal to minus one (because source of a polymorphic context
-- cannot be an aggregate value). */
-+/* Return true if offset is minus one because source of a polymorphic context
-+ cannot be an aggregate value. */
-
- DEBUG_FUNCTION bool
--ipcp_val_replacement_ok_p (vec &,
-- vec &known_contexts,
-- vec *,
-- int index, HOST_WIDE_INT offset,
-- ipa_polymorphic_call_context value)
-+ipcp_val_agg_replacement_ok_p (vec *,
-+ int , HOST_WIDE_INT offset,
-+ ipa_polymorphic_call_context)
- {
-- if (offset != -1)
-- return false;
-- return (!known_contexts[index].useless_p ()
-- && known_contexts[index].equal_to (value));
-+ return offset == -1;
- }
-
- /* Decide whether to create a special version of NODE for value VAL of
-@@ -5906,12 +5806,13 @@ ipcp_val_replacement_ok_p (vec &,
- template
- static bool
- decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset,
-- ipcp_value *val,
-+ ipcp_value *val, ipa_auto_call_arg_values *avals,
- vec *self_gen_clones, int cur_sweep)
- {
- int caller_count;
- sreal freq_sum;
- profile_count count_sum, rec_count_sum;
-+ vec callers;
- bool called_without_ipa_profile;
-
- if (val->spec_node)
-@@ -5965,78 +5866,36 @@ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset,
- fprintf (dump_file, " (caller_count: %i)\n", caller_count);
- }
-
-- vec callers;
-- callers = gather_edges_for_value (val, node, caller_count);
-- ipa_node_params *info = ipa_node_params_sum->get (node);
-- ipa_auto_call_arg_values avals;
-- avals.m_known_vals.safe_grow_cleared (ipa_get_param_count (info), true);
-- find_scalar_values_for_callers_subset (avals.m_known_vals, info, callers);
-- find_contexts_for_caller_subset (avals.m_known_contexts, info, callers);
-- find_aggregate_values_for_callers_subset (avals.m_known_aggs, node, callers);
--
--
-- if (good_cloning_opportunity_p (node, val->prop_time_benefit,
-- freq_sum, count_sum, val->prop_size_cost,
-- called_without_ipa_profile, cur_sweep))
-- ;
-- else
-- {
-- /* Extern inline functions are only meaningful to clione to propagate
-- values to their callees. */
-- if (DECL_EXTERNAL (node->decl) && DECL_DECLARED_INLINE_P (node->decl))
-- {
-- if (dump_file && (dump_flags & TDF_DETAILS))
-- fprintf (dump_file, " Skipping extern inline.\n");
-- return false;
-- }
-- if (dump_file && (dump_flags & TDF_DETAILS))
-- dump_reestimation_message (dump_file, info, avals);
--
-- ipa_call_estimates estimates;
-- estimate_ipcp_clone_size_and_time (node, &avals, &estimates);
-- int removable_params_cost = 0;
-- for (tree t : avals.m_known_vals)
-- if (t)
-- removable_params_cost += estimate_move_cost (TREE_TYPE (t), true);
--
-- int size = estimates.size - caller_count * removable_params_cost;
--
-- if (size <= 0)
-- {
-- if (dump_file)
-- fprintf (dump_file, " Code not going to grow.\n");
-- }
-- else
-- {
-- sreal time_benefit
-- = ((estimates.nonspecialized_time - estimates.time)
-- + hint_time_bonus (node, estimates)
-- + (devirtualization_time_bonus (node, &avals)
-- + removable_params_cost));
--
-- if (!good_cloning_opportunity_p (node, time_benefit, freq_sum,
-- count_sum, size,
-- called_without_ipa_profile,
-- cur_sweep))
-- return false;
-- }
-- }
-+ if (!good_cloning_opportunity_p (node, val->local_time_benefit,
-+ freq_sum, count_sum,
-+ val->local_size_cost,
-+ called_without_ipa_profile, cur_sweep)
-+ && !good_cloning_opportunity_p (node, val->prop_time_benefit,
-+ freq_sum, count_sum, val->prop_size_cost,
-+ called_without_ipa_profile, cur_sweep))
-+ return false;
-
- if (dump_file)
- fprintf (dump_file, " Creating a specialized node of %s.\n",
- node->dump_name ());
-
-- vec known_csts = avals.m_known_vals.copy ();
-- vec known_contexts
-- = copy_useful_known_contexts (avals.m_known_contexts);
--
-- vec *aggvals = NULL;
-- vec_safe_reserve_exact (aggvals, avals.m_known_aggs.length ());
-- for (const ipa_argagg_value &av : avals.m_known_aggs)
-- aggvals->quick_push (av);
-- gcc_checking_assert (ipcp_val_replacement_ok_p (known_csts, known_contexts,
-- aggvals, index,
-- offset, val->value));
-+ vec known_csts;
-+ vec known_contexts;
-+
-+ callers = gather_edges_for_value (val, node, caller_count);
-+ if (offset == -1)
-+ copy_known_vectors_add_val (avals, &known_csts, &known_contexts, val, index);
-+ else
-+ {
-+ known_csts = avals->m_known_vals.copy ();
-+ known_contexts = copy_useful_known_contexts (avals->m_known_contexts);
-+ }
-+ find_more_scalar_values_for_callers_subset (node, known_csts, callers);
-+ find_more_contexts_for_caller_subset (node, &known_contexts, callers);
-+ vec *aggvals
-+ = find_aggregate_values_for_callers_subset (node, callers);
-+ gcc_checking_assert (ipcp_val_agg_replacement_ok_p (aggvals, index,
-+ offset, val->value));
- val->spec_node = create_specialized_node (node, known_csts, known_contexts,
- aggvals, callers);
-
-@@ -6074,52 +5933,6 @@ ipa_range_contains_p (const vrange &r, tree val)
- return r.contains_p (val);
- }
-
--/* Structure holding opportunitties so that they can be pre-sorted. */
--
--struct cloning_opportunity_ranking
--{
-- /* A very rough evaluation of likely benefit. */
-- sreal eval;
-- /* In the case of aggregate constants, a non-negative offset within their
-- aggregates. -1 for scalar constants, -2 for polymorphic contexts. */
-- HOST_WIDE_INT offset;
-- /* The value being considered for evaluation for cloning. */
-- ipcp_value_base *val;
-- /* Index of the formal parameter the value is coming in. */
-- int index;
--};
--
--/* Helper function to qsort a vecotr of cloning opportunities. */
--
--static int
--compare_cloning_opportunities (const void *a, const void *b)
--{
-- const cloning_opportunity_ranking *o1
-- = (const cloning_opportunity_ranking *) a;
-- const cloning_opportunity_ranking *o2
-- = (const cloning_opportunity_ranking *) b;
-- if (o1->eval < o2->eval)
-- return 1;
-- if (o1->eval > o2->eval)
-- return -1;
-- return 0;
--}
--
--/* Use the estimations in VAL to determine how good a candidate it represents
-- for the purposes of ordering real evaluation of opportunities (which
-- includes information about incoming edges, among other things). */
--
--static sreal
--cloning_opportunity_ranking_evaluation (const ipcp_value_base *val)
--{
-- sreal e1 = (val->local_time_benefit * 1000) / MAX (val->local_size_cost, 1);
-- sreal e2 = (val->prop_time_benefit * 1000) / MAX (val->prop_size_cost, 1);
-- if (e2 > e1)
-- return e2;
-- else
-- return e1;
--}
--
- /* Decide whether and what specialized clones of NODE should be created.
- CUR_SWEEP is the number of the current sweep of the call-graph during the
- decision stage. */
-@@ -6128,7 +5941,7 @@ static bool
- decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
- {
- ipa_node_params *info = ipa_node_params_sum->get (node);
-- int count = ipa_get_param_count (info);
-+ int i, count = ipa_get_param_count (info);
- bool ret = false;
-
- if (info->node_dead || count == 0)
-@@ -6138,8 +5951,13 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
- fprintf (dump_file, "\nEvaluating opportunities for %s.\n",
- node->dump_name ());
-
-- auto_vec opp_ranking;
-- for (int i = 0; i < count;i++)
-+ auto_vec self_gen_clones;
-+ ipa_auto_call_arg_values avals;
-+ int removable_params_cost;
-+ bool ctx_independent_const
-+ = gather_context_independent_values (info, &avals, &removable_params_cost);
-+
-+ for (i = 0; i < count;i++)
- {
- if (!ipa_is_param_used (info, i))
- continue;
-@@ -6149,7 +5967,7 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
- ipcp_lattice *ctxlat = &plats->ctxlat;
-
- if (!lat->bottom
-- && !lat->is_single_const ())
-+ && !avals.m_known_vals[i])
- {
- ipcp_value *val;
- for (val = lat->values; val; val = val->next)
-@@ -6176,12 +5994,8 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
- }
- continue;
- }
-- cloning_opportunity_ranking opp;
-- opp.eval = cloning_opportunity_ranking_evaluation (val);
-- opp.offset = -1;
-- opp.val = val;
-- opp.index = i;
-- opp_ranking.safe_push (opp);
-+ ret |= decide_about_value (node, i, -1, val, &avals,
-+ &self_gen_clones, cur_sweep);
- }
- }
-
-@@ -6196,83 +6010,37 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
- && (plats->aggs_contain_variable
- || !aglat->is_single_const ()))
- for (val = aglat->values; val; val = val->next)
-- {
-- cloning_opportunity_ranking opp;
-- opp.eval = cloning_opportunity_ranking_evaluation (val);
-- opp.offset = aglat->offset;
-- opp.val = val;
-- opp.index = i;
-- opp_ranking.safe_push (opp);
-- }
-+ ret |= decide_about_value (node, i, aglat->offset, val, &avals,
-+ &self_gen_clones, cur_sweep);
- }
-
- if (!ctxlat->bottom
-- && !ctxlat->is_single_const ())
-+ && avals.m_known_contexts[i].useless_p ())
- {
- ipcp_value *val;
- for (val = ctxlat->values; val; val = val->next)
-- if (!val->value.useless_p ())
-- {
-- cloning_opportunity_ranking opp;
-- opp.eval = cloning_opportunity_ranking_evaluation (val);
-- opp.offset = -2;
-- opp.val = val;
-- opp.index = i;
-- opp_ranking.safe_push (opp);
-- }
-- }
-- }
--
-- if (!opp_ranking.is_empty ())
-- {
-- opp_ranking.qsort (compare_cloning_opportunities);
-- auto_vec self_gen_clones;
-- for (const cloning_opportunity_ranking &opp : opp_ranking)
-- if (opp.offset == -2)
-- {
-- ipcp_value *val
-- = static_cast *>
-- (opp.val);
-- ret |= decide_about_value (node, opp.index, -1, val,
-+ ret |= decide_about_value (node, i, -1, val, &avals,
- &self_gen_clones, cur_sweep);
-- }
-- else
-- {
-- ipcp_value *val = static_cast *> (opp.val);
-- ret |= decide_about_value (node, opp.index, opp.offset, val,
-- &self_gen_clones, cur_sweep);
-- }
--
-- if (!self_gen_clones.is_empty ())
-- {
-- self_gen_clones.safe_push (node);
-- update_counts_for_self_gen_clones (node, self_gen_clones);
- }
- }
-
-- struct caller_statistics stats;
-- init_caller_stats (&stats);
-- node->call_for_symbol_thunks_and_aliases (gather_caller_stats, &stats,
-- false);
-- if (!stats.n_calls)
-+ if (!self_gen_clones.is_empty ())
- {
-- if (dump_file)
-- fprintf (dump_file, " Not cloning for all contexts because "
-- "there are no callers of the original node (any more).\n");
-- return ret;
-+ self_gen_clones.safe_push (node);
-+ update_counts_for_self_gen_clones (node, self_gen_clones);
- }
-
- bool do_clone_for_all_contexts = false;
-- ipa_auto_call_arg_values avals;
-- int removable_params_cost;
-- bool ctx_independent_const
-- = gather_context_independent_values (info, &avals, &removable_params_cost);
- sreal devirt_bonus = devirtualization_time_bonus (node, &avals);
- if (ctx_independent_const || devirt_bonus > 0
- || (removable_params_cost && clone_for_param_removal_p (node)))
- {
-- ipa_call_estimates estimates;
-+ struct caller_statistics stats;
-+ ipa_call_estimates estimates;
-
-+ init_caller_stats (&stats);
-+ node->call_for_symbol_thunks_and_aliases (gather_caller_stats, &stats,
-+ false);
- estimate_ipcp_clone_size_and_time (node, &avals, &estimates);
- sreal time = estimates.nonspecialized_time - estimates.time;
- time += devirt_bonus;
-@@ -6284,7 +6052,13 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
- fprintf (dump_file, " - context independent values, size: %i, "
- "time_benefit: %f\n", size, (time).to_double ());
-
-- if (size <= 0 || node->local)
-+ if (!stats.n_calls)
-+ {
-+ if (dump_file)
-+ fprintf (dump_file, " Not cloning for all contexts because "
-+ "there are no callers of the original node left.\n");
-+ }
-+ else if (size <= 0 || node->local)
- {
- if (!dbg_cnt (ipa_cp_values))
- return ret;
-@@ -6344,14 +6118,19 @@ decide_whether_version_node (struct cgraph_node *node, int cur_sweep)
- fprintf (dump_file, " Creating a specialized node of %s "
- "for all known contexts.\n", node->dump_name ());
-
-- vec known_csts = vNULL;
-- known_csts.safe_grow_cleared (count, true);
-- find_scalar_values_for_callers_subset (known_csts, info, callers);
-- vec known_contexts = vNULL;
-- find_contexts_for_caller_subset (known_contexts, info, callers);
-+ vec known_csts = avals.m_known_vals.copy ();
-+ vec known_contexts
-+ = copy_useful_known_contexts (avals.m_known_contexts);
-+ find_more_scalar_values_for_callers_subset (node, known_csts, callers);
-+ find_more_contexts_for_caller_subset (node, &known_contexts, callers);
- vec *aggvals
-- = find_aggregate_values_for_callers_subset_gc (node, callers);
-+ = find_aggregate_values_for_callers_subset (node, callers);
-
-+ if (!known_contexts_useful_p (known_contexts))
-+ {
-+ known_contexts.release ();
-+ known_contexts = vNULL;
-+ }
- struct cgraph_node *clone = create_specialized_node (node, known_csts,
- known_contexts,
- aggvals, callers);
-@@ -6576,11 +6355,6 @@ ipcp_store_vr_results (void)
- bool do_vr = true;
- bool do_bits = true;
-
-- /* If the function is not local, the gathered information is only useful
-- for clones. */
-- if (!node->local)
-- continue;
--
- if (!info || !opt_for_fn (node->decl, flag_ipa_vrp))
- {
- if (dump_file)
---- gcc/ipa-cp.h
-+++ gcc/ipa-cp.h
-@@ -201,8 +201,6 @@ public:
- bool set_to_bottom ();
- bool set_to_constant (widest_int, widest_int);
- bool known_nonzero_p () const;
-- bool set_recipient_only ();
-- bool recipient_only_p () const {return m_recipient_only; }
-
- widest_int get_value () const { return m_value; }
- widest_int get_mask () const { return m_mask; }
-@@ -218,11 +216,6 @@ private:
- enum { IPA_BITS_UNDEFINED, IPA_BITS_CONSTANT, IPA_BITS_VARYING }
- m_lattice_val = IPA_BITS_UNDEFINED;
-
-- /* Set to true if the lattice is valid only as a recipient of propagatad
-- values but cannot be used as source of propagation because there may be
-- unknown callers. */
-- bool m_recipient_only;
--
- /* Similar to ccp_lattice_t, mask represents which bits of value are constant.
- If a bit in mask is set to 0, then the corresponding bit in
- value is known to be constant. */
-@@ -238,16 +231,10 @@ class ipcp_vr_lattice
- {
- public:
- value_range m_vr;
-- /* Set to true if the lattice is valid only as a recipient of propagatad
-- values but cannot be used as source of propagation because there may be
-- unknown callers. */
-- bool m_recipient_only;
-
- inline bool bottom_p () const;
- inline bool top_p () const;
- inline bool set_to_bottom ();
-- bool set_recipient_only ();
-- bool recipient_only_p () const {return m_recipient_only; }
- bool meet_with (const vrange &p_vr);
- bool meet_with (const ipcp_vr_lattice &other);
- void init (tree type);
-@@ -264,7 +251,6 @@ ipcp_vr_lattice::init (tree type)
- m_vr.set_type (type);
-
- // Otherwise m_vr will default to unsupported_range.
-- m_recipient_only = false;
- }
-
- /* Structure containing lattices for a parameter itself and for pieces of
---- gcc/testsuite/gcc.dg/ipa/ipcp-agg-14.c
-+++ gcc/testsuite/gcc.dg/ipa/ipcp-agg-14.c
-@@ -1,49 +0,0 @@
--/* { dg-do compile } */
--/* { dg-options "-O3 -fno-ipa-sra -fno-partial-inlining -fdump-ipa-cp-details" } */
--
--struct S
--{
-- int a, b, m, n, o, p;
--};
--
--
--void __attribute__ ((noinline))
--foo (struct S *p, double *x, double *y, double *z)
--{
-- if (p->a == 0 && p->b == 0)
-- return;
--
-- /* Something long so that we do not clone unless we know it will
-- disappear: */
-- for (int i = 0; i < p->m; i++)
-- {
-- if (i < p->m-1)
-- x[i] += x[i+1] * y[0];
-- for (int j = 0; j < p->n; j++)
-- for (int k = 0; j < p->o; k++)
-- {
-- double s = *z;
-- for (int l = 1; l < p->p; l++)
-- s += z[l];
-- x[i] += s + 2*y[j] + 7*z[k];
-- }
-- }
--}
--
--int get_int (void);
--
--void
-- entry (int c, double *x, double *y, double *z)
--{
-- struct S s;
--
-- s.a = 0;
-- s.b = 0;
-- s.m = get_int ();
-- s.n = get_int ();
-- s.o = get_int ();
-- s.p = get_int ();
-- foo (&s, x, y, z);
--}
--
--/* { dg-final { scan-ipa-dump "Creating a specialized node of foo" "cp" } } */
---- gcc/testsuite/gcc.dg/ipa/ipcp-agg-2.c
-+++ gcc/testsuite/gcc.dg/ipa/ipcp-agg-2.c
-@@ -37,5 +37,5 @@ entry (int c)
- foo (&s);
- }
- /* { dg-final { scan-ipa-dump-times "Creating a specialized node of foo/\[0-9\]*\\." 2 "cp" } } */
--/* { dg-final { scan-ipa-dump "Aggregate replacements:" "cp" } } */
-+/* { dg-final { scan-ipa-dump-times "Aggregate replacements:" 4 "cp" } } */
- /* { dg-final { scan-tree-dump-not "->c;" "optimized" } } */
---- gcc/testsuite/gcc.dg/ipa/ipcp-agg-3.c
-+++ gcc/testsuite/gcc.dg/ipa/ipcp-agg-3.c
-@@ -37,6 +37,6 @@ entry (int c)
- foo (0, &s);
- }
- /* { dg-final { scan-ipa-dump-times "Creating a specialized node of foo/\[0-9\]*\\." 2 "cp" } } */
--/* { dg-final { scan-ipa-dump "Aggregate replacements: 1" "cp" } } */
--/* { dg-final { scan-ipa-dump "Aggregate replacements: 0" "cp" } } */
-+/* { dg-final { scan-ipa-dump-times "Aggregate replacements: 1" 2 "cp" } } */
-+/* { dg-final { scan-ipa-dump-times "Aggregate replacements: 0" 2 "cp" } } */
- /* { dg-final { scan-tree-dump-not "->c;" "optimized" } } */
---- gcc/testsuite/gcc.dg/ipa/ipcp-agg-4.c
-+++ gcc/testsuite/gcc.dg/ipa/ipcp-agg-4.c
-@@ -56,5 +56,5 @@ entry2 (int c)
- }
-
- /* { dg-final { scan-ipa-dump-times "Creating a specialized node of foo/\[0-9\]*\\." 2 "cp" } } */
--/* { dg-final { scan-ipa-dump "Aggregate replacements:" "cp" } } */
-+/* { dg-final { scan-ipa-dump-times "Aggregate replacements:" 4 "cp" } } */
- /* { dg-final { scan-tree-dump-not "->c;" "optimized" } } */
---- gcc/testsuite/gcc.dg/vect/pr101145_1.c
-+++ gcc/testsuite/gcc.dg/vect/pr101145_1.c
-@@ -1,5 +1,5 @@
- /* { dg-require-effective-target vect_char_add } */
--/* { dg-additional-options "-O3 -fno-ipa-cp" } */
-+/* { dg-additional-options "-O3" } */
- #define TYPE signed char
- #define MIN -128
- #define MAX 127
---- gcc/testsuite/gcc.dg/vect/pr101145_2.c
-+++ gcc/testsuite/gcc.dg/vect/pr101145_2.c
-@@ -1,5 +1,5 @@
- /* { dg-require-effective-target vect_char_add } */
--/* { dg-additional-options "-O3 -fno-ipa-cp" } */
-+/* { dg-additional-options "-O3" } */
- #define TYPE unsigned char
- #define MIN 0
- #define MAX 255
---- gcc/testsuite/gcc.dg/vect/pr101145_3.c
-+++ gcc/testsuite/gcc.dg/vect/pr101145_3.c
-@@ -1,5 +1,5 @@
- /* { dg-require-effective-target vect_long_long } */
--/* { dg-additional-options "-O3 -fno-ipa-cp" } */
-+/* { dg-additional-options "-O3" } */
- #define TYPE int *
- #define MIN ((TYPE)0)
- #define MAX ((TYPE)((long long)-1))
---- gcc/testsuite/gcc.dg/ipa/pr123543.c
-+++ gcc/testsuite/gcc.dg/ipa/pr123543.c
-@@ -1,14 +0,0 @@
--/* { dg-do run } */
--/* { dg-options "-O3" } */
--
--__attribute__((noinline))
--static int local_f(int a, int b) { return a + b; }
--
--__attribute__((noinline))
--int extern_f(int a, int b) { return local_f(a, b); }
--
--int unused_g1(int b) { return extern_f(0, b); }
--
--int (*volatile fp)(int, int) = extern_f;
--
--int main() { if (fp(1, 2) != 3) __builtin_abort(); }
diff --git a/gcc16-pr120250.patch b/gcc16-pr120250.patch
deleted file mode 100644
index 96aa78b..0000000
--- a/gcc16-pr120250.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-2025-11-20 Jakub Jelinek
-
- PR target/120250
- * combine.cc (recog_for_combine): Don't try to put SET_SRC
- into a constant pool if SET_DEST is pc_rtx.
-
- * gcc.c-torture/compile/pr120250.c: New test.
-
---- gcc/combine.cc.jj 2025-10-21 11:27:04.884882995 +0200
-+++ gcc/combine.cc 2025-11-19 15:03:23.350157882 +0100
-@@ -11759,7 +11759,8 @@ recog_for_combine (rtx *pnewpat, rtx_ins
- rtx src = SET_SRC (pat);
- if (CONSTANT_P (src)
- && !CONST_INT_P (src)
-- && crtl->uses_const_pool)
-+ && crtl->uses_const_pool
-+ && SET_DEST (pat) != pc_rtx)
- {
- machine_mode mode = GET_MODE (src);
- if (mode == VOIDmode)
---- gcc/testsuite/gcc.c-torture/compile/pr120250.c.jj 2025-11-19 15:28:12.937891927 +0100
-+++ gcc/testsuite/gcc.c-torture/compile/pr120250.c 2025-11-19 15:27:53.225174446 +0100
-@@ -0,0 +1,38 @@
-+/* PR target/120250 */
-+
-+int a = 5, b = 7, c, *d;
-+void *l;
-+void foo (const char *s);
-+void bar (void);
-+void qux (const char *, int);
-+
-+int
-+baz (int *d, int a, int b)
-+{
-+ int c = 0;
-+ for (int i = 0; i < a; ++i)
-+ for (int j = 0; j < b; ++j)
-+ c += d[i * b + j];
-+ return c;
-+}
-+
-+int
-+main ()
-+{
-+ d = __builtin_malloc (a * b * sizeof (int));
-+ if (!d)
-+ {
-+ foo ("foo");
-+ __builtin_exit (1);
-+ }
-+ for (int i = 0; i < a; ++i)
-+ for (int j = 0; j < b; ++j)
-+ d[i * b + j] = i * b + j;
-+ l = (void *) &bar;
-+ goto *l;
-+bar:
-+ c = baz (d, a, b);
-+ qux ("bar", c);
-+ __builtin_free (d);
-+ return 0;
-+}
diff --git a/gcc16-pr121778-revert.patch b/gcc16-pr121778-revert.patch
deleted file mode 100644
index 5d43cad..0000000
--- a/gcc16-pr121778-revert.patch
+++ /dev/null
@@ -1,170 +0,0 @@
-Temporarily revert PR121778 until PR123530 is fixed.
-
-2026-01-09 Shreya Munnangi
- Jeff Law
-
- PR target/121778
- gcc/
- * match.pd: Add pattern to recognize rotate with one or more
- bits flipped via xor.
- * config/sh/sh.md (*rotcl); New variant which handles the output
- we get after the match.pd change above.
-
- gcc/testsuite/
- * gcc.target/riscv/pr121778.c: New test.
-
---- gcc/config/sh/sh.md
-+++ gcc/config/sh/sh.md
-@@ -3271,25 +3271,6 @@ (define_insn_and_split "*rotcl"
- operands[3] = get_t_reg_rtx ();
- })
-
--(define_insn_and_split "*rotcl"
-- [(set (match_operand:SI 0 "arith_reg_dest")
-- (xor:SI (rotate:SI (match_operand:SI 1 "arith_reg_operand")
-- (const_int 1))
-- (const_int 1)))
-- (clobber (reg:SI T_REG))]
-- "TARGET_SH1 && can_create_pseudo_p ()"
-- "#"
-- "&& 1"
-- [(parallel [(set (match_dup 0)
-- (ior:SI (ashift:SI (match_dup 1) (const_int 1))
-- (and:SI (match_dup 3) (const_int 1))))
-- (clobber (reg:SI T_REG))])]
--{
-- rtx t = gen_rtx_GE (SImode, operands[1], const0_rtx);
-- sh_split_treg_set_expr (t, curr_insn);
-- operands[3] = get_t_reg_rtx ();
--})
--
- (define_insn_and_split "*rotcl"
- [(set (match_operand:SI 0 "arith_reg_dest")
- (ior:SI (and:SI (match_operand:SI 1 "arith_reg_or_t_reg_operand")
---- gcc/match.pd
-+++ gcc/match.pd
-@@ -12172,27 +12172,3 @@ and,
- (simplify
- (IFN_VEC_SHL_INSERT (vec_duplicate@1 @0) @0)
- @1)
--
--/* In this case the XOR flips bits that originate from the result of the
-- right shift and do not impact the result of the left shift. We can
-- reassociate the XOR to work on the final result and simplify the rest
-- to a rotate. */
--(simplify
-- (bit_ior:c (lshift @0 INTEGER_CST@1)
-- (bit_xor (rshift @2 INTEGER_CST@3) INTEGER_CST@4))
-- (if (((~((HOST_WIDE_INT_1U << tree_to_uhwi (@1)) - 1)) & tree_to_uhwi (@4)) == 0
-- && (tree_to_uhwi (@1) + tree_to_uhwi (@3)) == TYPE_PRECISION (type)
-- && TYPE_UNSIGNED (type)
-- && @0 == @2)
-- (bit_xor (rrotate @0 @3) @4)))
--
--/* Similarly, but in this case the XOR flips bits that originate from the
-- result of the left shift. */
--(simplify
-- (bit_ior:c (bit_xor (lshift @0 INTEGER_CST@1) INTEGER_CST@2)
-- (rshift @3 INTEGER_CST@4))
-- (if ((((((HOST_WIDE_INT_1U << tree_to_uhwi (@1)) - 1)) & tree_to_uhwi (@2)) == 0)
-- && (tree_to_uhwi (@1) + tree_to_uhwi (@4)) == TYPE_PRECISION (type)
-- && TYPE_UNSIGNED (type)
-- && @0 == @3)
-- (bit_xor (rrotate @0 @4) @2)))
---- gcc/testsuite/gcc.target/riscv/pr121778.c
-+++ gcc/testsuite/gcc.target/riscv/pr121778.c
-@@ -1,94 +0,0 @@
--/* { dg-do compile } */
--/* { dg-options "-O2 -march=rv64gcb -mabi=lp64d" { target rv64} } */
--/* { dg-options "-O2 -march=rv32gcb -mabi=ilp32" { target rv32} } */
--
--/* We need to adjust the constant so this works for rv32 and rv64. */
--#if __riscv_xlen == 32
--#define ONE 1U
--#define TYPE unsigned int
--#else
--#define ONE 1UL
--#define TYPE unsigned long
--#endif
--
--#define F1(C) TYPE test_01##C (TYPE a) { return (a << (__riscv_xlen - C)) | ((a >> C) ^ 1); }
--#define F2(C) TYPE test_02##C (TYPE a) { return ((a >> (__riscv_xlen - C)) ^ 1) | (a << C); }
--#define F3(C) TYPE test_03##C (TYPE a) { return ((a << (__riscv_xlen - C)) ^ (ONE << (__riscv_xlen - 1))) | (a >> C); }
--#define F4(C) TYPE test_04##C (TYPE a) { return (a >> (__riscv_xlen - C)) | ((a << C) ^ (ONE << (__riscv_xlen - 1))); }
--
--#define F(C) F1(C) F2(C) F3(C) F4(C)
--
--
--F (1)
--F (2)
--F (3)
--F (4)
--F (5)
--F (6)
--F (7)
--F (8)
--F (9)
--F (10)
--F (11)
--F (12)
--F (13)
--F (14)
--F (15)
--F (16)
--F (17)
--F (18)
--F (19)
--F (20)
--F (21)
--F (22)
--F (23)
--F (24)
--F (25)
--F (26)
--F (27)
--F (28)
--F (29)
--F (30)
--F (31)
--#if __riscv_xlen == 64
--F (32)
--F (33)
--F (34)
--F (35)
--F (36)
--F (37)
--F (38)
--F (39)
--F (40)
--F (41)
--F (42)
--F (43)
--F (44)
--F (45)
--F (46)
--F (47)
--F (48)
--F (49)
--F (50)
--F (51)
--F (52)
--F (53)
--F (54)
--F (55)
--F (56)
--F (57)
--F (58)
--F (59)
--F (60)
--F (61)
--F (62)
--F (63)
--
--/* { dg-final { scan-assembler-times "\trori" 252 { target { rv64 } } } } */
--/* { dg-final { scan-assembler-times "\txori" 126 { target { rv64 } } } } */
--/* { dg-final { scan-assembler-times "\tbinv" 126 { target { rv64 } } } } */
--
--/* { dg-final { scan-assembler-times "\trori" 124 { target { rv32 } } } } */
--/* { dg-final { scan-assembler-times "\txori" 62 { target { rv32 } } } } */
--/* { dg-final { scan-assembler-times "\tbinv" 62 { target { rv32 } } } } */
--#endif
diff --git a/gcc16-pr123115.patch b/gcc16-pr123115.patch
deleted file mode 100644
index 2a75016..0000000
--- a/gcc16-pr123115.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-2025-12-15 Jakub Jelinek
-
- PR middle-end/123115
- * defaults.h (EH_RETURN_DATA_REGNO): Add void (N) to the macro
- definition inside of a comma expression before INVALID_REGNUM.
-
---- gcc/defaults.h.jj 2025-08-05 08:19:26.667814010 +0200
-+++ gcc/defaults.h 2025-12-15 11:33:16.656762266 +0100
-@@ -390,7 +390,7 @@ see the files COPYING3 and COPYING.RUNTI
- /* Provide defaults for stuff that may not be defined when using
- sjlj exceptions. */
- #ifndef EH_RETURN_DATA_REGNO
--#define EH_RETURN_DATA_REGNO(N) INVALID_REGNUM
-+#define EH_RETURN_DATA_REGNO(N) (void (N), INVALID_REGNUM)
- #endif
-
- /* Offset between the eh handler address and entry in eh tables. */
diff --git a/gcc16-pr123573.patch b/gcc16-pr123573.patch
deleted file mode 100644
index 2bc769d..0000000
--- a/gcc16-pr123573.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-The following fixes the fix from r16-6709-ga4716ece529dfd some
-more by making sure permute to one operand folding faces same
-element number vectors but also insert a VIEW_CONVERT_EXPR for
-the case one is VLA and one is VLS (when the VLA case is actually
-constant, like with -msve-vector-bits=128). It also makes the
-assert that output and input element numbers match done in
-fold_vec_perm which this pattern eventually dispatches to into
-a check (as the comment already indicates).
-
-Testcases are in the target specific aarch64 testsuite already.
-
-Bootstrap and regtest ongoing on x86_64-unknown-linux-gnu.
-
-2026-01-13 Richard Biener
-
- PR middle-end/123573
- * fold-const.cc (fold_vec_perm): Actually check, not assert,
- that input and output vector element numbers agree.
- * match.pd (vec_perm @0 @1 @2): Make sure element numbers
- are the same when folding to an input vector and wrap that
- inside a VIEW_CONVERT_EXPR.
-
---- gcc/fold-const.cc
-+++ gcc/fold-const.cc
-@@ -10704,11 +10704,10 @@ fold_vec_perm (tree type, tree arg0, tree arg1, const vec_perm_indices &sel)
-
- /* For fall back case, we want to ensure we have VLS vectors
- with equal length. */
-- if (!sel.length ().is_constant (&nelts))
-+ if (!sel.length ().is_constant (&nelts)
-+ || !known_eq (sel.length (), TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg0))))
- return NULL_TREE;
-
-- gcc_assert (known_eq (sel.length (),
-- TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg0))));
- tree *in_elts = XALLOCAVEC (tree, nelts * 2);
- if (!vec_cst_ctor_to_array (arg0, nelts, in_elts)
- || !vec_cst_ctor_to_array (arg1, nelts, in_elts + nelts))
---- gcc/match.pd
-+++ gcc/match.pd
-@@ -11528,9 +11528,9 @@ and,
- vec_perm_indices sel (builder, single_arg ? 1 : 2, nelts_in);
- }
- (if (known_eq (nelts, nelts_in) && sel.series_p (0, 1, 0, 1))
-- { op0; }
-- (if (sel.series_p (0, 1, nelts_in, 1))
-- { op1; }
-+ (view_convert @0)
-+ (if (known_eq (nelts, nelts_in) && sel.series_p (0, 1, nelts_in, 1))
-+ (view_convert @1)
- (with
- {
- if (!single_arg)
diff --git a/sources b/sources
index 5fa3693..f1dba4c 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-16.0.1-20260113.tar.xz) = 1cd4985667f4a0add59b053bc1ba945f8e7176eace95f3ba05e15de10e50ceaccc4343237c7e552d9bad36c35a7c15c46dccd9d2ff195ab5a85a32cbd5a78e82
+SHA512 (gcc-16.0.1-20260115.tar.xz) = 51ab079dedde5547caba601ce03954d4c5b2bf687538f106d3e851a8918162017fe65817d9e22fd115cf4d4f970bfba6a70a34db183141ce28c5c203a68eec0b
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881
SHA512 (nvptx-tools-a0c1fff6534a4df9fb17937c3c4a4b1071212029.tar.xz) = 7f862986065028df70c843fc3f2c89e200a76b48ad0bd51c749ac8a5aab7be0ebdf35be182fad2407b3281615e75be1ac6833ab6a5130ae9920169a0412f94f0