On 09/12/2017 01:43 AM, Martin Liška wrote:
> Hello.
>
> In transition to simple_case_node, I forgot to initialize m_high to m_low if
> a case
> does not have CASE_HIGH.
>
> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.
>
> Ready to be installed?
> Martin
>
> gcc/ChangeLog:
>
> 2017-09-11 Martin Liska <[email protected]>
>
> PR middle-end/82154
> * stmt.c (struct simple_case_node): Assign low to high when
> high is equal to null.
>
> gcc/testsuite/ChangeLog:
>
> 2017-09-11 Martin Liska <[email protected]>
>
> PR middle-end/82154
> * g++.dg/torture/pr82154.C: New test.
OK.
THough I have to wonder if we should unify the HIGH handling -- having
two different conventions is bound to be confusing.
In a CASE_LABEL_EXPR the CASE_HIGH can be NULL, which means the label
refers to a singleton value that is found in CASE_LOW.
That means we end up doing stuff like this:
if (CASE_HIGH (elt))
maxval = fold_convert (index_type, CASE_HIGH (elt));
else
maxval = fold_convert (index_type, CASE_LOW (elt));
You could legitimately argue for changing how this works for tree nodes
so that there's always a non-null CASE_HIGH.
jeff