aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
authorPeter Bergner <bergner@vnet.ibm.com>2017-05-12 12:13:07 -0500
committerPeter Bergner <bergner@gcc.gnu.org>2017-05-12 12:13:07 -0500
commit284d1f76e9b9411a30c43d3d366855debdb31f6a (patch)
tree2e623e97ac95c7598de3badd1c5781a98afa90e9 /gcc/tree-cfg.c
parentda55a299c5159a622bcf04bf3f97707f5335bcad (diff)
downloadgcc-284d1f76e9b9411a30c43d3d366855debdb31f6a.zip
gcc-284d1f76e9b9411a30c43d3d366855debdb31f6a.tar.gz
gcc-284d1f76e9b9411a30c43d3d366855debdb31f6a.tar.bz2
re PR middle-end/80707 (r247844 causes error: extra outgoing edge)
gcc/ PR middle-end/80707 * tree-cfg.c: Remove cfg edges of unreachable case statements. gcc/testsuite/ PR middle-end/80707 * g++.dg/pr80707.C: New test. From-SVN: r247984
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 77cb3d6..72c5284 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -1684,6 +1684,10 @@ group_case_labels_stmt (gswitch *stmt)
|| (EDGE_COUNT (base_bb->succs) == 0
&& gimple_seq_unreachable_p (bb_seq (base_bb))))
{
+ edge e;
+ if (base_bb != default_bb
+ && (e = find_edge (gimple_bb (stmt), base_bb)) != NULL)
+ remove_edge_and_dominated_blocks (e);
gimple_switch_set_label (stmt, i, NULL_TREE);
i++;
new_size--;