Commit 6c779727 by Ilya Enkovich Committed by Ilya Enkovich

lto-partition.c (privatize_symbol_name): Correctly privatize instrumentation clones.

gcc/

	* lto/lto-partition.c (privatize_symbol_name): Correctly
	privatize instrumentation clones.

gcc/testsuite/

	* gcc.dg/lto/lto.exp: Load mpx-dg.exp.
	* gcc.dg/lto/chkp-privatize_0.c: New.
	* gcc.dg/lto/chkp-privatize_1.c: New.

From-SVN: r218508
parent 6a73516d
2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com> 2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
* lto/lto-partition.c (privatize_symbol_name): Correctly
privatize instrumentation clones.
2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
* lto-cgraph.c (input_cgraph_1): Don't break existing * lto-cgraph.c (input_cgraph_1): Don't break existing
instrumentation clone references. instrumentation clone references.
* lto/lto-symtab.c (lto_cgraph_replace_node): Redirect * lto/lto-symtab.c (lto_cgraph_replace_node): Redirect
...@@ -787,8 +787,16 @@ static bool ...@@ -787,8 +787,16 @@ static bool
privatize_symbol_name (symtab_node *node) privatize_symbol_name (symtab_node *node)
{ {
tree decl = node->decl; tree decl = node->decl;
const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
cgraph_node *cnode; const char *name;
/* If we want to privatize instrumentation clone
then we need to change original function name
which is used via transparent alias chain. */
if (cnode && cnode->instrumentation_clone)
decl = cnode->orig_decl;
name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
/* Our renaming machinery do not handle more than one change of assembler name. /* Our renaming machinery do not handle more than one change of assembler name.
We should not need more than one anyway. */ We should not need more than one anyway. */
...@@ -821,15 +829,20 @@ privatize_symbol_name (symtab_node *node) ...@@ -821,15 +829,20 @@ privatize_symbol_name (symtab_node *node)
(DECL_ASSEMBLER_NAME (decl))); (DECL_ASSEMBLER_NAME (decl)));
/* We could change name which is a target of transparent alias /* We could change name which is a target of transparent alias
chain of instrumented function name. Fix alias chain if so .*/ chain of instrumented function name. Fix alias chain if so .*/
if ((cnode = dyn_cast <cgraph_node *> (node)) if (cnode)
&& !cnode->instrumentation_clone
&& cnode->instrumented_version
&& cnode->instrumented_version->orig_decl == decl)
{ {
tree iname = DECL_ASSEMBLER_NAME (cnode->instrumented_version->decl); tree iname = NULL_TREE;
if (cnode->instrumentation_clone)
gcc_assert (IDENTIFIER_TRANSPARENT_ALIAS (iname)); iname = DECL_ASSEMBLER_NAME (cnode->decl);
TREE_CHAIN (iname) = DECL_ASSEMBLER_NAME (decl); else if (cnode->instrumented_version
&& cnode->instrumented_version->orig_decl == decl)
iname = DECL_ASSEMBLER_NAME (cnode->instrumented_version->decl);
if (iname)
{
gcc_assert (IDENTIFIER_TRANSPARENT_ALIAS (iname));
TREE_CHAIN (iname) = DECL_ASSEMBLER_NAME (decl);
}
} }
if (symtab->dump_file) if (symtab->dump_file)
fprintf (symtab->dump_file, fprintf (symtab->dump_file,
......
2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com> 2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
* gcc.dg/lto/lto.exp: Load mpx-dg.exp.
* gcc.dg/lto/chkp-privatize_0.c: New.
* gcc.dg/lto/chkp-privatize_1.c: New.
2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
PR bootstrap/63995 PR bootstrap/63995
* g++.dg/dg.exp: Add mpx-dg.exp. * g++.dg/dg.exp: Add mpx-dg.exp.
* g++.dg/pr63995-1.C: New. * g++.dg/pr63995-1.C: New.
......
/* { dg-lto-do link } */
/* { dg-require-effective-target mpx { target { i?86-*-* x86_64-*-* } } } */
/* { dg-lto-options { { -fPIC -flto -flto-partition=max -fcheck-pointer-bounds -mmpx } } } */
static int
__attribute__ ((noinline))
func1 (int i)
{
return i + 2;
}
extern int func2 (int i);
int
main (int argc, char **argv)
{
return func1 (argc) + func2 (argc) + 1;
}
int func1 = 10;
int
func2 (int i)
{
func1++;
return i + func1;
}
...@@ -30,6 +30,7 @@ if $tracelevel then { ...@@ -30,6 +30,7 @@ if $tracelevel then {
# Load procedures from common libraries. # Load procedures from common libraries.
load_lib standard.exp load_lib standard.exp
load_lib gcc.exp load_lib gcc.exp
load_lib mpx-dg.exp
# Load the language-independent compabibility support procedures. # Load the language-independent compabibility support procedures.
load_lib lto.exp load_lib lto.exp
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment