Commit ed89033d by Jakub Jelinek Committed by Jakub Jelinek

re PR ipa/64963 (IPA Cloning/Splitting does not copy function section attributes…

re PR ipa/64963 (IPA Cloning/Splitting does not copy function section attributes resulting in kernel miscompilation)

	PR ipa/64963
	* cgraphclones.c (cgraph_node::create_virtual_clone): Copy
	section if not linkonce.  Fix up formatting.
	(cgraph_node::create_version_clone_with_body): Copy section.
	* trans-mem.c (ipa_tm_create_version): Likewise.

	* gcc.dg/ipa/ipa-clone-1.c: New test.

Co-Authored-By: James Greenhalgh <james.greenhalgh@arm.com>

From-SVN: r220742
parent 7b909872
2015-02-16 Jakub Jelinek <jakub@redhat.com>
James Greenhalgh <james.greenhalgh@arm.com>
PR ipa/64963
* cgraphclones.c (cgraph_node::create_virtual_clone): Copy
section if not linkonce. Fix up formatting.
(cgraph_node::create_version_clone_with_body): Copy section.
* trans-mem.c (ipa_tm_create_version): Likewise.
2015-02-16 Richard Biener <rguenther@suse.de>
PR tree-optimization/65077
......
......@@ -577,7 +577,7 @@ cgraph_node::create_virtual_clone (vec<cgraph_edge *> redirect_callers,
char *name;
if (!in_lto_p)
gcc_checking_assert (tree_versionable_function_p (old_decl));
gcc_checking_assert (tree_versionable_function_p (old_decl));
gcc_assert (local.can_change_signature || !args_to_skip);
......@@ -617,6 +617,8 @@ cgraph_node::create_virtual_clone (vec<cgraph_edge *> redirect_callers,
ABI support for this. */
set_new_clone_decl_and_node_flags (new_node);
new_node->clone.tree_map = tree_map;
if (!DECL_ONE_ONLY (old_decl))
new_node->set_section (get_section ());
/* Clones of global symbols or symbols with unique names are unique. */
if ((TREE_PUBLIC (old_decl)
......@@ -1009,6 +1011,7 @@ cgraph_node::create_version_clone_with_body
new_version_node->externally_visible = 0;
new_version_node->local.local = 1;
new_version_node->lowered = true;
new_version_node->set_section (get_section ());
/* Clones of global symbols or symbols with unique names are unique. */
if ((TREE_PUBLIC (old_decl)
&& !DECL_EXTERNAL (old_decl)
......
2015-02-16 Jakub Jelinek <jakub@redhat.com>
James Greenhalgh <james.greenhalgh@arm.com>
PR ipa/64963
* gcc.dg/ipa/ipa-clone-1.c: New test.
2015-02-16 Richard Biener <rguenther@suse.de>
PR tree-optimization/65077
......
/* PR ipa/64693 */
/* { dg-do compile } */
/* { dg-require-named-sections "" } */
/* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp" } */
static int __attribute__ ((noinline, section ("test_section")))
foo (int arg)
{
return 7 * arg;
}
int
bar (int arg)
{
return foo (5);
}
/* { dg-final { scan-assembler "test_section" } } */
/* { dg-final { scan-ipa-dump "Creating a specialized node of foo" "cp" } } */
/* { dg-final { cleanup-ipa-dump "cp" } } */
......@@ -4967,6 +4967,7 @@ ipa_tm_create_version (struct cgraph_node *old_node)
new_node->externally_visible = old_node->externally_visible;
new_node->lowered = true;
new_node->tm_clone = 1;
new_node->set_section (old_node->get_section ());
get_cg_data (&old_node, true)->clone = new_node;
if (old_node->get_availability () >= AVAIL_INTERPOSABLE)
......
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