From d021d274352e0f2d0ebefc499e8b248a3e27e945 Mon Sep 17 00:00:00 2001 From: Michael Meissner Date: Fri, 22 May 2009 21:51:12 +0000 Subject: [PATCH] Fix PR tree-optimization/40219 From-SVN: r147807 --- gcc/ChangeLog | 7 +++++++ gcc/tree.c | 12 +++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 32c00a6102d..68cbe584ade 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2009-05-21 Michael Meissner + + PR tree-optimization/40219 + * tree.c (iterative_hash_expr): Make sure the builtin function is + a normal builtin function and not a front end or back end builtin + before indexing into the built_in_decls array. + 2009-05-22 Richard Guenther PR middle-end/38964 diff --git a/gcc/tree.c b/gcc/tree.c index 2231b448950..f0e861cb5cd 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -5422,11 +5422,13 @@ iterative_hash_expr (const_tree t, hashval_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) && built_in_decls[DECL_FUNCTION_CODE (t)]) + /* 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. However, don't do this for machine specific + or front end builtins, since the function code is overloaded in those + cases. */ + if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL + && built_in_decls[DECL_FUNCTION_CODE (t)]) { t = built_in_decls[DECL_FUNCTION_CODE (t)]; code = TREE_CODE (t); -- 2.30.2