diff options
author | Martin Liska <mliska@suse.cz> | 2019-05-16 15:08:48 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-05-16 13:08:48 +0000 |
commit | a61b003fbd290846feb08b6bf89bc5cf54fd87c3 (patch) | |
tree | 7cdde37690d5fb9388f37c132676bfe08419e29e /gcc | |
parent | 74a96dd28c997a55344c201baeed409e9e4ce7af (diff) | |
download | gcc-a61b003fbd290846feb08b6bf89bc5cf54fd87c3.zip gcc-a61b003fbd290846feb08b6bf89bc5cf54fd87c3.tar.gz gcc-a61b003fbd290846feb08b6bf89bc5cf54fd87c3.tar.bz2 |
Do not allow target_clones with alias attr (PR lto/90500).
2019-05-16 Martin Liska <mliska@suse.cz>
PR lto/90500
* multiple_target.c (expand_target_clones): Do not allow
target_clones being used with a symbol that is an alias.
2019-05-16 Martin Liska <mliska@suse.cz>
PR lto/90500
* gcc.target/i386/pr90500-1.c: New test.
* gcc.target/i386/pr90500-2.c: New test.
From-SVN: r271289
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/multiple_target.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr90500-1.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr90500-2.c | 7 |
5 files changed, 31 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index df8135b..dd646d4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-05-16 Martin Liska <mliska@suse.cz> + + PR lto/90500 + * multiple_target.c (expand_target_clones): Do not allow + target_clones being used with a symbol that is an alias. + 2019-05-16 Vladislav Ivanishin <vlad@ispras.ru> PR tree-optimization/90394 diff --git a/gcc/multiple_target.c b/gcc/multiple_target.c index 0a87241..fa194d4 100644 --- a/gcc/multiple_target.c +++ b/gcc/multiple_target.c @@ -356,7 +356,7 @@ expand_target_clones (struct cgraph_node *node, bool definition) } if (node->definition - && !tree_versionable_function_p (node->decl)) + && (node->alias || !tree_versionable_function_p (node->decl))) { auto_diagnostic_group d; error_at (DECL_SOURCE_LOCATION (node->decl), @@ -365,6 +365,9 @@ expand_target_clones (struct cgraph_node *node, bool definition) if (lookup_attribute ("noclone", DECL_ATTRIBUTES (node->decl))) reason = G_("function %q+F can never be copied " "because it has %<noclone%> attribute"); + else if (node->alias) + reason + = "%<target_clones%> cannot be combined with %<alias%> attribute"; else reason = copy_forbidden (DECL_STRUCT_FUNCTION (node->decl)); if (reason) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d7af875..36dbb1b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-05-16 Martin Liska <mliska@suse.cz> + + PR lto/90500 + * gcc.target/i386/pr90500-1.c: New test. + * gcc.target/i386/pr90500-2.c: New test. + 2019-05-16 Vladislav Ivanishin <vlad@ispras.ru> PR tree-optimization/90394 diff --git a/gcc/testsuite/gcc.target/i386/pr90500-1.c b/gcc/testsuite/gcc.target/i386/pr90500-1.c new file mode 100644 index 0000000..7ac6a73 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr90500-1.c @@ -0,0 +1,8 @@ +/* PR middle-end/84723 */ +/* { dg-do compile } */ +/* { dg-require-ifunc } */ + +__attribute__((target_clones("arch=haswell", "default"))) int __tanh() {} +__typeof(__tanh) tanhf64 __attribute__((alias("__tanh")))/* { dg-error "clones for .target_clones. attribute cannot be created" } */ + /* { dg-message "'target_clones' cannot be combined with 'alias' attribute" "" { target *-*-* } .-1 } */ +__attribute__((__copy__(__tanh))); diff --git a/gcc/testsuite/gcc.target/i386/pr90500-2.c b/gcc/testsuite/gcc.target/i386/pr90500-2.c new file mode 100644 index 0000000..0fafb8a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr90500-2.c @@ -0,0 +1,7 @@ +/* PR middle-end/84723 */ +/* { dg-do compile } */ +/* { dg-require-ifunc } */ + +__attribute__((target_clones("arch=haswell", "default"))) int __tanh() {} +__typeof(__tanh) tanhf64 __attribute__((alias("__tanh"),target_clones("arch=haswell", "default"))); /* { dg-error "clones for .target_clones. attribute cannot be created" } */ + /* { dg-message "'target_clones' cannot be combined with 'alias' attribute" "" { target *-*-* } .-1 } */ |