From: hubicka Date: Sat, 28 Mar 2009 10:48:04 +0000 (+0000) Subject: * cgraph.c (cgraph_function_body_availability): Functions declared X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=cc76f102cee16abb2a551d50a3b20447302e3204;p=pf3gnuchains%2Fgcc-fork.git * cgraph.c (cgraph_function_body_availability): Functions declared inline are always safe to assume that it is not going to be replaced. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145174 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d9c59b8b33d..ce250d55bb0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-03-28 Jan Hubicka + + * 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 PR tree-optimization/38513 diff --git a/gcc/cgraph.c b/gcc/cgraph.c index b1eea0b080f..38de8e490d7 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -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;