From: aoliva Date: Wed, 8 Sep 2010 21:53:48 +0000 (+0000) Subject: PR debug/45419 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=87b8feeb617c30ff8ce25bc37593d5d4abc8c9e4;p=thirdparty%2Fgcc.git 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164031 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c121a35e462c..e02f98fbb610 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2010-09-08 Alexandre Oliva + + 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 PR target/44392 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index baac13f756a8..c9417037a4bc 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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: diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c index 44edbb071ddb..108a0d189375 100644 --- a/gcc/tree-pretty-print.c +++ b/gcc/tree-pretty-print.c @@ -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 diff --git a/gcc/tree.c b/gcc/tree.c index d696e96b5643..677e3bbf7e42 100644 --- a/gcc/tree.c +++ b/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