aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-05-16 15:08:48 +0200
committerMartin Liska <marxin@gcc.gnu.org>2019-05-16 13:08:48 +0000
commita61b003fbd290846feb08b6bf89bc5cf54fd87c3 (patch)
tree7cdde37690d5fb9388f37c132676bfe08419e29e /gcc
parent74a96dd28c997a55344c201baeed409e9e4ce7af (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/multiple_target.c5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/i386/pr90500-1.c8
-rw-r--r--gcc/testsuite/gcc.target/i386/pr90500-2.c7
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 } */