From: Daniel Berlin Date: Thu, 19 Jan 2006 00:28:07 +0000 (+0000) Subject: ipa-reference.c (check_operand): Allow FUNCTION_DECL. X-Git-Tag: releases/gcc-4.2.0~4758 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7dbca013b298ba0506921f40622ae17fe9442b99;p=thirdparty%2Fgcc.git ipa-reference.c (check_operand): Allow FUNCTION_DECL. 2006-01-18 Daniel Berlin * ipa-reference.c (check_operand): Allow FUNCTION_DECL. (look_for_address_of): Ditto. (ipa_init): Walk the function decls. (static_execute): Don't set readonly on FUNCTION_DECL's. From-SVN: r109932 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 349f8dcffa22..642a89154ce6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2006-01-18 Daniel Berlin + + * ipa-reference.c (check_operand): Allow FUNCTION_DECL. + (look_for_address_of): Ditto. + (ipa_init): Walk the function decls. + (static_execute): Don't set readonly on FUNCTION_DECL's. + 2006-01-18 Roger Sayle * config/i386/i386.md (shift spliter): Fix a a typo in the splitter diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c index ec8d3b8e5951..fe2f807d3e8b 100644 --- a/gcc/ipa-reference.c +++ b/gcc/ipa-reference.c @@ -286,7 +286,7 @@ check_operand (ipa_reference_local_vars_info_t local, { if (!t) return; - if ((TREE_CODE (t) == VAR_DECL) + if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == FUNCTION_DECL) && (has_proper_scope_for_analysis (t))) { if (checking_write) @@ -343,7 +343,7 @@ look_for_address_of (tree t) if (TREE_CODE (t) == ADDR_EXPR) { tree x = get_base_var (t); - if (TREE_CODE (x) == VAR_DECL) + if (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == FUNCTION_DECL) if (has_proper_scope_for_analysis (x)) bitmap_set_bit (module_statics_escape, DECL_UID (x)); } @@ -741,6 +741,7 @@ merge_callee_local_info (struct cgraph_node *target, static void ipa_init (void) { + struct cgraph_node *node; memory_identifier_string = build_string(7, "memory"); reference_vars_to_consider = @@ -751,6 +752,10 @@ ipa_init (void) module_statics_written = BITMAP_ALLOC (&ipa_obstack); all_module_statics = BITMAP_ALLOC (&ipa_obstack); + /* This will add NODE->DECL to the splay trees. */ + for (node = cgraph_nodes; node; node = node->next) + has_proper_scope_for_analysis (node->decl); + /* There are some shared nodes, in particular the initializers on static declarations. We do not need to scan them more than once since all we would be interested in are the addressof @@ -964,6 +969,11 @@ static_execute (void) { tree var = get_static_decl (index); + /* Readonly on a function decl is very different from the + variable. */ + if (TREE_CODE (var) == FUNCTION_DECL) + continue; + /* Ignore variables in named sections - changing TREE_READONLY changes the section flags, potentially causing conflicts with other variables in the same named section. */