aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2006-01-19 00:28:07 +0000
committerDaniel Berlin <dberlin@gcc.gnu.org>2006-01-19 00:28:07 +0000
commit7dbca013b298ba0506921f40622ae17fe9442b99 (patch)
tree316d8ff0fe2b1de172204faffd748aa6915642e6 /gcc
parentdb08384acf11b58c48b27fc236905fc609a46180 (diff)
downloadgcc-7dbca013b298ba0506921f40622ae17fe9442b99.zip
gcc-7dbca013b298ba0506921f40622ae17fe9442b99.tar.gz
gcc-7dbca013b298ba0506921f40622ae17fe9442b99.tar.bz2
ipa-reference.c (check_operand): Allow FUNCTION_DECL.
2006-01-18 Daniel Berlin <dberlin@dberlin.org> * 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/ipa-reference.c14
2 files changed, 19 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 349f8dc..642a891 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2006-01-18 Daniel Berlin <dberlin@dberlin.org>
+
+ * 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 <roger@eyesopen.com>
* 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 ec8d3b8..fe2f807 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. */