48 lines
1.0 KiB
Diff
48 lines
1.0 KiB
Diff
|
2019-04-15 Richard Biener <rguenther@suse.de>
|
||
|
|
||
|
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;
|
||
|
+}
|