From 8ba0479ece9a852e7a1029268a33a3d52277a7f8 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 25 Jun 2010 14:07:00 +0200 Subject: [PATCH] re PR tree-optimization/44539 (ICE: verify_ssa failed: type mismatch between an SSA_NAME and its symbol) PR tree-optimization/44539 * tree-cfgcleanup.c (fixup_noreturn_call): Call update_stmt even when the call doesn't have LHS, but has VDEF. * gcc.dg/pr44539.c: New test. From-SVN: r161374 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr44539.c | 29 +++++++++++++++++++++++++++++ gcc/tree-cfgcleanup.c | 3 +++ 4 files changed, 43 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr44539.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d56312a6f7c..64c82e2b1e5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-06-25 Jakub Jelinek + + PR tree-optimization/44539 + * tree-cfgcleanup.c (fixup_noreturn_call): Call update_stmt even when + the call doesn't have LHS, but has VDEF. + 2010-06-25 Joseph Myers * config/pa/pa.h (MODIFY_TARGET_NAME): Remove. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9a397e2d1ec..55b801910a9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-06-25 Jakub Jelinek + + PR tree-optimization/44539 + * gcc.dg/pr44539.c: New test. + 2010-06-25 Bernd Schmidt From Jim Wilson: diff --git a/gcc/testsuite/gcc.dg/pr44539.c b/gcc/testsuite/gcc.dg/pr44539.c new file mode 100644 index 00000000000..9cfff7a3ae5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr44539.c @@ -0,0 +1,29 @@ +/* PR tree-optimization/44539 */ +/* { dg-do compile } */ +/* { dg-options "-ftracer -freorder-blocks -O2" } */ + +void bar (int file); +extern int baz (void); + +void noret1 () +{ + bar (0); + __builtin_exit (0); +} + +void noret2 () +{ + __builtin_exit (0); +} + +void bar (int i) +{ + if (baz ()) + noret1 (i); +} + +void foo (int i) +{ + if (~i) bar (i); + i ? noret1 () : noret2 (); +} diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c index 7e7817403d5..7f8498a4483 100644 --- a/gcc/tree-cfgcleanup.c +++ b/gcc/tree-cfgcleanup.c @@ -591,6 +591,9 @@ fixup_noreturn_call (gimple stmt) update_stmt (stmt); changed = true; } + /* Similarly remove VDEF if there is any. */ + else if (gimple_vdef (stmt)) + update_stmt (stmt); return changed; }