Mercurial > hg > CbC > CbC_llvm
comparison clang/test/Sema/attr-target-mv.c @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children | 0572611fdcc8 |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 // RUN: %clang_cc1 -triple x86_64-linux-gnu -fsyntax-only -verify %s | |
2 | |
3 void __attribute__((target("sse4.2"))) no_default(void); | |
4 void __attribute__((target("arch=sandybridge"))) no_default(void); | |
5 | |
6 void use1(void){ | |
7 // expected-error@+1 {{no matching function for call to 'no_default'}} | |
8 no_default(); | |
9 } | |
10 | |
11 void __attribute__((target("sse4.2"))) has_def(void); | |
12 void __attribute__((target("default"))) has_def(void); | |
13 | |
14 void use2(void){ | |
15 // expected-error@+2 {{reference to overloaded function could not be resolved; did you mean to call it?}} | |
16 // expected-note@-4 {{possible target for call}} | |
17 +has_def; | |
18 } | |
19 | |
20 int __attribute__((target("sse4.2"))) no_proto(); | |
21 // expected-error@-1 {{multiversioned function must have a prototype}} | |
22 // expected-note@+1 {{function multiversioning caused by this declaration}} | |
23 int __attribute__((target("arch=sandybridge"))) no_proto(); | |
24 | |
25 // The following should all be legal, since they are just redeclarations. | |
26 int __attribute__((target("sse4.2"))) redecl1(void); | |
27 int __attribute__((target("sse4.2"))) redecl1(void) { return 1; } | |
28 int __attribute__((target("arch=sandybridge"))) redecl1(void) { return 2; } | |
29 | |
30 int __attribute__((target("sse4.2"))) redecl2(void) { return 1; } | |
31 int __attribute__((target("sse4.2"))) redecl2(void); | |
32 int __attribute__((target("arch=sandybridge"))) redecl2(void) { return 2; } | |
33 | |
34 int __attribute__((target("sse4.2"))) redecl3(void) { return 0; } | |
35 int __attribute__((target("arch=ivybridge"))) redecl3(void) { return 1; } | |
36 int __attribute__((target("arch=sandybridge"))) redecl3(void); | |
37 int __attribute__((target("arch=sandybridge"))) redecl3(void) { return 2; } | |
38 | |
39 int __attribute__((target("sse4.2"))) redecl4(void) { return 1; } | |
40 int __attribute__((target("arch=sandybridge"))) redecl4(void) { return 2; } | |
41 int __attribute__((target("arch=sandybridge"))) redecl4(void); | |
42 | |
43 int __attribute__((target("sse4.2"))) redef(void) { return 1; } | |
44 int __attribute__((target("arch=ivybridge"))) redef(void) { return 1; } | |
45 int __attribute__((target("arch=sandybridge"))) redef(void) { return 2; } | |
46 // expected-error@+2 {{redefinition of 'redef'}} | |
47 // expected-note@-2 {{previous definition is here}} | |
48 int __attribute__((target("arch=sandybridge"))) redef(void) { return 2; } | |
49 | |
50 int __attribute__((target("default"))) redef2(void) { return 1;} | |
51 // expected-error@+2 {{redefinition of 'redef2'}} | |
52 // expected-note@-2 {{previous definition is here}} | |
53 int __attribute__((target("default"))) redef2(void) { return 1;} | |
54 | |
55 int __attribute__((target("sse4.2"))) mv_after_use(void) { return 1; } | |
56 int use3(void) { | |
57 return mv_after_use(); | |
58 } | |
59 | |
60 // expected-error@+1 {{function declaration cannot become a multiversioned function after first usage}} | |
61 int __attribute__((target("arch=sandybridge"))) mv_after_use(void) { return 2; } | |
62 | |
63 int __attribute__((target("sse4.2,arch=sandybridge"))) mangle(void) { return 1; } | |
64 //expected-error@+2 {{multiversioned function redeclarations require identical target attributes}} | |
65 //expected-note@-2 {{previous declaration is here}} | |
66 int __attribute__((target("arch=sandybridge,sse4.2"))) mangle(void) { return 2; } | |
67 | |
68 // allow this, since we want to treat the 1st one as fwd-decl of the sandybridge version. | |
69 int prev_no_target(void); | |
70 int __attribute__((target("arch=sandybridge"))) prev_no_target(void) { return 2; } | |
71 int __attribute__((target("arch=ivybridge"))) prev_no_target(void) { return 2; } | |
72 | |
73 int __attribute__((target("arch=sandybridge"))) prev_no_target2(void); | |
74 int prev_no_target2(void); | |
75 // expected-error@-1 {{function declaration is missing 'target' attribute in a multiversioned function}} | |
76 // expected-note@+1 {{function multiversioning caused by this declaration}} | |
77 int __attribute__((target("arch=ivybridge"))) prev_no_target2(void); | |
78 | |
79 void __attribute__((target("sse4.2"))) addtl_attrs(void); | |
80 //expected-error@+1 {{attribute 'target' multiversioning cannot be combined}} | |
81 void __attribute__((used,target("arch=sandybridge"))) addtl_attrs(void); | |
82 | |
83 //expected-error@+1 {{attribute 'target' multiversioning cannot be combined}} | |
84 void __attribute__((target("default"), used)) addtl_attrs2(void); | |
85 | |
86 //expected-error@+2 {{attribute 'target' multiversioning cannot be combined}} | |
87 //expected-note@+2 {{function multiversioning caused by this declaration}} | |
88 void __attribute__((used,target("sse4.2"))) addtl_attrs3(void); | |
89 void __attribute__((target("arch=sandybridge"))) addtl_attrs3(void); | |
90 | |
91 void __attribute__((target("sse4.2"))) addtl_attrs4(void); | |
92 void __attribute__((target("arch=sandybridge"))) addtl_attrs4(void); | |
93 //expected-error@+1 {{attribute 'target' multiversioning cannot be combined}} | |
94 void __attribute__((used,target("arch=ivybridge"))) addtl_attrs4(void); | |
95 | |
96 int __attribute__((target("sse4.2"))) diff_cc(void); | |
97 // expected-error@+1 {{multiversioned function declaration has a different calling convention}} | |
98 __vectorcall int __attribute__((target("arch=sandybridge"))) diff_cc(void); | |
99 | |
100 int __attribute__((target("sse4.2"))) diff_ret(void); | |
101 // expected-error@+1 {{multiversioned function declaration has a different return type}} | |
102 short __attribute__((target("arch=sandybridge"))) diff_ret(void); |