@@ -77,19 +77,143 @@ T1 bar1() {
77
77
void baz1 () {
78
78
T1 t = bar1 ();
79
79
}
80
+
81
+ // TODO: We should not emit an error for dead functions we do not emit.
82
+ inline void dead_inline_declare_target () {
83
+ // expected-note@+1 {{'b' defined here}}
84
+ long double *a, b = 0 ;
85
+ // expected-error@+1 {{'b' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
86
+ a = &b;
87
+ }
88
+ // TODO: We should not emit an error for dead functions we do not emit.
89
+ static void dead_static_declare_target () {
90
+ // expected-note@+1 {{'b' defined here}}
91
+ long double *a, b = 0 ;
92
+ // expected-error@+1 {{'b' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
93
+ a = &b;
94
+ }
95
+ template <bool >
96
+ void dead_template_declare_target () {
97
+ long double *a, b = 0 ;
98
+ a = &b;
99
+ }
100
+
101
+ // TODO: We should diagnose the return type and argument type here.
102
+ long double ld_return1a () { return 0 ; }
103
+ void ld_arg1a (long double ld) {}
104
+
105
+ // TODO: We should diagnose the return type and argument type here.
106
+ typedef long double ld_ty;
107
+ ld_ty ld_return1b () { return 0 ; }
108
+ void ld_arg1b (ld_ty ld) {}
109
+
110
+ static long double ld_return1c () { return 0 ; }
111
+ static void ld_arg1c (long double ld) {}
112
+
113
+ inline long double ld_return1d () { return 0 ; }
114
+ inline void ld_arg1d (long double ld) {}
115
+
116
+ // expected-note@+1 {{'ld_return1e' defined here}}
117
+ static long double ld_return1e () { return 0 ; }
118
+ // expected-note@+1 {{'ld_arg1e' defined here}}
119
+ static void ld_arg1e (long double ld) {}
120
+
121
+ // expected-note@+1 {{'ld_return1f' defined here}}
122
+ inline long double ld_return1f () { return 0 ; }
123
+ // expected-note@+1 {{'ld_arg1f' defined here}}
124
+ inline void ld_arg1f (long double ld) {}
125
+
126
+ inline void ld_use1 () {
127
+ // expected-note@+1 {{'ld' defined here}}
128
+ long double ld = 0 ;
129
+ // TODO: We should not diagnose this as the function is dead.
130
+ // expected-error@+1 {{'ld' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
131
+ ld += 1 ;
132
+ }
133
+ static void ld_use2 () {
134
+ // expected-note@+1 {{'ld' defined here}}
135
+ long double ld = 0 ;
136
+ // TODO: We should not diagnose this as the function is dead.
137
+ // expected-error@+1 {{'ld' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
138
+ ld += 1 ;
139
+ }
140
+
141
+ inline void ld_use3 () {
142
+ // expected-note@+1 {{'ld' defined here}}
143
+ long double ld = 0 ;
144
+ // expected-error@+1 {{'ld' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
145
+ ld += 1 ;
146
+ }
147
+ static void ld_use4 () {
148
+ // expected-note@+1 {{'ld' defined here}}
149
+ long double ld = 0 ;
150
+ // expected-error@+1 {{'ld' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
151
+ ld += 1 ;
152
+ }
153
+
154
+ void external () {
155
+ // expected-error@+1 {{'ld_return1e' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
156
+ void *p1 = reinterpret_cast <void *>(&ld_return1e);
157
+ // expected-error@+1 {{'ld_arg1e' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
158
+ void *p2 = reinterpret_cast <void *>(&ld_arg1e);
159
+ // expected-error@+1 {{'ld_return1f' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
160
+ void *p3 = reinterpret_cast <void *>(&ld_return1f);
161
+ // expected-error@+1 {{'ld_arg1f' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
162
+ void *p4 = reinterpret_cast <void *>(&ld_arg1f);
163
+ void *p5 = reinterpret_cast <void *>(&ld_use3);
164
+ void *p6 = reinterpret_cast <void *>(&ld_use4);
165
+ }
166
+
167
+ #ifndef _ARCH_PPC
168
+ // TODO: We should diagnose the return type and argument type here.
169
+ __float128 ld_return2a () { return 0 ; }
170
+ void ld_arg2a (__float128 ld) {}
171
+
172
+ // TODO: We should diagnose the return type and argument type here.
173
+ typedef __float128 fp128_ty;
174
+ fp128_ty ld_return2b () { return 0 ; }
175
+ void ld_arg2b (fp128_ty ld) {}
176
+ #endif
177
+
80
178
#pragma omp end declare target
81
179
180
+ // TODO: There should not be an error here, dead_inline is never emitted.
181
+ // expected-note@+1 3{{'f' defined here}}
182
+ inline long double dead_inline (long double f) {
183
+ #pragma omp target map(f)
184
+ // TODO: We should not emit the same error message 3 times, here and elsewhere in this file.
185
+ // expected-error@+1 3{{'f' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
186
+ f = 1 ;
187
+ return f;
188
+ }
189
+
190
+ // TODO: There should not be an error here, dead_static is never emitted.
191
+ // expected-note@+1 3{{'f' defined here}}
192
+ static long double dead_static (long double f) {
193
+ #pragma omp target map(f)
194
+ // expected-error@+1 3{{'f' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
195
+ f = 1 ;
196
+ return f;
197
+ }
198
+
199
+ template <typename T>
200
+ long double dead_template (long double f) {
201
+ #pragma omp target map(f)
202
+ f = 1 ;
203
+ return f;
204
+ }
205
+
82
206
#ifndef _ARCH_PPC
83
207
// expected-note@+1 3{{'f' defined here}}
84
- __float128 foo1 (__float128 f) {
208
+ __float128 foo2 (__float128 f) {
85
209
#pragma omp target map(f)
86
210
// expected-error@+1 3{{'f' requires 128 bit size '__float128' type support, but device 'nvptx64-unknown-unknown' does not support it}}
87
211
f = 1 ;
88
212
return f;
89
213
}
90
214
#else
91
215
// expected-note@+1 3{{'f' defined here}}
92
- long double foo1 (long double f) {
216
+ long double foo3 (long double f) {
93
217
#pragma omp target map(f)
94
218
// expected-error@+1 3{{'f' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
95
219
f = 1 ;
0 commit comments