Hi,

Before any instrumentation happens, instrumentation clones do not actually have 
any uses and thus may be removed.  This patch fixes it by forbiding removal of 
not instrumented instrumentation clones.

Bootstrapped and tested on linux-x86_64.

Thanks,
Ilya
--
gcc/

2014-05-30  Ilya Enkovich  <ilya.enkov...@intel.com>

        * cgraph.c (cgraph_can_remove_if_no_direct_calls_and_refs_p): Keep
        all not instrumented instrumentation clones alive.


diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 6210c68..1f684c2 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -2425,6 +2425,12 @@ bool
 cgraph_can_remove_if_no_direct_calls_and_refs_p (struct cgraph_node *node)
 {
   gcc_assert (!node->global.inlined_to);
+  /* Instrumentation clones should not be removed before
+     instrumentation happens.  New callers may appear after
+     instrumentation.  */
+  if (node->instrumentation_clone
+      && !chkp_function_instrumented_p (node->decl))
+    return false;
   /* Extern inlines can always go, we will use the external definition.  */
   if (DECL_EXTERNAL (node->decl))
     return true;

Reply via email to