diff mbox series

[1/2] gcc: fix ICE when building webkitgtk

Message ID 20251217072654.326736-1-hongxu.jia@windriver.com
State New
Headers show
Series [1/2] gcc: fix ICE when building webkitgtk | expand

Commit Message

Hongxu Jia Dec. 17, 2025, 7:26 a.m. UTC
Compile webkitgtk failed with ICE
...
|tmp/work/x86-64-v3-oe-linux/webkitgtk/2.50.0/sources/webkitgtk-2.50.0/
Source/WebCore/platform/ScrollAnimationMomentum.cpp:96:6: internal compiler
error: in expand_debug_locations, at cfgexpand.cc:6042
...

Backport a patch from upstream to fix the issue [1][2]

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122394
[2] https://gcc.gnu.org/cgit/gcc/commit/?id=e55dcff97708a4937dc4d8736b8b3074ebbff6f3

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
 meta/recipes-devtools/gcc/gcc-15.2.inc        |  1 +
 .../gcc/gcc/0027-gcc15-pr122394.patch         | 88 +++++++++++++++++++
 2 files changed, 89 insertions(+)
 create mode 100644 meta/recipes-devtools/gcc/gcc/0027-gcc15-pr122394.patch
diff mbox series

Patch

diff --git a/meta/recipes-devtools/gcc/gcc-15.2.inc b/meta/recipes-devtools/gcc/gcc-15.2.inc
index 3ed4600361..b02cc4fcb9 100644
--- a/meta/recipes-devtools/gcc/gcc-15.2.inc
+++ b/meta/recipes-devtools/gcc/gcc-15.2.inc
@@ -73,6 +73,7 @@  SRC_URI = "${BASEURI} \
            file://0024-Avoid-hardcoded-build-paths-into-ppc-libgcc.patch \
            file://0025-gcc-testsuite-tweaks-for-mips-OE.patch \
            file://0026-fix-pr90579-testcases.patch \
+           file://0027-gcc15-pr122394.patch \
            file://0001-mapper-localhost-might-not-be-known.patch \
 "
 
diff --git a/meta/recipes-devtools/gcc/gcc/0027-gcc15-pr122394.patch b/meta/recipes-devtools/gcc/gcc/0027-gcc15-pr122394.patch
new file mode 100644
index 0000000000..9ee371cef7
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0027-gcc15-pr122394.patch
@@ -0,0 +1,88 @@ 
+From e55dcff97708a4937dc4d8736b8b3074ebbff6f3 Mon Sep 17 00:00:00 2001
+From: Jakub Jelinek <jakub@redhat.com>
+Date: Mon, 27 Oct 2025 17:43:17 +0100
+Subject: phiopt: Fix up DEBUG_EXPR_DECL creation in spaceship_replacement
+ [PR122394]
+
+The following testcase ICEs in gcc 15 (and is at least latent in 12-14 too),
+because the DEBUG_EXPR_DECL has incorrect mode.  It has
+TREE_TYPE (orig_use_lhs) type, but TYPE_MODE (type) rather than
+TYPE_MODE (TREE_TYPE (orig_use_lhs)) where the two types are sometimes
+the same, but sometimes different (same if !has_cast_debug_uses, different
+otherwise).
+
+Though, there wouldn't be the this issue if it used the proper API to create
+the DEBUG_EXPR_DECL which takes care of everything.  This is the sole
+spot that doesn't use that API.
+
+Doesn't affect the trunk because the code has been removed and replaced with
+different stuff after the libstdc++ ABI change in r16-3474.
+Before r15-5557 the mode has been always wrong because this was done only
+for has_cast_debug_uses.  And the bug has been introduced with r12-5490.
+
+Enough archeology, while it could be fixed by changing the second
+SET_DECL_MODE argument, I think it is better to use build_debug_expr_decl.
+
+2025-10-27  Jakub Jelinek  <jakub@redhat.com>
+
+	PR tree-optimization/122394
+	* tree-ssa-phiopt.cc (spaceship_replacement): Use
+	build_debug_expr_decl instead of manually building DEBUG_EXPR_DECL
+	and getting SET_DECL_MODE wrong.
+
+	* g++.dg/opt/pr122394.C: New test.
+
+Upstream-Status: Backport [https://gcc.gnu.org/cgit/gcc/commit/?id=e55dcff97708a4937dc4d8736b8b3074ebbff6f3]
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ gcc/testsuite/g++.dg/opt/pr122394.C | 20 ++++++++++++++++++++
+ gcc/tree-ssa-phiopt.cc              |  6 ++----
+ 2 files changed, 22 insertions(+), 4 deletions(-)
+ create mode 100644 gcc/testsuite/g++.dg/opt/pr122394.C
+
+diff --git a/gcc/testsuite/g++.dg/opt/pr122394.C b/gcc/testsuite/g++.dg/opt/pr122394.C
+new file mode 100644
+index 000000000000..1f84bebd74c2
+--- /dev/null
++++ b/gcc/testsuite/g++.dg/opt/pr122394.C
+@@ -0,0 +1,20 @@
++// PR tree-optimization/122394
++// { dg-do compile { target c++23 } }
++// { dg-options "-O1 -g" }
++
++#include <compare>
++
++struct A {
++  friend auto operator<=> (A, A) = default;
++  double a;
++};
++void foo ();
++A b, c;
++
++void
++bar ()
++{
++  bool d = c >= b;
++  if (d)
++    foo ();
++}
+diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc
+index aaebae6b38c0..3e0ad9d3bb09 100644
+--- a/gcc/tree-ssa-phiopt.cc
++++ b/gcc/tree-ssa-phiopt.cc
+@@ -2995,10 +2995,8 @@ spaceship_replacement (basic_block cond_bb, basic_block middle_bb,
+ 	      if (has_cast_debug_uses
+ 		  || (HONOR_NANS (TREE_TYPE (lhs1)) && !is_cast))
+ 		{
+-		  tree temp3 = make_node (DEBUG_EXPR_DECL);
+-		  DECL_ARTIFICIAL (temp3) = 1;
+-		  TREE_TYPE (temp3) = TREE_TYPE (orig_use_lhs);
+-		  SET_DECL_MODE (temp3, TYPE_MODE (type));
++		  tree temp3
++		    = build_debug_expr_decl (TREE_TYPE (orig_use_lhs));
+ 		  if (has_cast_debug_uses)
+ 		    t = fold_convert (TREE_TYPE (temp3), temp2);
+ 		  else
+-- 
+cgit 
+