https://gcc.gnu.org/g:cde411950e91e0174a0134360d2eb138ca6821c6

commit r14-10393-gcde411950e91e0174a0134360d2eb138ca6821c6
Author: Richard Biener <rguent...@suse.de>
Date:   Sun Jun 30 13:07:14 2024 +0200

    tree-optimization/115694 - ICE with complex store rewrite
    
    The following adds a missed check when forwprop attempts to rewrite
    a complex store.
    
            PR tree-optimization/115694
            * tree-ssa-forwprop.cc (pass_forwprop::execute): Check the
            store is complex before rewriting it.
    
            * g++.dg/torture/pr115694.C: New testcase.
    
    (cherry picked from commit 543a5b9da964f821b9e723ed9c93d6cdca464d47)

Diff:
---
 gcc/testsuite/g++.dg/torture/pr115694.C | 13 +++++++++++++
 gcc/tree-ssa-forwprop.cc                |  2 ++
 2 files changed, 15 insertions(+)

diff --git a/gcc/testsuite/g++.dg/torture/pr115694.C 
b/gcc/testsuite/g++.dg/torture/pr115694.C
new file mode 100644
index 000000000000..bbce47decf83
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr115694.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+
+_Complex a;
+typedef struct {
+  double a[2];
+} b;
+void c(b);
+void d()
+{
+  _Complex b1 = a;
+  b t = __builtin_bit_cast (b, b1);
+  c(t);
+}
diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
index 05d42ccd3c61..abf71f0d3a03 100644
--- a/gcc/tree-ssa-forwprop.cc
+++ b/gcc/tree-ssa-forwprop.cc
@@ -3762,6 +3762,8 @@ pass_forwprop::execute (function *fun)
                  && gimple_store_p (use_stmt)
                  && !gimple_has_volatile_ops (use_stmt)
                  && is_gimple_assign (use_stmt)
+                 && (TREE_CODE (TREE_TYPE (gimple_assign_lhs (use_stmt)))
+                     == COMPLEX_TYPE)
                  && (TREE_CODE (gimple_assign_lhs (use_stmt))
                      != TARGET_MEM_REF))
                {

Reply via email to