mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 05:40:26 +08:00
re PR debug/45419 (-fcompare-debug failure at -O3)
PR debug/45419 PR debug/45408 * tree-pretty-print.c (dump_generic_node): Disregard top-level qualifiers in otherwise equal MEM_REF pointer types. * fold-const.c (operand_equal_p): Compare pointer type of MEM_REFs. * tree.c (iterative_hash_expr): Hash the pointer type of MEM_REFs. From-SVN: r164031
This commit is contained in:
parent
0a7822a32b
commit
359bea1da4
@ -1,3 +1,12 @@
|
||||
2010-09-08 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR debug/45419
|
||||
PR debug/45408
|
||||
* tree-pretty-print.c (dump_generic_node): Disregard top-level
|
||||
qualifiers in otherwise equal MEM_REF pointer types.
|
||||
* fold-const.c (operand_equal_p): Compare pointer type of MEM_REFs.
|
||||
* tree.c (iterative_hash_expr): Hash the pointer type of MEM_REFs.
|
||||
|
||||
2010-09-08 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
|
||||
|
||||
PR target/44392
|
||||
|
@ -2591,14 +2591,17 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
|
||||
return OP_SAME (0);
|
||||
|
||||
case MEM_REF:
|
||||
/* Require equal access sizes. We can have incomplete types
|
||||
for array references of variable-sized arrays from the
|
||||
Fortran frontent though. */
|
||||
/* Require equal access sizes, and similar pointer types.
|
||||
We can have incomplete types for array references of
|
||||
variable-sized arrays from the Fortran frontent
|
||||
though. */
|
||||
return ((TYPE_SIZE (TREE_TYPE (arg0)) == TYPE_SIZE (TREE_TYPE (arg1))
|
||||
|| (TYPE_SIZE (TREE_TYPE (arg0))
|
||||
&& TYPE_SIZE (TREE_TYPE (arg1))
|
||||
&& operand_equal_p (TYPE_SIZE (TREE_TYPE (arg0)),
|
||||
TYPE_SIZE (TREE_TYPE (arg1)), flags)))
|
||||
&& (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg0, 1)))
|
||||
== TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg1, 1))))
|
||||
&& OP_SAME (0) && OP_SAME (1));
|
||||
|
||||
case ARRAY_REF:
|
||||
|
@ -809,8 +809,8 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
||||
== TYPE_MODE (TREE_TYPE (TREE_OPERAND (node, 1))))
|
||||
&& (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 0)))
|
||||
== TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (node, 1))))
|
||||
&& (TYPE_QUALS (TREE_TYPE (TREE_OPERAND (node, 0)))
|
||||
== TYPE_QUALS (TREE_TYPE (TREE_OPERAND (node, 1))))
|
||||
&& (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (node, 0)))
|
||||
== TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (node, 1))))
|
||||
/* Same value types ignoring qualifiers. */
|
||||
&& (TYPE_MAIN_VARIANT (TREE_TYPE (node))
|
||||
== TYPE_MAIN_VARIANT
|
||||
@ -829,9 +829,12 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
||||
}
|
||||
else
|
||||
{
|
||||
tree ptype;
|
||||
|
||||
pp_string (buffer, "MEM[");
|
||||
pp_string (buffer, "(");
|
||||
dump_generic_node (buffer, TREE_TYPE (TREE_OPERAND (node, 1)),
|
||||
ptype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (node, 1)));
|
||||
dump_generic_node (buffer, ptype,
|
||||
spc, flags | TDF_SLIM, false);
|
||||
pp_string (buffer, ")");
|
||||
dump_generic_node (buffer, TREE_OPERAND (node, 0),
|
||||
@ -1170,8 +1173,8 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
|
||||
== TYPE_MODE (TREE_TYPE (TREE_OPERAND (op0, 1))))
|
||||
&& (TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0, 0)))
|
||||
== TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (TREE_OPERAND (op0, 1))))
|
||||
&& (TYPE_QUALS (TREE_TYPE (TREE_OPERAND (op0, 0)))
|
||||
== TYPE_QUALS (TREE_TYPE (TREE_OPERAND (op0, 1))))
|
||||
&& (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (op0, 0)))
|
||||
== TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (op0, 1))))
|
||||
/* Same value types ignoring qualifiers. */
|
||||
&& (TYPE_MAIN_VARIANT (TREE_TYPE (op0))
|
||||
== TYPE_MAIN_VARIANT
|
||||
|
15
gcc/tree.c
15
gcc/tree.c
@ -6768,6 +6768,21 @@ iterative_hash_expr (const_tree t, hashval_t val)
|
||||
}
|
||||
return val;
|
||||
}
|
||||
case MEM_REF:
|
||||
{
|
||||
/* The type of the second operand is relevant, except for
|
||||
its top-level qualifiers. */
|
||||
tree type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (t, 1)));
|
||||
|
||||
val = iterative_hash_object (TYPE_HASH (type), val);
|
||||
|
||||
/* We could use the standard hash computation from this point
|
||||
on. */
|
||||
val = iterative_hash_object (code, val);
|
||||
val = iterative_hash_expr (TREE_OPERAND (t, 1), val);
|
||||
val = iterative_hash_expr (TREE_OPERAND (t, 0), val);
|
||||
return val;
|
||||
}
|
||||
case FUNCTION_DECL:
|
||||
/* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
|
||||
Otherwise nodes that compare equal according to operand_equal_p might
|
||||
|
Loading…
x
Reference in New Issue
Block a user