You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Reland [clang] Check unsupported types in expressions
This was committed as ec6c847, but then reverted after a failure
in: https://lab.llvm.org/buildbot/#/builders/84/builds/13983
I was not able to reproduce the problem, but I added an extra check
for a NULL QualType just in case.
Original comit message:
The patch adds missing diagnostics for cases like:
float F3 = ((__float128)F1 * (__float128)F2) / 2.0f;
Sema::checkDeviceDecl (renamed to checkTypeSupport) is changed to work
with a type without the corresponding ValueDecl. It is also refactored
so that host diagnostics for unsupported types can be added here as
well.
Differential Revision: https://reviews.llvm.org/D109315
// expected-note@+2 {{'ld_return1a' defined here}}
99
-
// expected-error@+1 {{'ld_return1a' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
101
+
// expected-error@+1 {{'ld_return1a' requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
100
102
longdoubleld_return1a() { return0; }
101
103
// expected-note@+2 {{'ld_arg1a' defined here}}
102
-
// expected-error@+1 {{'ld_arg1a' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
104
+
// expected-error@+1 {{'ld_arg1a' requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
103
105
voidld_arg1a(longdouble ld) {}
104
106
105
107
typedeflongdouble ld_ty;
106
108
// expected-note@+2 {{'ld_return1b' defined here}}
107
-
// expected-error@+1 {{'ld_return1b' requires 128 bit size 'ld_ty' (aka 'long double') type support, but device 'nvptx64-unknown-unknown' does not support it}}
109
+
// expected-error@+1 {{'ld_return1b' requires 128 bit size 'ld_ty' (aka 'long double') type support, but target 'nvptx64-unknown-unknown' does not support it}}
108
110
ld_ty ld_return1b() { return0; }
109
111
// expected-note@+2 {{'ld_arg1b' defined here}}
110
-
// expected-error@+1 {{'ld_arg1b' requires 128 bit size 'ld_ty' (aka 'long double') type support, but device 'nvptx64-unknown-unknown' does not support it}}
112
+
// expected-error@+1 {{'ld_arg1b' requires 128 bit size 'ld_ty' (aka 'long double') type support, but target 'nvptx64-unknown-unknown' does not support it}}
111
113
voidld_arg1b(ld_ty ld) {}
112
114
113
115
staticlongdoubleld_return1c() { return0; }
@@ -138,24 +140,26 @@ static void ld_use2() {
138
140
inlinevoidld_use3() {
139
141
// expected-note@+1 {{'ld' defined here}}
140
142
longdouble ld = 0;
141
-
// expected-error@+1 {{'ld' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
143
+
// expected-error@+2 {{expression requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
144
+
// expected-error@+1 {{'ld' requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
142
145
ld += 1;
143
146
}
144
147
staticvoidld_use4() {
145
148
// expected-note@+1 {{'ld' defined here}}
146
149
longdouble ld = 0;
147
-
// expected-error@+1 {{'ld' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
150
+
// expected-error@+2 {{expression requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
151
+
// expected-error@+1 {{'ld' requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
148
152
ld += 1;
149
153
}
150
154
151
155
voidexternal() {
152
-
// expected-error@+1 {{'ld_return1e' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
156
+
// expected-error@+1 {{'ld_return1e' requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
153
157
void *p1 = reinterpret_cast<void*>(&ld_return1e);
154
-
// expected-error@+1 {{'ld_arg1e' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
158
+
// expected-error@+1 {{'ld_arg1e' requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
155
159
void *p2 = reinterpret_cast<void*>(&ld_arg1e);
156
-
// expected-error@+1 {{'ld_return1f' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
160
+
// expected-error@+1 {{'ld_return1f' requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
157
161
void *p3 = reinterpret_cast<void*>(&ld_return1f);
158
-
// expected-error@+1 {{'ld_arg1f' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
162
+
// expected-error@+1 {{'ld_arg1f' requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
159
163
void *p4 = reinterpret_cast<void*>(&ld_arg1f);
160
164
// TODO: The error message "called by" is not great.
161
165
// expected-note@+1 {{called by 'external'}}
@@ -166,18 +170,18 @@ void external() {
166
170
167
171
#ifndef _ARCH_PPC
168
172
// expected-note@+2 {{'ld_return2a' defined here}}
169
-
// expected-error@+1 {{'ld_return2a' requires 128 bit size '__float128' type support, but device 'nvptx64-unknown-unknown' does not support it}}
173
+
// expected-error@+1 {{'ld_return2a' requires 128 bit size '__float128' type support, but target 'nvptx64-unknown-unknown' does not support it}}
170
174
__float128 ld_return2a() { return0; }
171
175
// expected-note@+2 {{'ld_arg2a' defined here}}
172
-
// expected-error@+1 {{'ld_arg2a' requires 128 bit size '__float128' type support, but device 'nvptx64-unknown-unknown' does not support it}}
176
+
// expected-error@+1 {{'ld_arg2a' requires 128 bit size '__float128' type support, but target 'nvptx64-unknown-unknown' does not support it}}
173
177
voidld_arg2a(__float128 ld) {}
174
178
175
179
typedef __float128 fp128_ty;
176
180
// expected-note@+2 {{'ld_return2b' defined here}}
177
-
// expected-error@+1 {{'ld_return2b' requires 128 bit size 'fp128_ty' (aka '__float128') type support, but device 'nvptx64-unknown-unknown' does not support it}}
181
+
// expected-error@+1 {{'ld_return2b' requires 128 bit size 'fp128_ty' (aka '__float128') type support, but target 'nvptx64-unknown-unknown' does not support it}}
178
182
fp128_ty ld_return2b() { return0; }
179
183
// expected-note@+2 {{'ld_arg2b' defined here}}
180
-
// expected-error@+1 {{'ld_arg2b' requires 128 bit size 'fp128_ty' (aka '__float128') type support, but device 'nvptx64-unknown-unknown' does not support it}}
184
+
// expected-error@+1 {{'ld_arg2b' requires 128 bit size 'fp128_ty' (aka '__float128') type support, but target 'nvptx64-unknown-unknown' does not support it}}
181
185
voidld_arg2b(fp128_ty ld) {}
182
186
#endif
183
187
@@ -187,7 +191,7 @@ void ld_arg2b(fp128_ty ld) {}
187
191
// expected-note@+1 {{'f' defined here}}
188
192
inlinelongdoubledead_inline(longdouble f) {
189
193
#pragma omp target map(f)
190
-
// expected-error@+1 {{'f' requires 128 bit size 'long double' type support, but device 'nvptx64-unknown-unknown' does not support it}}
194
+
// expected-error@+1 {{'f' requires 128 bit size 'long double' type support, but target 'nvptx64-unknown-unknown' does not support it}}
0 commit comments