Commit 6d1a7fd4 by Richard Biener Committed by Richard Biener

re PR middle-end/89779 (internal compiler error: tree check: expected class…

re PR middle-end/89779 (internal compiler error: tree check: expected class ‘type’, have ‘exceptional’ (error_mark) in tree_nop_conversion_p, at tree.c:12798)

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.

	* gcc.dg/torture/pr89779.c: New testcase.

From-SVN: r269838
parent e2186cd8
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
......
......@@ -2973,11 +2973,6 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
|| 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
......
/* { 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);
}
......@@ -12812,13 +12812,10 @@ tree_nop_conversion (const_tree exp)
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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment