tree-optimization/99165 - fix ICE in store-merging w/ non-call EH
authorRichard Biener <rguenther@suse.de>
Mon, 22 Feb 2021 07:36:55 +0000 (08:36 +0100)
committerRichard Biener <rguenther@suse.de>
Mon, 22 Feb 2021 07:38:14 +0000 (08:38 +0100)
This adds a missing accumulation to ret.

2021-02-22  Richard Biener  <rguenther@suse.de>

PR tree-optimization/99165
* gimple-ssa-store-merging.c (pass_store_merging::process_store):
Accumulate changed to ret.

* g++.dg/pr99165.C: New testcase.

gcc/gimple-ssa-store-merging.c
gcc/testsuite/g++.dg/pr99165.C [new file with mode: 0644]

index b4c5e8e..213c155 100644 (file)
@@ -5230,7 +5230,7 @@ pass_store_merging::process_store (gimple *stmt)
          if (idx >= (unsigned)param_max_store_chains_to_track
              || (n_stores + (*e)->m_store_info.length ()
                  > (unsigned)param_max_stores_to_track))
-           terminate_and_process_chain (*e);
+           ret |= terminate_and_process_chain (*e);
          else
            {
              n_stores += (*e)->m_store_info.length ();
diff --git a/gcc/testsuite/g++.dg/pr99165.C b/gcc/testsuite/g++.dg/pr99165.C
new file mode 100644 (file)
index 0000000..70ffd03
--- /dev/null
@@ -0,0 +1,7 @@
+// { dg-do compile }
+// { dg-options "-O2 -fnon-call-exceptions --param=max-stores-to-track=2" }
+
+struct A {
+  A() : i() {}
+  int i;
+} *ap2 = new A[3];