]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ipa-reference.c (check_operand): Allow FUNCTION_DECL.
authorDaniel Berlin <dberlin@dberlin.org>
Thu, 19 Jan 2006 00:28:07 +0000 (00:28 +0000)
committerDaniel Berlin <dberlin@gcc.gnu.org>
Thu, 19 Jan 2006 00:28:07 +0000 (00:28 +0000)
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

gcc/ChangeLog
gcc/ipa-reference.c

index 349f8dcffa223ac5d668670250d470185bafe6ca..642a89154ce6d5bfb37ccb182259cb4075b7a205 100644 (file)
@@ -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
index ec8d3b8e5951536dc75245f437b0bc01cd2ea1e0..fe2f807d3e8b9f4d05993ddef1b3d3ca6b4548ab 100644 (file)
@@ -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.  */