diff options
author | Richard Biener <rguenther@suse.de> | 2017-10-27 08:03:16 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-10-27 08:03:16 +0000 |
commit | 830717d0a3ae6e19b8d783f9f3481945772e29dc (patch) | |
tree | db245634f0b01165535d05420a2efd868a1e4a02 | |
parent | 22be0d084c010c8c798f397d628759d259b15a92 (diff) | |
download | gcc-830717d0a3ae6e19b8d783f9f3481945772e29dc.zip gcc-830717d0a3ae6e19b8d783f9f3481945772e29dc.tar.gz gcc-830717d0a3ae6e19b8d783f9f3481945772e29dc.tar.bz2 |
re PR middle-end/81659 (ICE in verify_dominators, at dominance.c:1184)
2017-10-27 Richard Biener <rguenther@suse.de>
PR middle-end/81659
* tree-eh.c (pass_lower_eh_dispatch::execute): Free dominator
info when we redirected EH.
* g++.dg/torture/pr81659.C: New testcase.
From-SVN: r254136
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr81659.C | 19 | ||||
-rw-r--r-- | gcc/tree-eh.c | 5 |
4 files changed, 34 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e9418ee..5f33699 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-10-27 Richard Biener <rguenther@suse.de> + + PR middle-end/81659 + * tree-eh.c (pass_lower_eh_dispatch::execute): Free dominator + info when we redirected EH. + 2017-10-26 Michael Collison <michael.collison@arm.com> * config/aarch64/aarch64.md(<optab>_trunc><vf><GPI:mode>2): diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a545b7f..bafe8fd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-10-27 Richard Biener <rguenther@suse.de> + + PR middle-end/81659 + * g++.dg/torture/pr81659.C: New testcase. + 2017-10-26 Michael Collison <michael.collison@arm.com> * gcc.target/aarch64/fix_trunc1.c: New testcase. diff --git a/gcc/testsuite/g++.dg/torture/pr81659.C b/gcc/testsuite/g++.dg/torture/pr81659.C new file mode 100644 index 0000000..3696957 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr81659.C @@ -0,0 +1,19 @@ +// { dg-do compile } + +void +a (int b) +{ + if (b) + throw; + try + { + a (3); + } + catch (int) + { + } + catch (int) + { + } +} + diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c index e255e08..1b0612b 100644 --- a/gcc/tree-eh.c +++ b/gcc/tree-eh.c @@ -3779,7 +3779,10 @@ pass_lower_eh_dispatch::execute (function *fun) } if (redirected) - delete_unreachable_blocks (); + { + free_dominance_info (CDI_DOMINATORS); + delete_unreachable_blocks (); + } return flags; } |