From 4242c96651fbf2b7e5c962e7e99ec7983d00933f Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Mon, 26 Jan 2026 23:10:18 -0500 Subject: [PATCH] Update gcc to 15.2.1-7 Resolves: RHEL-116514 Assisted-by: Claude Sonnet 4.5 --- 0020-more-fixes.patch | 2 +- gcc-toolset-15-gcc.spec | 38 +++++++++++++++-- gcc15-pr123273.patch | 54 +++++++++++++++++++++++ gcc15-pr123667.patch | 94 +++++++++++++++++++++++++++++++++++++++++ gcc15-pr123737.patch | 86 +++++++++++++++++++++++++++++++++++++ sources | 2 +- 6 files changed, 270 insertions(+), 6 deletions(-) create mode 100644 gcc15-pr123273.patch create mode 100644 gcc15-pr123667.patch create mode 100644 gcc15-pr123737.patch diff --git a/0020-more-fixes.patch b/0020-more-fixes.patch index d123161..99f4290 100644 --- a/0020-more-fixes.patch +++ b/0020-more-fixes.patch @@ -5,7 +5,7 @@ index b64e71dae22..5bf47b20820 100644 @@ -12,7 +12,6 @@ jump threading opportunities. Skip the later tests on aarch64. */ /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom3" { target { ! aarch64*-*-* } } } } */ - /* { dg-final { scan-tree-dump "Jumps threaded: 9" "thread2" { target { ! aarch64*-*-* } } } } */ + /* { dg-final { scan-tree-dump "Jumps threaded: 10" "thread2" { target { ! aarch64*-*-* } } } } */ -/* { dg-final { scan-tree-dump "Jumps threaded: 17" "thread2" { target { aarch64*-*-* } } } } */ enum STATE { diff --git a/gcc-toolset-15-gcc.spec b/gcc-toolset-15-gcc.spec index d6b953c..6e68a91 100644 --- a/gcc-toolset-15-gcc.spec +++ b/gcc-toolset-15-gcc.spec @@ -15,13 +15,13 @@ BuildRequires: gcc-toolset-%{gts_ver}-devel %{?scl:%global __strip %%{_scl_root}/usr/bin/strip} %{?scl:%global __objdump %%{_scl_root}/usr/bin/objdump} %{?scl:%scl_package gcc} -%global DATE 20250521 -%global gitrev b9def1721b12cae307c1a1ebc49030fce6531dfa -%global gcc_version 15.1.1 +%global DATE 20260123 +%global gitrev 226e8310eed1ce10784f98f199e1aa4b12ca86b7 +%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 7 %global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804 %global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99 %global isl_version 0.24 @@ -360,6 +360,9 @@ Patch9: gcc15-Wno-format-security.patch Patch10: gcc15-rh1574936.patch Patch11: gcc15-d-shared-libphobos.patch Patch12: gcc15-pr119006.patch +Patch13: gcc15-pr123273.patch +Patch14: gcc15-pr123667.patch +Patch15: gcc15-pr123737.patch Patch50: isl-rh2155127.patch @@ -721,6 +724,9 @@ so that there cannot be any synchronization problems. %patch -P10 -p0 -b .rh1574936~ %patch -P11 -p0 -b .d-shared-libphobos~ %patch -P12 -p0 -b .pr119006~ +%patch -P13 -p0 -b .pr123273~ +%patch -P14 -p0 -b .pr123667~ +%patch -P15 -p0 -b .pr123737~ %patch -P100 -p1 -b .fortran-fdec-duplicates~ @@ -2908,6 +2914,30 @@ fi %endif %changelog +* Mon Jan 26 2026 Siddhesh Poyarekar 15.2.1-7 +- update from releases/gcc-15 branch (RHEL-116514) + - PRs ada/68179, ada/123060, ada/123088, ada/123096, ada/123138, ada/123185, + ada/123289, ada/123302, ada/123306, ada/123371, ada/123589, + analyzer/122975, analyzer/123085, c/123156, c++/91388, c++/114764, + c++/116952, c++/120446, c++/121854, c++/121966, c++/122048, + c++/122070, c++/122550, c++/122668, c++/122752, c++/122772, + c++/122834, c++/122922, c++/123331, c++/123597, debug/121964, + diagnostics/120063, fortran/107406, libfortran/122936, + libstdc++/120446, libstdc++/122812, libstdc++/122907, + libstdc++/123147, middle-end/111817, middle-end/123107, + middle-end/123392, middle-end/123703, rtl-optimization/121773, + rtl-optimization/122215, rtl-optimization/123121, + rtl-optimization/123523, target/117575, target/119130, + target/120250, target/121192, target/121485, target/123022, + target/123092, target/123155, target/123217, target/123460, + target/123484, target/123489, target/123521, target/123607, + target/123742, testsuite/123353, tree-optimization/122793, + tree-optimization/122868, tree-optimization/123040, + tree-optimization/123300, tree-optimization/123351, + tree-optimization/123372, tree-optimization/123431, + tree-optimization/123513, tree-optimization/123602, + tree-optimization/123736, tree-optimization/123741 + * Mon Jun 16 2025 Marek Polacek 15.1.1-2.3 - re-enable annobin-plugin and offload-nvptx - configure with --enable-host-pie --enable-host-bind-now (RHEL-95594) diff --git a/gcc15-pr123273.patch b/gcc15-pr123273.patch new file mode 100644 index 0000000..987f6e0 --- /dev/null +++ b/gcc15-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/gcc15-pr123667.patch b/gcc15-pr123667.patch new file mode 100644 index 0000000..be8eb6f --- /dev/null +++ b/gcc15-pr123667.patch @@ -0,0 +1,94 @@ +2026-01-21 Jakub Jelinek + + PR c++/123667 + * semantics.cc (finish_decltype_type): Allow a structured binding + for ptds.saved to have DECL_HAS_VALUE_EXPR_P cleared, if it is + not within current_function_decl, but in that case assert that + lookup_decomp_type succeeded. + + * g++.dg/cpp1z/decomp66.C: New test. + * g++.dg/cpp1z/decomp67.C: New test. + +--- gcc/cp/semantics.cc.jj 2026-01-15 16:33:46.000000000 +0100 ++++ gcc/cp/semantics.cc 2026-01-21 17:55:14.272577246 +0100 +@@ -13062,12 +13062,16 @@ finish_decltype_type (tree expr, bool id + { + if (ptds.saved) + { +- gcc_checking_assert (DECL_HAS_VALUE_EXPR_P (expr)); ++ gcc_checking_assert (DECL_HAS_VALUE_EXPR_P (expr) ++ || (DECL_CONTEXT (expr) ++ != current_function_decl)); + /* DECL_HAS_VALUE_EXPR_P is always set if +- processing_template_decl. If lookup_decomp_type ++ processing_template_decl at least for structured bindings ++ within the template. If lookup_decomp_type + returns non-NULL, it is the tuple case. */ + if (tree ret = lookup_decomp_type (expr)) + return ret; ++ gcc_checking_assert (DECL_HAS_VALUE_EXPR_P (expr)); + } + if (DECL_HAS_VALUE_EXPR_P (expr)) + /* Expr is an array or struct subobject proxy, handle +--- gcc/testsuite/g++.dg/cpp1z/decomp66.C.jj 2026-01-21 17:59:28.122275457 +0100 ++++ gcc/testsuite/g++.dg/cpp1z/decomp66.C 2026-01-21 17:58:30.737247916 +0100 +@@ -0,0 +1,23 @@ ++// PR c++/123667 ++// { dg-do compile { target c++14 } } ++// { dg-options "" } ++ ++namespace std { ++ template struct tuple_size; ++ template struct tuple_element; ++} ++ ++struct A { ++ int i; ++ template int &get () { return i; } ++}; ++ ++template <> struct std::tuple_size { static const int value = 2; }; ++template struct std::tuple_element { using type = int; }; ++ ++int ++main () ++{ ++ auto [ x, y ] = A { 0 }; // { dg-warning "structured bindings only available with" "" { target c++14_down } } ++ [] (auto t) { using z = decltype (x); } (1); ++} +--- gcc/testsuite/g++.dg/cpp1z/decomp67.C.jj 2026-01-21 17:59:31.139224331 +0100 ++++ gcc/testsuite/g++.dg/cpp1z/decomp67.C 2026-01-21 17:59:07.235629406 +0100 +@@ -0,0 +1,33 @@ ++// PR c++/123667 ++// { dg-do compile { target c++11 } } ++// { dg-options "" } ++ ++namespace std { ++ template struct tuple_size; ++ template struct tuple_element; ++} ++ ++struct A { ++ int i; ++ template int &get () { return i; } ++}; ++ ++template <> struct std::tuple_size { static const int value = 2; }; ++template struct std::tuple_element { using type = int; }; ++ ++auto [ x, y ] = A { 0 }; // { dg-warning "structured bindings only available with" "" { target c++14_down } } ++ ++template ++void ++foo () ++{ ++ using a = decltype (x); ++ auto [ x, y ] = A { 0 }; // { dg-warning "structured bindings only available with" "" { target c++14_down } } ++ using b = decltype (x); ++} ++ ++void ++bar () ++{ ++ foo <42> (); ++} diff --git a/gcc15-pr123737.patch b/gcc15-pr123737.patch new file mode 100644 index 0000000..7040ee0 --- /dev/null +++ b/gcc15-pr123737.patch @@ -0,0 +1,86 @@ +2026-01-21 Jakub Jelinek + + PR c++/123737 + * parser.cc (cp_parser_expression): Don't handle CPP_EMBED just + as the last byte in it if expression has or might have overloaded + type. In that case call build_x_compound_expr for each byte + in CPP_EMBED separately. + + * g++.dg/cpp/embed-28.C: New test. + * g++.dg/parse/comma3.C: New test. + +--- gcc/cp/parser.cc.jj 2026-01-20 01:13:20.324260446 +0100 ++++ gcc/cp/parser.cc 2026-01-21 14:04:32.086336386 +0100 +@@ -12132,10 +12132,24 @@ cp_parser_expression (cp_parser* parser, + and one CPP_NUMBER plus CPP_COMMA before it and one + CPP_COMMA plus CPP_NUMBER after it is guaranteed by + the preprocessor. Thus, parse the whole CPP_EMBED just +- as a single INTEGER_CST, the last byte in it. */ ++ as a single INTEGER_CST, the last byte in it. Though, ++ don't use that shortcut if the comma operator could be ++ overloaded. */ + tree raw_data = cp_lexer_peek_token (parser->lexer)->u.value; + location_t loc = cp_lexer_peek_token (parser->lexer)->location; + cp_lexer_consume_token (parser->lexer); ++ if (OVERLOAD_TYPE_P (TREE_TYPE (expression)) ++ || type_dependent_expression_p (expression)) ++ for (unsigned i = 0; i < RAW_DATA_LENGTH (raw_data) - 1U; ++i) ++ { ++ assignment_expression ++ = *raw_data_iterator (raw_data, i); ++ assignment_expression.set_location (loc); ++ expression ++ = build_x_compound_expr (loc, expression, ++ assignment_expression, NULL_TREE, ++ complain_flags (decltype_p)); ++ } + assignment_expression + = *raw_data_iterator (raw_data, RAW_DATA_LENGTH (raw_data) - 1); + assignment_expression.set_location (loc); +--- gcc/testsuite/g++.dg/cpp/embed-28.C.jj 2026-01-21 14:11:14.617520864 +0100 ++++ gcc/testsuite/g++.dg/cpp/embed-28.C 2026-01-21 14:11:01.121749695 +0100 +@@ -0,0 +1,19 @@ ++// PR c++/123737 ++// { dg-do run } ++// { dg-options "--embed-dir=${srcdir}/c-c++-common/cpp/embed-dir" } ++ ++struct A { ++ A (int x) : a (0), e (x) {} ++ unsigned long a, e; ++ A &operator, (int) { ++a; return *this; } ++ ~A () { if (a != e) __builtin_abort (); } ++}; ++ ++int ++main () ++{ ++ A a = 231; ++ a, ++#embed limit (231) ++ ; ++} +--- gcc/testsuite/g++.dg/parse/comma3.C.jj 2026-01-21 14:08:53.834908004 +0100 ++++ gcc/testsuite/g++.dg/parse/comma3.C 2026-01-21 12:15:02.334948163 +0100 +@@ -0,0 +1,22 @@ ++// PR c++/123737 ++// { dg-do run } ++ ++struct A { ++ A (int x) : a (0), e (x) {} ++ unsigned long a, e; ++ A &operator, (int) { ++a; return *this; } ++ ~A () { if (a != e) __builtin_abort (); } ++}; ++ ++int ++main () ++{ ++ A a = 131; ++ a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; ++} diff --git a/sources b/sources index 5bf974f..7a29e8b 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (gcc-15.1.1-20250521.tar.xz) = 86b06902e10aa6eba4ccbe54e97fee17838e21484e4f6d4aef2e93d0687b04e82f00655828ac0233f4026cd0d2df08bbdfe7dc2eeafc8908cab183584d2fb8ee +SHA512 (gcc-15.2.1-20260123.tar.xz) = c4f0513e4027632f2d62b1feead9fa197e46f796212bd7f07eaff9b2e84a1230b601f3a6f2cabfc9994ca0e47f95b21fcb9a182575a27e30100e3206d6767070 SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95 SHA512 (newlib-cygwin-d35cc82b5ec15bb8a5fe0fe11e183d1887992e99.tar.xz) = ef9495745a96d1d76f9f425c4a48c807fface36a1aa92351c5d024103678d144d046e8de55d195103784472c14874e29e4b9284d5d6a2e7bb27fd98c8455a881 SHA512 (nvptx-tools-87ce9dc5999e5fca2e1d3478a30888d9864c9804.tar.xz) = 941e763af8601b89f0e4ec48a2d68ae0a8e70ee1e6ba6859394b021ad7bd7d143cc529f3c35c08d7f84e5554980ddcc97cf05b6c4755c2bc36c91161b79e8cea