annotate clang/test/Sema/attr-target-mv.c @ 169:1f21f60db75c

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