gcc/gcc9-pr90071.patch

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;
+}