tree-optimization/99165 - fix ICE in store-merging w/ non-call EH

Message ID nycvar.YFH.7.76.2102220929090.3867@elmra.sevgm.obk
State New
Headers show
Series
  • tree-optimization/99165 - fix ICE in store-merging w/ non-call EH
Related show

Commit Message

Richard Biener Feb. 22, 2021, 8:29 a.m.
This adds a missing accumulation to ret.

Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.

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 | 2 +-
 gcc/testsuite/g++.dg/pr99165.C | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/pr99165.C

-- 
2.26.2

Patch

diff --git a/gcc/gimple-ssa-store-merging.c b/gcc/gimple-ssa-store-merging.c
index b4c5e8eb9a8..213c1551d39 100644
--- a/gcc/gimple-ssa-store-merging.c
+++ b/gcc/gimple-ssa-store-merging.c
@@ -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
index 00000000000..70ffd0345cf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr99165.C
@@ -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];