Commit a61b003f by Martin Liska Committed by Martin Liska

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
parent 74a96dd2
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> 2019-05-16 Vladislav Ivanishin <vlad@ispras.ru>
PR tree-optimization/90394 PR tree-optimization/90394
......
...@@ -356,7 +356,7 @@ expand_target_clones (struct cgraph_node *node, bool definition) ...@@ -356,7 +356,7 @@ expand_target_clones (struct cgraph_node *node, bool definition)
} }
if (node->definition if (node->definition
&& !tree_versionable_function_p (node->decl)) && (node->alias || !tree_versionable_function_p (node->decl)))
{ {
auto_diagnostic_group d; auto_diagnostic_group d;
error_at (DECL_SOURCE_LOCATION (node->decl), error_at (DECL_SOURCE_LOCATION (node->decl),
...@@ -365,6 +365,9 @@ expand_target_clones (struct cgraph_node *node, bool definition) ...@@ -365,6 +365,9 @@ expand_target_clones (struct cgraph_node *node, bool definition)
if (lookup_attribute ("noclone", DECL_ATTRIBUTES (node->decl))) if (lookup_attribute ("noclone", DECL_ATTRIBUTES (node->decl)))
reason = G_("function %q+F can never be copied " reason = G_("function %q+F can never be copied "
"because it has %<noclone%> attribute"); "because it has %<noclone%> attribute");
else if (node->alias)
reason
= "%<target_clones%> cannot be combined with %<alias%> attribute";
else else
reason = copy_forbidden (DECL_STRUCT_FUNCTION (node->decl)); reason = copy_forbidden (DECL_STRUCT_FUNCTION (node->decl));
if (reason) if (reason)
......
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> 2019-05-16 Vladislav Ivanishin <vlad@ispras.ru>
PR tree-optimization/90394 PR tree-optimization/90394
......
/* 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)));
/* 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 } */
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