diff mbox series

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

Message ID 20251217072654.326736-1-hongxu.jia@windriver.com
State Accepted, archived
Commit 187d0af5e6b5ec63e06fa97c20bf1da649c8b0f4
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

Comments

Khem Raj Dec. 19, 2025, 2:18 p.m. UTC | #1
Lgtm

On Wed, Dec 17, 2025 at 3:27 AM hongxu via lists.openembedded.org
<hongxu.jia=windriver.com@lists.openembedded.org> wrote:

> 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 --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
> +
> --
> 2.34.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#228000):
> https://lists.openembedded.org/g/openembedded-core/message/228000
> Mute This Topic: https://lists.openembedded.org/mt/116823455/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
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 
+