diff options
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r-- | gcc/ipa-inline.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 413446b..012b326 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -396,6 +396,23 @@ can_inline_edge_p (struct cgraph_edge *e, bool report, e->inline_failed = CIF_SANITIZE_ATTRIBUTE_MISMATCH; inlinable = false; } + else if (profile_arc_flag + && (lookup_attribute ("no_profile_instrument_function", + DECL_ATTRIBUTES (caller->decl)) == NULL_TREE) + != (lookup_attribute ("no_profile_instrument_function", + DECL_ATTRIBUTES (callee->decl)) == NULL_TREE)) + { + cgraph_node *origin = caller; + while (origin->clone_of) + origin = origin->clone_of; + + if (!DECL_STRUCT_FUNCTION (origin->decl)->always_inline_functions_inlined) + { + e->inline_failed = CIF_UNSPECIFIED; + inlinable = false; + } + } + if (!inlinable && report) report_inline_failed_reason (e); return inlinable; |