summaryrefslogtreecommitdiff
path: root/sys-devel/gcc/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2025-04-11 08:43:59 +0100
committerV3n3RiX <venerix@koprulu.sector>2025-04-11 08:43:59 +0100
commitbb59556b3302a941db4630613c604644d5f7a617 (patch)
tree42e60b7ae227b0fe3af52dfac08d59653066a2db /sys-devel/gcc/files
parent3cd09a18bad26aad2645241b868755cfdf41b6ae (diff)
gentoo auto-resync : 11:04:2025 - 08:43:58HEADmaster
Diffstat (limited to 'sys-devel/gcc/files')
-rw-r--r--sys-devel/gcc/files/gcc-15.0.1_pre20250406-compare-debug.patch88
-rw-r--r--sys-devel/gcc/files/gcc-15.0.1_pre20250406-de-locale.patch216
-rw-r--r--sys-devel/gcc/files/gcc-15.0.1_pre20250406-qt.patch77
-rw-r--r--sys-devel/gcc/files/gcc-15.0.1_pre20250406-simplify-oops.patch81
4 files changed, 462 insertions, 0 deletions
diff --git a/sys-devel/gcc/files/gcc-15.0.1_pre20250406-compare-debug.patch b/sys-devel/gcc/files/gcc-15.0.1_pre20250406-compare-debug.patch
new file mode 100644
index 000000000000..5fd89cd8e5e9
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-15.0.1_pre20250406-compare-debug.patch
@@ -0,0 +1,88 @@
+https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=088887de7717a22b1503760e9b79dfbe22a0f428
+
+From 088887de7717a22b1503760e9b79dfbe22a0f428 Mon Sep 17 00:00:00 2001
+From: Richard Biener <rguenther@suse.de>
+Date: Wed, 9 Apr 2025 14:36:19 +0200
+Subject: [PATCH] rtl-optimization/119689 - compare-debug failure with LRA
+
+The previous change to fix LRA rematerialization broke compare-debug
+for i586 bootstrap. Fixed by using prev_nonnote_nondebug_insn
+instead of prev_nonnote_insn.
+
+ PR rtl-optimization/119689
+ PR rtl-optimization/115568
+ * lra-remat.cc (create_cands): Use prev_nonnote_nondebug_insn
+ to check whether insn2 is directly before insn.
+
+ * g++.target/i386/pr119689.C: New testcase.
+---
+ gcc/lra-remat.cc | 2 +-
+ gcc/testsuite/g++.target/i386/pr119689.C | 44 ++++++++++++++++++++++++
+ 2 files changed, 45 insertions(+), 1 deletion(-)
+ create mode 100644 gcc/testsuite/g++.target/i386/pr119689.C
+
+diff --git a/gcc/lra-remat.cc b/gcc/lra-remat.cc
+index 2f3afffcf5be..5f823193aa73 100644
+--- a/gcc/lra-remat.cc
++++ b/gcc/lra-remat.cc
+@@ -460,7 +460,7 @@ create_cands (void)
+ && dst_regno >= FIRST_PSEUDO_REGISTER
+ && reg_renumber[dst_regno] < 0
+ && BLOCK_FOR_INSN (insn2) == BLOCK_FOR_INSN (insn)
+- && insn2 == prev_nonnote_insn (insn))
++ && insn2 == prev_nonnote_nondebug_insn (insn))
+ {
+ create_cand (insn2, regno_potential_cand[src_regno].nop,
+ dst_regno, insn);
+diff --git a/gcc/testsuite/g++.target/i386/pr119689.C b/gcc/testsuite/g++.target/i386/pr119689.C
+new file mode 100644
+index 000000000000..cdc6d2dade53
+--- /dev/null
++++ b/gcc/testsuite/g++.target/i386/pr119689.C
+@@ -0,0 +1,44 @@
++// { dg-do compile }
++// { dg-options "-O2 -fcompare-debug" }
++// { dg-additional-options "-march=i586 -mtune=generic" { target ia32 } }
++// { dg-additional-options "-fPIC" { target { fpic } } }
++
++enum gimple_code { GIMPLE_ASSIGN, GIMPLE_RETURN };
++bool is_gimple_call();
++int m_sig, m_exp, sreal_new_exp;
++struct sreal {
++ sreal(long long sig) {
++ long long __trans_tmp_6 = sig >= 0 ? sig : -(unsigned long long)sig;
++ sig = __trans_tmp_6 <<= sreal_new_exp -= m_exp = __trans_tmp_6;
++ m_sig = sig;
++ }
++ void operator/(sreal);
++};
++struct ipa_predicate {
++ ipa_predicate(bool = true);
++ void operator&=(ipa_predicate);
++ void operator&(ipa_predicate);
++};
++void add_condition();
++gimple_code eliminated_by_inlining_prob_code;
++static int eliminated_by_inlining_prob() {
++ switch (eliminated_by_inlining_prob_code) {
++ case GIMPLE_RETURN:
++ return 2;
++ case GIMPLE_ASSIGN:
++ return 1;
++ }
++ return 0;
++}
++void fp_expression_p() {
++ ipa_predicate bb_predicate;
++ for (;;) {
++ int prob = eliminated_by_inlining_prob();
++ ipa_predicate sra_predicate;
++ sra_predicate &= add_condition;
++ if (is_gimple_call())
++ sreal(prob) / 2;
++ if (prob != 2)
++ bb_predicate & sra_predicate;
++ }
++}
+--
+2.43.5
diff --git a/sys-devel/gcc/files/gcc-15.0.1_pre20250406-de-locale.patch b/sys-devel/gcc/files/gcc-15.0.1_pre20250406-de-locale.patch
new file mode 100644
index 000000000000..e0ccde38b94f
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-15.0.1_pre20250406-de-locale.patch
@@ -0,0 +1,216 @@
+https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=1f32b87117b0e2ecc33b844d929d723de3fe8085
+
+From 1f32b87117b0e2ecc33b844d929d723de3fe8085 Mon Sep 17 00:00:00 2001
+From: Jakub Jelinek <jakub@redhat.com>
+Date: Thu, 10 Apr 2025 18:39:52 +0200
+Subject: [PATCH] c++: Use G_ instead of _ around cp/errors.cc
+ gcc-internal-format strings [PR119684]
+
+These pp_printf/pp_verbatim format strings should be gcc-internal-format,
+they use the pretty-print.cc format specifier handling rather than libc
+*printf, but pp_printf/pp_verbatim are intentionally not handled through
+exgettext because not everything done through them should be translated
+(e.g. its use for dump files shouldn't be).
+In addition, composing translatable messages from
+"in requirements " and later on "with " might make it harder to be
+translated.
+
+I've verified these strings (at least those which don't use format
+specifiers added post GCC 4.3 which gettext doesn't handle) are properly
+marked as gcc-internal-format in gcc.pot. The lack of that caused
+ICEs on German translation of the "%s%s%sIn instantiation of %q#D:\n"
+message because it contained too many %s.
+
+2025-04-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR translation/119684
+ * error.cc (cp_print_error_function): Use G_ instead of _ for
+ pp_printf arguments.
+ (function_category): Use G_ instead of _.
+ (print_instantiation_full_context): Use G_ instead of _ in pp_verbatim
+ arguments.
+ (print_location): Likewise.
+ (print_instantiation_partial_context): Likewise.
+ (maybe_print_constexpr_context): Likewise.
+ (print_constrained_decl_info): Use G_() around pp_verbatim argument.
+ (print_concept_check_info): Likewise.
+ (print_constraint_context_head): Likewise.
+ (print_requires_expression_info): Likewise. Merge separate pp_verbatim
+ "in requirements " and "with " into one with conditional messages.
+---
+ gcc/cp/error.cc | 59 ++++++++++++++++++++++++-------------------------
+ 1 file changed, 29 insertions(+), 30 deletions(-)
+
+diff --git a/gcc/cp/error.cc b/gcc/cp/error.cc
+index ec7527e96d18..499eb1b15a85 100644
+--- a/gcc/cp/error.cc
++++ b/gcc/cp/error.cc
+@@ -3788,18 +3788,18 @@ cp_print_error_function (diagnostic_text_output_format &text_output,
+ {
+ if (text_output.show_column_p () && s.column != 0)
+ pp_printf (pp,
+- _(" inlined from %qD at %r%s:%d:%d%R"),
++ G_(" inlined from %qD at %r%s:%d:%d%R"),
+ fndecl,
+ "locus", s.file, s.line, s.column);
+ else
+ pp_printf (pp,
+- _(" inlined from %qD at %r%s:%d%R"),
++ G_(" inlined from %qD at %r%s:%d%R"),
+ fndecl,
+ "locus", s.file, s.line);
+
+ }
+ else
+- pp_printf (pp, _(" inlined from %qD"),
++ pp_printf (pp, G_(" inlined from %qD"),
+ fndecl);
+ }
+ }
+@@ -3825,22 +3825,22 @@ function_category (tree fn)
+ && DECL_FUNCTION_MEMBER_P (fn))
+ {
+ if (DECL_STATIC_FUNCTION_P (fn))
+- return _("In static member function %qD");
++ return G_("In static member function %qD");
+ else if (DECL_COPY_CONSTRUCTOR_P (fn))
+- return _("In copy constructor %qD");
++ return G_("In copy constructor %qD");
+ else if (DECL_CONSTRUCTOR_P (fn))
+- return _("In constructor %qD");
++ return G_("In constructor %qD");
+ else if (DECL_DESTRUCTOR_P (fn))
+- return _("In destructor %qD");
++ return G_("In destructor %qD");
+ else if (LAMBDA_FUNCTION_P (fn))
+- return _("In lambda function");
++ return G_("In lambda function");
+ else if (DECL_XOBJ_MEMBER_FUNCTION_P (fn))
+- return _("In explicit object member function %qD");
++ return G_("In explicit object member function %qD");
+ else
+- return _("In member function %qD");
++ return G_("In member function %qD");
+ }
+ else
+- return _("In function %qD");
++ return G_("In function %qD");
+ }
+
+ /* Disable warnings about missing quoting in GCC diagnostics for
+@@ -3867,8 +3867,8 @@ print_instantiation_full_context (diagnostic_text_output_format &text_output)
+ char *indent = text_output.build_indent_prefix (true);
+ pp_verbatim (text_output.get_printer (),
+ p->list_p ()
+- ? _("%s%s%sIn substitution of %qS:\n")
+- : _("%s%s%sIn instantiation of %q#D:\n"),
++ ? G_("%s%s%sIn substitution of %qS:\n")
++ : G_("%s%s%sIn instantiation of %q#D:\n"),
+ indent,
+ show_file ? LOCATION_FILE (location) : "",
+ show_file ? ": " : "",
+@@ -3888,10 +3888,10 @@ print_location (diagnostic_text_output_format &text_output,
+ expanded_location xloc = expand_location (loc);
+ pretty_printer *const pp = text_output.get_printer ();
+ if (text_output.show_column_p ())
+- pp_verbatim (pp, _("%r%s:%d:%d:%R "),
++ pp_verbatim (pp, G_("%r%s:%d:%d:%R "),
+ "locus", xloc.file, xloc.line, xloc.column);
+ else
+- pp_verbatim (pp, _("%r%s:%d:%R "),
++ pp_verbatim (pp, G_("%r%s:%d:%R "),
+ "locus", xloc.file, xloc.line);
+ }
+
+@@ -3984,22 +3984,22 @@ print_instantiation_partial_context_line (diagnostic_text_output_format &text_ou
+ if (t->list_p ())
+ pp_verbatim (pp,
+ recursive_p
+- ? _("recursively required by substitution of %qS\n")
+- : _("required by substitution of %qS\n"),
++ ? G_("recursively required by substitution of %qS\n")
++ : G_("required by substitution of %qS\n"),
+ t->get_node ());
+ else
+ pp_verbatim (pp,
+ recursive_p
+- ? _("recursively required from %q#D\n")
+- : _("required from %q#D\n"),
++ ? G_("recursively required from %q#D\n")
++ : G_("required from %q#D\n"),
+ t->get_node ());
+ }
+ else
+ {
+ pp_verbatim (pp,
+ recursive_p
+- ? _("recursively required from here\n")
+- : _("required from here\n"));
++ ? G_("recursively required from here\n")
++ : G_("required from here\n"));
+ }
+ }
+
+@@ -4049,8 +4049,8 @@ print_instantiation_partial_context (diagnostic_text_output_format &text_output,
+ {
+ auto_context_line sentinel (text_output, loc);
+ pp_verbatim (text_output.get_printer (),
+- _("[ skipping %d instantiation contexts,"
+- " use -ftemplate-backtrace-limit=0 to disable ]\n"),
++ G_("[ skipping %d instantiation contexts,"
++ " use -ftemplate-backtrace-limit=0 to disable ]\n"),
+ skip);
+ do {
+ loc = t->locus;
+@@ -4101,7 +4101,7 @@ maybe_print_constexpr_context (diagnostic_text_output_format &text_output)
+ pretty_printer *const pp = text_output.get_printer ();
+ auto_context_line sentinel (text_output, EXPR_LOCATION (t));
+ pp_verbatim (pp,
+- _("in %<constexpr%> expansion of %qs"),
++ G_("in %<constexpr%> expansion of %qs"),
+ s);
+ pp_newline (pp);
+ }
+@@ -4114,7 +4114,7 @@ print_constrained_decl_info (diagnostic_text_output_format &text_output,
+ {
+ auto_context_line sentinel (text_output, DECL_SOURCE_LOCATION (decl));
+ pretty_printer *const pp = text_output.get_printer ();
+- pp_verbatim (pp, "required by the constraints of %q#D\n", decl);
++ pp_verbatim (pp, G_("required by the constraints of %q#D\n"), decl);
+ }
+
+ static void
+@@ -4129,7 +4129,7 @@ print_concept_check_info (diagnostic_text_output_format &text_output,
+
+ cxx_pretty_printer *const pp
+ = (cxx_pretty_printer *)text_output.get_printer ();
+- pp_verbatim (pp, "required for the satisfaction of %qE", expr);
++ pp_verbatim (pp, G_("required for the satisfaction of %qE"), expr);
+ if (map && map != error_mark_node)
+ {
+ tree subst_map = tsubst_parameter_mapping (map, args, tf_none, NULL_TREE);
+@@ -4151,7 +4151,7 @@ print_constraint_context_head (diagnostic_text_output_format &text_output,
+ {
+ auto_context_line sentinel (text_output, input_location);
+ pretty_printer *const pp = text_output.get_printer ();
+- pp_verbatim (pp, "required for constraint satisfaction\n");
++ pp_verbatim (pp, G_("required for constraint satisfaction\n"));
+ return NULL_TREE;
+ }
+ if (DECL_P (src))
+@@ -4180,11 +4180,10 @@ print_requires_expression_info (diagnostic_text_output_format &text_output,
+ auto_context_line sentinel (text_output, cp_expr_loc_or_input_loc (expr));
+ cxx_pretty_printer *const pp
+ = static_cast <cxx_pretty_printer *> (text_output.get_printer ());
+- pp_verbatim (pp, "in requirements ");
+
+ tree parms = TREE_OPERAND (expr, 0);
+- if (parms)
+- pp_verbatim (pp, "with ");
++ pp_verbatim (pp, parms ? G_("in requirements with ")
++ : G_("in requirements "));
+ while (parms)
+ {
+ pp_verbatim (pp, "%q#D", parms);
+--
+2.43.5
diff --git a/sys-devel/gcc/files/gcc-15.0.1_pre20250406-qt.patch b/sys-devel/gcc/files/gcc-15.0.1_pre20250406-qt.patch
new file mode 100644
index 000000000000..86874faf6fdf
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-15.0.1_pre20250406-qt.patch
@@ -0,0 +1,77 @@
+https://inbox.sourceware.org/gcc-patches/20250409151104.2600656-1-ppalka@redhat.com/
+
+From 660e4bf9391692acb0bb18ba5eb38e689ae0a8a6 Mon Sep 17 00:00:00 2001
+Message-ID: <660e4bf9391692acb0bb18ba5eb38e689ae0a8a6.1744212391.git.sam@gentoo.org>
+From: Patrick Palka <ppalka@redhat.com>
+Date: Wed, 9 Apr 2025 11:11:04 -0400
+Subject: [PATCH] c++: alias_ctad_tweaks ICE w/ inherited CTAD [PR119687]
+
+With inherited CTAD the set of guides may be a two-dimensional overload
+set (i.e. OVERLOADs containing OVERLOADs) so alias_ctad_tweaks (which
+also handles the inherited CTAD transformation) needs to use the 2D-aware
+lkp_iterator instead of ovl_iterator. Actually, we might as well use
+the more idiomatic lkp_range here.
+
+ PR c++/119687
+
+gcc/cp/ChangeLog:
+
+ * pt.cc (alias_ctad_tweaks): Use lkp_range / lkp_iterator
+ instead of ovl_iterator.
+
+gcc/testsuite/ChangeLog:
+
+* g++.dg/cpp23/class-deduction-inherited8.C: New test.
+---
+ gcc/cp/pt.cc | 3 +--
+ .../g++.dg/cpp23/class-deduction-inherited8.C | 21 +++++++++++++++++++
+ 2 files changed, 22 insertions(+), 2 deletions(-)
+ create mode 100644 gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C
+
+diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
+index 0e120c4040ed..352a7f4ed316 100644
+--- a/gcc/cp/pt.cc
++++ b/gcc/cp/pt.cc
+@@ -30937,9 +30937,8 @@ alias_ctad_tweaks (tree tmpl, tree uguides)
+ tree aguides = NULL_TREE;
+ tree atparms = INNERMOST_TEMPLATE_PARMS (fullatparms);
+ unsigned natparms = TREE_VEC_LENGTH (atparms);
+- for (ovl_iterator iter (uguides); iter; ++iter)
++ for (tree f : lkp_range (uguides))
+ {
+- tree f = *iter;
+ tree in_decl = f;
+ location_t loc = DECL_SOURCE_LOCATION (f);
+ tree ret = TREE_TYPE (TREE_TYPE (f));
+diff --git a/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C b/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C
+new file mode 100644
+index 000000000000..79fceadd9e1c
+--- /dev/null
++++ b/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C
+@@ -0,0 +1,21 @@
++// PR c++/119687
++// { dg-do compile { target c++20 } }
++
++template <typename> class QFlagsStorage{};
++
++template <typename Enum> struct QFlagsStorageHelper : QFlagsStorage<Enum> {
++ using QFlagsStorage<Enum>::QFlagsStorage;
++
++public:
++ QFlagsStorageHelper(Enum);
++};
++
++template <typename Enum> struct QFlags : public QFlagsStorageHelper<Enum> {
++ using Base = QFlagsStorageHelper<Enum>;
++ using Base::Base;
++ QFlags(Enum);
++};
++
++void f(int flag) {
++ QFlags{int{}};
++}
+
+base-commit: 334545194d9023fb9b2f72ee0dcde8af94930f25
+--
+2.49.0
+
diff --git a/sys-devel/gcc/files/gcc-15.0.1_pre20250406-simplify-oops.patch b/sys-devel/gcc/files/gcc-15.0.1_pre20250406-simplify-oops.patch
new file mode 100644
index 000000000000..abc7b6966cf7
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-15.0.1_pre20250406-simplify-oops.patch
@@ -0,0 +1,81 @@
+https://gcc.gnu.org/PR119672
+https://gcc.gnu.org/PR119713
+https://bugs.gentoo.org/953420
+https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=04918a2d3f20b02ac3efad1096c33894d57789a0
+
+From 04918a2d3f20b02ac3efad1096c33894d57789a0 Mon Sep 17 00:00:00 2001
+From: Jakub Jelinek <jakub@redhat.com>
+Date: Tue, 8 Apr 2025 15:14:58 +0200
+Subject: [PATCH] simplify-rtx: Fix up POPCOUNT optimization [PR119672]
+
+The gcc.dg/vect/pr113281-1.c test and many others ICE on riscv since
+presumably the r15-9238 change which allowed more cases of vector modes
+in simplify_const_relational_operation.
+In the testcase it is EQ of
+(popcount:SI (unspec:RVVMF32BI [
+ (and:RVVMF32BI (const_vector:RVVMF32BI repeat [
+ (const_int 1 [0x1])
+ ])
+ (reg:RVVMF32BI 147 [ mask__6.8_35 ]))
+ (reg:SI 143 [ _41 ])
+ (const_int 0 [0])
+ (reg:SI 66 vl)
+ (reg:SI 67 vtype)
+ ] UNSPEC_VPREDICATE))
+and
+(const_int 0 [0])
+which it tries to fold as EQ comparison of
+(unspec:RVVMF32BI [
+ (and:RVVMF32BI (const_vector:RVVMF32BI repeat [
+ (const_int 1 [0x1])
+ ])
+ (reg:RVVMF32BI 147 [ mask__6.8_35 ]))
+ (reg:SI 143 [ _41 ])
+ (const_int 0 [0])
+ (reg:SI 66 vl)
+ (reg:SI 67 vtype)
+ ] UNSPEC_VPREDICATE)
+with
+(const_int 0 [0])
+which ICEs because const0_rtx isn't a vector.
+Fixed by using CONST0_RTX, so that we pass
+(const_vector:RVVMF32BI repeat [
+ (const_int 0 [0])
+ ])
+instead.
+
+2025-04-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/119672
+ * simplify-rtx.cc (simplify_context::simplify_relational_operation_1):
+ For POPCOUNT == 0 or != 0 optimizations use
+ CONST0_RTX (GET_MODE (XEXP (op0, 0))) rather than const0_rtx.
+---
+ gcc/simplify-rtx.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc
+index 6f969effdf99..88d31a71c05a 100644
+--- a/gcc/simplify-rtx.cc
++++ b/gcc/simplify-rtx.cc
+@@ -6465,14 +6465,16 @@ simplify_context::simplify_relational_operation_1 (rtx_code code,
+ case LEU:
+ /* (eq (popcount x) (const_int 0)) -> (eq x (const_int 0)). */
+ return simplify_gen_relational (EQ, mode, GET_MODE (XEXP (op0, 0)),
+- XEXP (op0, 0), const0_rtx);
++ XEXP (op0, 0),
++ CONST0_RTX (GET_MODE (XEXP (op0, 0))));
+
+ case NE:
+ case GT:
+ case GTU:
+ /* (ne (popcount x) (const_int 0)) -> (ne x (const_int 0)). */
+ return simplify_gen_relational (NE, mode, GET_MODE (XEXP (op0, 0)),
+- XEXP (op0, 0), const0_rtx);
++ XEXP (op0, 0),
++ CONST0_RTX (GET_MODE (XEXP (op0, 0))));
+
+ default:
+ break;
+--
+2.43.5