2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-15 16:10:41 +08:00

cgraph.c (cgraph_function_body_availability): Functions declared inline are always safe to assume that it is not going to be...

* 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
This commit is contained in:
Jan Hubicka 2009-03-28 11:48:04 +01:00 committed by Jan Hubicka
parent 6cdb0ee365
commit 4a371c8d8f
2 changed files with 12 additions and 8 deletions

@ -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

@ -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. */
bit. */
else if (!(*targetm.binds_local_p) (node->decl)
&& !DECL_COMDAT (node->decl) && !DECL_EXTERNAL (node->decl))
else if (DECL_REPLACEABLE_P (node->decl) && !DECL_EXTERNAL (node->decl))
avail = AVAIL_OVERWRITABLE;
else avail = AVAIL_AVAILABLE;