aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-10-21 07:07:06 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-10-21 07:07:06 +0000
commita20d03c88261b7d475db7c410c1018df326c67af (patch)
treedc2a148dd9df35d3f1ed9a36fe703517ace05d4c
parent924fae46b341e810ec5f1fa0e99b5f0cadeff7eb (diff)
downloadgcc-a20d03c88261b7d475db7c410c1018df326c67af.zip
gcc-a20d03c88261b7d475db7c410c1018df326c67af.tar.gz
gcc-a20d03c88261b7d475db7c410c1018df326c67af.tar.bz2
re PR c++/78051 (error: dead STMT in EH table when using -O2)
2016-10-21 Richard Biener <rguenther@suse.de> PR tree-optimization/78051 * tree-vrp.c (evrp_dom_walker::before_dom_children): Update stmt and mark replaced if folding did something. * g++.dg/torture/pr78051.C: New testcase. From-SVN: r241394
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr78051.C9
-rw-r--r--gcc/tree-vrp.c6
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bc1d9d1..7337094 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-10-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/78051
+ * tree-vrp.c (evrp_dom_walker::before_dom_children): Update stmt
+ and mark replaced if folding did something.
+
2016-10-21 David Edelsohn <dje.gcc@gmail.com>
* config/rs6000/rs6000.c (rs6000_assemble_visibility): Swap "internal"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 22993ad..8033762 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-10-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/78051
+ * g++.dg/torture/pr78051.C: New testcase.
+
2016-10-20 Bernd Edlinger <bernd.edlinger@hotmail.de>
* c-c++-common/wdate-time.c: Restored test case.
diff --git a/gcc/testsuite/g++.dg/torture/pr78051.C b/gcc/testsuite/g++.dg/torture/pr78051.C
new file mode 100644
index 0000000..ff28368
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr78051.C
@@ -0,0 +1,9 @@
+extern "C" {
+ typedef int FILE;
+ int *stdout;
+ int fputs(const char *, FILE *);
+}
+void print_packet() {
+ const char *color[]{"", "", ""};
+ fputs(color[2], stdout);
+}
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index c1750d0..9675ca2 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -10850,7 +10850,11 @@ evrp_dom_walker::before_dom_children (basic_block bb)
= replace_uses_in (stmt, op_with_constant_singleton_value_range);
if (fold_stmt (&gsi, follow_single_use_edges)
|| did_replace)
- update_stmt (gsi_stmt (gsi));
+ {
+ stmt = gsi_stmt (gsi);
+ update_stmt (stmt);
+ did_replace = true;
+ }
if (did_replace)
{