diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-02-16 20:22:57 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-02-16 20:22:57 +0100 |
commit | ed89033d7c15db7bbc3c6c6dfb9495ac263b3a73 (patch) | |
tree | 12b6d76fc0f117c75866f01aa2c9dc3604966d54 | |
parent | 7b909872f15f48482a23e41fe8093cb1f4425c74 (diff) | |
download | gcc-ed89033d7c15db7bbc3c6c6dfb9495ac263b3a73.zip gcc-ed89033d7c15db7bbc3c6c6dfb9495ac263b3a73.tar.gz gcc-ed89033d7c15db7bbc3c6c6dfb9495ac263b3a73.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cgraphclones.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/ipa/ipa-clone-1.c | 20 | ||||
-rw-r--r-- | gcc/trans-mem.c | 1 |
5 files changed, 40 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 061e034..9ef0d8c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +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 diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c index 2a7de2e..863081e 100644 --- a/gcc/cgraphclones.c +++ b/gcc/cgraphclones.c @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8af42fa..d5769b7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +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 diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-clone-1.c b/gcc/testsuite/gcc.dg/ipa/ipa-clone-1.c new file mode 100644 index 0000000..5ee8166 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/ipa-clone-1.c @@ -0,0 +1,20 @@ +/* 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" } } */ diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index 21fa497..146a975 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -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) |