diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-06-25 14:07:00 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-06-25 14:07:00 +0200 |
commit | 8ba0479ece9a852e7a1029268a33a3d52277a7f8 (patch) | |
tree | c9ad25da1f5b72e7990399b048ef68e5dc2a6d21 /gcc | |
parent | 47d660fbccfa16d612d09eeb7e44bf683e1526e8 (diff) | |
download | gcc-8ba0479ece9a852e7a1029268a33a3d52277a7f8.zip gcc-8ba0479ece9a852e7a1029268a33a3d52277a7f8.tar.gz gcc-8ba0479ece9a852e7a1029268a33a3d52277a7f8.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr44539.c | 29 | ||||
-rw-r--r-- | gcc/tree-cfgcleanup.c | 3 |
4 files changed, 43 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d56312a..64c82e2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-06-25 Jakub Jelinek <jakub@redhat.com> + + 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 <joseph@codesourcery.com> * config/pa/pa.h (MODIFY_TARGET_NAME): Remove. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9a397e2..55b8019 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-06-25 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/44539 + * gcc.dg/pr44539.c: New test. + 2010-06-25 Bernd Schmidt <bernds@codesourcery.com> From Jim Wilson: diff --git a/gcc/testsuite/gcc.dg/pr44539.c b/gcc/testsuite/gcc.dg/pr44539.c new file mode 100644 index 0000000..9cfff7a --- /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 7e78174..7f8498a 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; } |