2019-04-15 Richard Biener PR tree-optimization/90071 * tree-ssa-reassoc.c (init_range_entry): Do not pick up abnormal operands from def stmts. * gcc.dg/torture/pr90071.c: New testcase. --- gcc/tree-ssa-reassoc.c (revision 270368) +++ gcc/tree-ssa-reassoc.c (revision 270369) @@ -2143,7 +2143,8 @@ init_range_entry (struct range_entry *r, exp_type = boolean_type_node; } - if (TREE_CODE (arg0) != SSA_NAME) + if (TREE_CODE (arg0) != SSA_NAME + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (arg0)) break; loc = gimple_location (stmt); switch (code) --- gcc/testsuite/gcc.dg/torture/pr90071.c (nonexistent) +++ gcc/testsuite/gcc.dg/torture/pr90071.c (revision 270369) @@ -0,0 +1,24 @@ +/* { dg-do compile } */ + +int a; +static int b; + +void +foo () +{ + int d; + int e = (int) (__INTPTR_TYPE__) &&f; + void *g = &&h; +h: ++e; + if (a) + i: goto *g; + for (;;) + { + e = 0; + if (b) + goto i; + } +f: + goto *({ d || e < 0 || e >= 2; }); + &e; +}