aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
authorPeter Bergner <bergner@vnet.ibm.com>2017-07-27 09:05:14 -0500
committerPeter Bergner <bergner@gcc.gnu.org>2017-07-27 09:05:14 -0500
commit27c8b49bfc23b658bc8ea90e653f76e26e856c43 (patch)
tree9d23ea79d7b73f3ad409865e9a94e8ad7bab590c /gcc/tree-cfg.c
parentb7675b592316cd5c2a972cb25c714fe85ec743c1 (diff)
downloadgcc-27c8b49bfc23b658bc8ea90e653f76e26e856c43.zip
gcc-27c8b49bfc23b658bc8ea90e653f76e26e856c43.tar.gz
gcc-27c8b49bfc23b658bc8ea90e653f76e26e856c43.tar.bz2
re PR middle-end/81564 (ICE in group_case_labels_stmt())
gcc/ PR middle-end/81564 * tree-cfg.c (group_case_labels_stmt): Handle already deleted blocks. gcc/testsuite/ PR middle-end/81564 * gcc.dg/pr81564.c: New test. From-SVN: r250628
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 83e4ee6..f664ffe 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -1701,8 +1701,9 @@ group_case_labels_stmt (gswitch *stmt)
gcc_assert (base_case);
base_bb = label_to_block (CASE_LABEL (base_case));
- /* Discard cases that have the same destination as the default case. */
- if (base_bb == default_bb)
+ /* Discard cases that have the same destination as the default case or
+ whose destiniation blocks have already been removed as unreachable. */
+ if (base_bb == NULL || base_bb == default_bb)
{
i++;
continue;