+2019-03-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/89779
+ * tree.c (tree_nop_conversion): Consolidate and fix defensive
+ checks with respect to released SSA names now having error_mark_node
+ type.
+ * fold-const.c (operand_equal_p): Likewise.
+
2019-03-20 Andreas Krebbel <krebbel@linux.ibm.com>
PR target/89775
|| TREE_TYPE (arg1) == error_mark_node)
return 0;
- /* Similar, if either does not have a type (like a released SSA name),
- they aren't equal. */
- if (!TREE_TYPE (arg0) || !TREE_TYPE (arg1))
- return 0;
-
/* We cannot consider pointers to different address space equal. */
if (POINTER_TYPE_P (TREE_TYPE (arg0))
&& POINTER_TYPE_P (TREE_TYPE (arg1))
+2019-03-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/89779
+ * gcc.dg/torture/pr89779.c: New testcase.
+
2019-03-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/78645
--- /dev/null
+/* { dg-do compile } */
+
+typedef int a;
+void h(a);
+void c(a *d, int b)
+{
+ int e, f, g;
+ for (; e; e++)
+ for (f = 0; f < 4; f++)
+ if (d)
+ for (g = e + 1; g; g++)
+ h(d[g]);
+}
+void i()
+{
+ a *j;
+ int k, l;
+ for (; k; k++)
+ c(j, l);
+}
if (!CONVERT_EXPR_P (exp)
&& TREE_CODE (exp) != NON_LVALUE_EXPR)
return false;
- if (TREE_OPERAND (exp, 0) == error_mark_node)
- return false;
outer_type = TREE_TYPE (exp);
inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
-
- if (!inner_type)
+ if (!inner_type || inner_type == error_mark_node)
return false;
return tree_nop_conversion_p (outer_type, inner_type);