diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 10de8a5f31e..a5f9c5d49d7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2004-12-23 Dale Johannesen + + * tree.c (iterative_hash_expr): Canonicalize builtins. + 2004-12-23 Alexandre Oliva PR target/16819 diff --git a/gcc/tree.c b/gcc/tree.c index 572b8804d56..d81abb2df9d 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -4130,12 +4130,24 @@ iterative_hash_expr (tree t, hashval_t val) for (; t; t = TREE_CHAIN (t)) val = iterative_hash_expr (TREE_VALUE (t), 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 get different + hash codes. */ + if (DECL_BUILT_IN (t)) + { + val = iterative_hash_pointer (built_in_decls[DECL_FUNCTION_CODE (t)], + val); + return val; + } + /* else FALL THROUGH */ default: class = TREE_CODE_CLASS (code); if (class == tcc_declaration) { - /* Decls we can just compare by pointer. */ + /* Otherwise, we can just compare decls by pointer. */ val = iterative_hash_pointer (t, val); } else