> > +         /* Create chain of switch tests for each case.  */
> > +         tree switch_cond = NULL_TREE;
> > +         tree index = gimple_switch_index (sw);
> > +         for (unsigned i = 1; i < gimple_switch_num_labels (sw); i++)
> > +           {
> > +             tree label = gimple_switch_label (sw, i);
> > +             tree case_cond;
> > +             /* This currently cannot happen because tree-cfg lowers range
> > +                switches with a single destination to COND.  */
> 
> But it should also lower non-range switches with a single destination ...?
> See convert_single_case_switch.  You say
> 
>   switch (i)
>     {
>     case 1:
>     case 5 ... 7:
>       return 42;
>     default:
>       return 0;
>     }
> 
> doesn't hit here with a CASE_HIGH for the 5 ... 7 CASE_LABEL?

Yes it can actually happen. I'll correct the comment/description
and add a test case.

But your comment made me realize there is a major bug.

if_convertible_switch_p also needs to check that that the labels don't fall
through, so the the flow graph is diamond shape.  Need some easy way to 
verify that.

-Andi

Reply via email to