aboutsummaryrefslogtreecommitdiff
path: root/libbacktrace/dwarf.c
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2019-01-16 20:13:23 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2019-01-16 20:13:23 +0000
commit15b93db9ca258710e3abb43e2378ef3601e3a697 (patch)
tree843768dfbe9461304aa053363cc987e1a4fe8b18 /libbacktrace/dwarf.c
parent33b5a38c2dc961e9dd3e28ffd535d81c40d2b7bb (diff)
downloadgcc-15b93db9ca258710e3abb43e2378ef3601e3a697.zip
gcc-15b93db9ca258710e3abb43e2378ef3601e3a697.tar.gz
gcc-15b93db9ca258710e3abb43e2378ef3601e3a697.tar.bz2
Fix ICE due to "combine" creating unreachable EH blocks (PR target/88861)
PR target/88861 reports an ICE in "ce2" due to an unreachable basic block. The block becomes unreachable in "combine" when delete_noop_moves deletes an insn with a REG_EH_REGION, deleting the EH edge, the only edge leading to the basic block. Normally, rest_of_handle_combine would call cleanup_cfg, deleting unreachable blocks, if combine_instructions returns true, and combine_instructions does return true for some cases of edge-removal, but it doesn't for this case, leading to the ICE. This patch updates delete_noop_moves so that it returns true if it deletes any edges, and passes that through to combine_instructions, so that it too will return true if any edges were deleted, ensuring that cleanup_cfg will be called by rest_of_handle_combine for this case, deleting the now-unreachable block, and fixing the ICE. gcc/ChangeLog: PR target/88861 * combine.c (delete_noop_moves): Convert to "bool" return, returning true if any edges are eliminated. (combine_instructions): Also return true if delete_noop_moves returns true. gcc/testsuite/ChangeLog: PR target/88861 * g++.dg/torture/pr88861.C: New test. From-SVN: r267984
Diffstat (limited to 'libbacktrace/dwarf.c')
0 files changed, 0 insertions, 0 deletions