Hi. Now we should not meet a degenerated gswitch statements.
Patch can bootstrap on x86_64-linux-gnu and survives regression tests. Ready to be installed? Martin gcc/ChangeLog: 2018-08-27 Martin Liska <mli...@suse.cz> * tree-cfg.c (find_taken_edge_switch_expr): Replace not possible condition with assert. * tree-switch-conversion.c (switch_conversion::expand): Likewise. --- gcc/tree-cfg.c | 17 +++++++---------- gcc/tree-switch-conversion.c | 9 +-------- 2 files changed, 8 insertions(+), 18 deletions(-)
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index cf12cb1f391..338967f39f7 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -2443,17 +2443,14 @@ find_taken_edge_switch_expr (const gswitch *switch_stmt, tree val) edge e; tree taken_case; - if (gimple_switch_num_labels (switch_stmt) == 1) - taken_case = gimple_switch_default_label (switch_stmt); + gcc_assert (gimple_switch_num_labels (switch_stmt) >= 2); + if (val == NULL_TREE) + val = gimple_switch_index (switch_stmt); + if (TREE_CODE (val) != INTEGER_CST) + return NULL; else - { - if (val == NULL_TREE) - val = gimple_switch_index (switch_stmt); - if (TREE_CODE (val) != INTEGER_CST) - return NULL; - else - taken_case = find_case_label_for_value (switch_stmt, val); - } + taken_case = find_case_label_for_value (switch_stmt, val); + dest_bb = label_to_block (cfun, CASE_LABEL (taken_case)); e = find_edge (gimple_bb (switch_stmt), dest_bb); diff --git a/gcc/tree-switch-conversion.c b/gcc/tree-switch-conversion.c index a31ff94b895..7e4f34c71f8 100644 --- a/gcc/tree-switch-conversion.c +++ b/gcc/tree-switch-conversion.c @@ -913,14 +913,7 @@ switch_conversion::expand (gswitch *swtch) /* Group case labels so that we get the right results from the heuristics that decide on the code generation approach for this switch. */ m_cfg_altered |= group_case_labels_stmt (swtch); - - /* If this switch is now a degenerate case with only a default label, - there is nothing left for us to do. */ - if (gimple_switch_num_labels (swtch) < 2) - { - m_reason = "switch is a degenerate case"; - return; - } + gcc_assert (gimple_switch_num_labels (swtch) >= 2); collect (swtch);