]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
cgraph.c (cgraph_function_body_availability): Functions declared inline are always...
authorJan Hubicka <jh@suse.cz>
Sat, 28 Mar 2009 10:48:04 +0000 (11:48 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 28 Mar 2009 10:48:04 +0000 (10:48 +0000)
* cgraph.c (cgraph_function_body_availability): Functions declared
inline are always safe to assume that it is not going to be replaced.

From-SVN: r145174

gcc/ChangeLog
gcc/cgraph.c

index d9c59b8b33d4e4fedf1b2d759a1836f853a092b5..ce250d55bb080327c207f08041939a4ac0f734d9 100644 (file)
@@ -1,3 +1,8 @@
+2009-03-28  Jan Hubicka  <jh@suse.cz>
+
+       * cgraph.c (cgraph_function_body_availability): Functions declared
+       inline are always safe to assume that it is not going to be replaced.
+
 2009-03-28  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/38513
index b1eea0b080fe7946352a5917e28fa60436d705ad..38de8e490d78b817b46ff75b2da027241b450ceb 100644 (file)
@@ -1429,6 +1429,11 @@ cgraph_function_body_availability (struct cgraph_node *node)
     avail = AVAIL_LOCAL;
   else if (!node->local.externally_visible)
     avail = AVAIL_AVAILABLE;
+  /* Inline functions are safe to be analyzed even if their sybol can
+     be overwritten at runtime.  It is not meaningful to enfore any sane
+     behaviour on replacing inline function by different body.  */
+  else if (DECL_DECLARED_INLINE_P (node->decl))
+    avail = AVAIL_AVAILABLE;
 
   /* If the function can be overwritten, return OVERWRITABLE.  Take
      care at least of two notable extensions - the COMDAT functions
@@ -1438,15 +1443,9 @@ cgraph_function_body_availability (struct cgraph_node *node)
 
      ??? Does the C++ one definition rule allow us to always return
      AVAIL_AVAILABLE here?  That would be good reason to preserve this
-     hook Similarly deal with extern inline functions - this is again
-     necessary to get C++ shared functions having keyed templates
-     right and in the C extension documentation we probably should
-     document the requirement of both versions of function (extern
-     inline and offline) having same side effect characteristics as
-     good optimization is what this optimization is about.  */
-
-  else if (!(*targetm.binds_local_p) (node->decl)
-          && !DECL_COMDAT (node->decl) && !DECL_EXTERNAL (node->decl))
+     bit.  */
+
+  else if (DECL_REPLACEABLE_P (node->decl) && !DECL_EXTERNAL (node->decl))
     avail = AVAIL_OVERWRITABLE;
   else avail = AVAIL_AVAILABLE;