1 // RUN: %clang_cc1 -std=c99 %s -pedantic -verify -triple=x86_64-apple-darwin9 2 3 typedef double double2 __attribute__((ext_vector_type(2))); 4 typedef double double4 __attribute__((ext_vector_type(4))); 5 typedef float float2 __attribute__((ext_vector_type(2))); 6 typedef float float4 __attribute__((ext_vector_type(4))); 7 8 typedef int int2 __attribute__((ext_vector_type(2))); 9 typedef int int3 __attribute__((ext_vector_type(3))); 10 typedef unsigned unsigned3 __attribute__((ext_vector_type(3))); 11 typedef unsigned unsigned4 __attribute__((ext_vector_type(4))); 12 13 struct Foo { 14 char *p; 15 }; 16 17 __attribute__((address_space(1))) int int_as_one; 18 typedef int bar; 19 bar b; 20 21 __attribute__((address_space(1))) float float_as_one; 22 typedef float waffle; 23 waffle waf; 24 25 26 void test_builtin_elementwise_abs(int i, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 27 struct Foo s = __builtin_elementwise_abs(i); 28 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}} 29 30 i = __builtin_elementwise_abs(); 31 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 32 33 i = __builtin_elementwise_abs(i, i); 34 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 35 36 i = __builtin_elementwise_abs(v); 37 // expected-error@-1 {{assigning to 'int' from incompatible type 'float4' (vector of 4 'float' values)}} 38 39 u = __builtin_elementwise_abs(u); 40 // expected-error@-1 {{1st argument must be a signed integer or floating point type (was 'unsigned int')}} 41 42 uv = __builtin_elementwise_abs(uv); 43 // expected-error@-1 {{1st argument must be a signed integer or floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 44 } 45 46 void test_builtin_elementwise_add_sat(int i, short s, double d, float4 v, int3 iv, unsigned3 uv, int *p) { 47 i = __builtin_elementwise_add_sat(p, d); 48 // expected-error@-1 {{arguments are of different types ('int *' vs 'double')}} 49 50 struct Foo foo = __builtin_elementwise_add_sat(i, i); 51 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}} 52 53 i = __builtin_elementwise_add_sat(i); 54 // expected-error@-1 {{too few arguments to function call, expected 2, have 1}} 55 56 i = __builtin_elementwise_add_sat(); 57 // expected-error@-1 {{too few arguments to function call, expected 2, have 0}} 58 59 i = __builtin_elementwise_add_sat(i, i, i); 60 // expected-error@-1 {{too many arguments to function call, expected 2, have 3}} 61 62 i = __builtin_elementwise_add_sat(v, iv); 63 // expected-error@-1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'int3' (vector of 3 'int' values))}} 64 65 i = __builtin_elementwise_add_sat(uv, iv); 66 // expected-error@-1 {{arguments are of different types ('unsigned3' (vector of 3 'unsigned int' values) vs 'int3' (vector of 3 'int' values))}} 67 68 v = __builtin_elementwise_add_sat(v, v); 69 // expected-error@-1 {{1st argument must be a vector of integers (was 'float4' (vector of 4 'float' values))}} 70 71 s = __builtin_elementwise_add_sat(i, s); 72 73 enum e { one, 74 two }; 75 i = __builtin_elementwise_add_sat(one, two); 76 77 enum f { three }; 78 enum f x = __builtin_elementwise_add_sat(one, three); 79 80 _BitInt(32) ext; // expected-warning {{'_BitInt' in C17 and earlier is a Clang extension}} 81 ext = __builtin_elementwise_add_sat(ext, ext); 82 83 const int ci; 84 i = __builtin_elementwise_add_sat(ci, i); 85 i = __builtin_elementwise_add_sat(i, ci); 86 i = __builtin_elementwise_add_sat(ci, ci); 87 88 i = __builtin_elementwise_add_sat(i, int_as_one); // ok (attributes don't match)? 89 i = __builtin_elementwise_add_sat(i, b); // ok (sugar doesn't match)? 90 91 int A[10]; 92 A = __builtin_elementwise_add_sat(A, A); 93 // expected-error@-1 {{1st argument must be a vector, integer or floating point type (was 'int *')}} 94 95 int(ii); 96 int j; 97 j = __builtin_elementwise_add_sat(i, j); 98 99 _Complex float c1, c2; 100 c1 = __builtin_elementwise_add_sat(c1, c2); 101 // expected-error@-1 {{1st argument must be a vector, integer or floating point type (was '_Complex float')}} 102 } 103 104 void test_builtin_elementwise_sub_sat(int i, short s, double d, float4 v, int3 iv, unsigned3 uv, int *p) { 105 i = __builtin_elementwise_sub_sat(p, d); 106 // expected-error@-1 {{arguments are of different types ('int *' vs 'double')}} 107 108 struct Foo foo = __builtin_elementwise_sub_sat(i, i); 109 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}} 110 111 i = __builtin_elementwise_sub_sat(i); 112 // expected-error@-1 {{too few arguments to function call, expected 2, have 1}} 113 114 i = __builtin_elementwise_sub_sat(); 115 // expected-error@-1 {{too few arguments to function call, expected 2, have 0}} 116 117 i = __builtin_elementwise_sub_sat(i, i, i); 118 // expected-error@-1 {{too many arguments to function call, expected 2, have 3}} 119 120 i = __builtin_elementwise_sub_sat(v, iv); 121 // expected-error@-1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'int3' (vector of 3 'int' values))}} 122 123 i = __builtin_elementwise_sub_sat(uv, iv); 124 // expected-error@-1 {{arguments are of different types ('unsigned3' (vector of 3 'unsigned int' values) vs 'int3' (vector of 3 'int' values))}} 125 126 v = __builtin_elementwise_sub_sat(v, v); 127 // expected-error@-1 {{1st argument must be a vector of integers (was 'float4' (vector of 4 'float' values))}} 128 129 s = __builtin_elementwise_sub_sat(i, s); 130 131 enum e { one, 132 two }; 133 i = __builtin_elementwise_sub_sat(one, two); 134 135 enum f { three }; 136 enum f x = __builtin_elementwise_sub_sat(one, three); 137 138 _BitInt(32) ext; // expected-warning {{'_BitInt' in C17 and earlier is a Clang extension}} 139 ext = __builtin_elementwise_sub_sat(ext, ext); 140 141 const int ci; 142 i = __builtin_elementwise_sub_sat(ci, i); 143 i = __builtin_elementwise_sub_sat(i, ci); 144 i = __builtin_elementwise_sub_sat(ci, ci); 145 146 i = __builtin_elementwise_sub_sat(i, int_as_one); // ok (attributes don't match)? 147 i = __builtin_elementwise_sub_sat(i, b); // ok (sugar doesn't match)? 148 149 int A[10]; 150 A = __builtin_elementwise_sub_sat(A, A); 151 // expected-error@-1 {{1st argument must be a vector, integer or floating point type (was 'int *')}} 152 153 int(ii); 154 int j; 155 j = __builtin_elementwise_sub_sat(i, j); 156 157 _Complex float c1, c2; 158 c1 = __builtin_elementwise_sub_sat(c1, c2); 159 // expected-error@-1 {{1st argument must be a vector, integer or floating point type (was '_Complex float')}} 160 } 161 162 void test_builtin_elementwise_max(int i, short s, double d, float4 v, int3 iv, unsigned3 uv, int *p) { 163 i = __builtin_elementwise_max(p, d); 164 // expected-error@-1 {{arguments are of different types ('int *' vs 'double')}} 165 166 struct Foo foo = __builtin_elementwise_max(i, i); 167 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}} 168 169 i = __builtin_elementwise_max(i); 170 // expected-error@-1 {{too few arguments to function call, expected 2, have 1}} 171 172 i = __builtin_elementwise_max(); 173 // expected-error@-1 {{too few arguments to function call, expected 2, have 0}} 174 175 i = __builtin_elementwise_max(i, i, i); 176 // expected-error@-1 {{too many arguments to function call, expected 2, have 3}} 177 178 i = __builtin_elementwise_max(v, iv); 179 // expected-error@-1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'int3' (vector of 3 'int' values))}} 180 181 i = __builtin_elementwise_max(uv, iv); 182 // expected-error@-1 {{arguments are of different types ('unsigned3' (vector of 3 'unsigned int' values) vs 'int3' (vector of 3 'int' values))}} 183 184 s = __builtin_elementwise_max(i, s); 185 186 enum e { one, 187 two }; 188 i = __builtin_elementwise_max(one, two); 189 190 enum f { three }; 191 enum f x = __builtin_elementwise_max(one, three); 192 193 _BitInt(32) ext; // expected-warning {{'_BitInt' in C17 and earlier is a Clang extension}} 194 ext = __builtin_elementwise_max(ext, ext); 195 196 const int ci; 197 i = __builtin_elementwise_max(ci, i); 198 i = __builtin_elementwise_max(i, ci); 199 i = __builtin_elementwise_max(ci, ci); 200 201 i = __builtin_elementwise_max(i, int_as_one); // ok (attributes don't match)? 202 i = __builtin_elementwise_max(i, b); // ok (sugar doesn't match)? 203 204 int A[10]; 205 A = __builtin_elementwise_max(A, A); 206 // expected-error@-1 {{1st argument must be a vector, integer or floating point type (was 'int *')}} 207 208 int(ii); 209 int j; 210 j = __builtin_elementwise_max(i, j); 211 212 _Complex float c1, c2; 213 c1 = __builtin_elementwise_max(c1, c2); 214 // expected-error@-1 {{1st argument must be a vector, integer or floating point type (was '_Complex float')}} 215 } 216 217 void test_builtin_elementwise_min(int i, short s, double d, float4 v, int3 iv, unsigned3 uv, int *p) { 218 i = __builtin_elementwise_min(p, d); 219 // expected-error@-1 {{arguments are of different types ('int *' vs 'double')}} 220 221 struct Foo foo = __builtin_elementwise_min(i, i); 222 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}} 223 224 i = __builtin_elementwise_min(i); 225 // expected-error@-1 {{too few arguments to function call, expected 2, have 1}} 226 227 i = __builtin_elementwise_min(); 228 // expected-error@-1 {{too few arguments to function call, expected 2, have 0}} 229 230 i = __builtin_elementwise_min(i, i, i); 231 // expected-error@-1 {{too many arguments to function call, expected 2, have 3}} 232 233 i = __builtin_elementwise_min(v, iv); 234 // expected-error@-1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'int3' (vector of 3 'int' values))}} 235 236 i = __builtin_elementwise_min(uv, iv); 237 // expected-error@-1 {{arguments are of different types ('unsigned3' (vector of 3 'unsigned int' values) vs 'int3' (vector of 3 'int' values))}} 238 239 s = __builtin_elementwise_min(i, s); 240 241 enum e { one, 242 two }; 243 i = __builtin_elementwise_min(one, two); 244 245 enum f { three }; 246 enum f x = __builtin_elementwise_min(one, three); 247 248 _BitInt(32) ext; // expected-warning {{'_BitInt' in C17 and earlier is a Clang extension}} 249 ext = __builtin_elementwise_min(ext, ext); 250 251 const int ci; 252 i = __builtin_elementwise_min(ci, i); 253 i = __builtin_elementwise_min(i, ci); 254 i = __builtin_elementwise_min(ci, ci); 255 256 i = __builtin_elementwise_min(i, int_as_one); // ok (attributes don't match)? 257 i = __builtin_elementwise_min(i, b); // ok (sugar doesn't match)? 258 259 int A[10]; 260 A = __builtin_elementwise_min(A, A); 261 // expected-error@-1 {{1st argument must be a vector, integer or floating point type (was 'int *')}} 262 263 int(ii); 264 int j; 265 j = __builtin_elementwise_min(i, j); 266 267 _Complex float c1, c2; 268 c1 = __builtin_elementwise_min(c1, c2); 269 // expected-error@-1 {{1st argument must be a vector, integer or floating point type (was '_Complex float')}} 270 } 271 272 void test_builtin_elementwise_ceil(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 273 274 struct Foo s = __builtin_elementwise_ceil(f); 275 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 276 277 i = __builtin_elementwise_ceil(); 278 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 279 280 i = __builtin_elementwise_ceil(i); 281 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 282 283 i = __builtin_elementwise_ceil(f, f); 284 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 285 286 u = __builtin_elementwise_ceil(u); 287 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 288 289 uv = __builtin_elementwise_ceil(uv); 290 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 291 } 292 293 void test_builtin_elementwise_cos(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 294 295 struct Foo s = __builtin_elementwise_cos(f); 296 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 297 298 i = __builtin_elementwise_cos(); 299 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 300 301 i = __builtin_elementwise_cos(i); 302 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 303 304 i = __builtin_elementwise_cos(f, f); 305 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 306 307 u = __builtin_elementwise_cos(u); 308 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 309 310 uv = __builtin_elementwise_cos(uv); 311 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 312 } 313 314 void test_builtin_elementwise_exp(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 315 316 struct Foo s = __builtin_elementwise_exp(f); 317 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 318 319 i = __builtin_elementwise_exp(); 320 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 321 322 i = __builtin_elementwise_exp(i); 323 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 324 325 i = __builtin_elementwise_exp(f, f); 326 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 327 328 u = __builtin_elementwise_exp(u); 329 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 330 331 uv = __builtin_elementwise_exp(uv); 332 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 333 } 334 335 void test_builtin_elementwise_exp2(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 336 337 struct Foo s = __builtin_elementwise_exp2(f); 338 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 339 340 i = __builtin_elementwise_exp2(); 341 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 342 343 i = __builtin_elementwise_exp2(i); 344 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 345 346 i = __builtin_elementwise_exp2(f, f); 347 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 348 349 u = __builtin_elementwise_exp2(u); 350 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 351 352 uv = __builtin_elementwise_exp2(uv); 353 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 354 } 355 356 357 void test_builtin_elementwise_floor(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 358 359 struct Foo s = __builtin_elementwise_floor(f); 360 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 361 362 i = __builtin_elementwise_floor(); 363 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 364 365 i = __builtin_elementwise_floor(i); 366 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 367 368 i = __builtin_elementwise_floor(f, f); 369 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 370 371 u = __builtin_elementwise_floor(u); 372 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 373 374 uv = __builtin_elementwise_floor(uv); 375 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 376 } 377 378 void test_builtin_elementwise_log(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 379 380 struct Foo s = __builtin_elementwise_log(f); 381 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 382 383 i = __builtin_elementwise_log(); 384 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 385 386 i = __builtin_elementwise_log(i); 387 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 388 389 i = __builtin_elementwise_log(f, f); 390 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 391 392 u = __builtin_elementwise_log(u); 393 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 394 395 uv = __builtin_elementwise_log(uv); 396 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 397 } 398 399 void test_builtin_elementwise_log10(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 400 401 struct Foo s = __builtin_elementwise_log10(f); 402 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 403 404 i = __builtin_elementwise_log10(); 405 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 406 407 i = __builtin_elementwise_log10(i); 408 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 409 410 i = __builtin_elementwise_log10(f, f); 411 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 412 413 u = __builtin_elementwise_log10(u); 414 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 415 416 uv = __builtin_elementwise_log10(uv); 417 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 418 } 419 420 void test_builtin_elementwise_log2(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 421 422 struct Foo s = __builtin_elementwise_log2(f); 423 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 424 425 i = __builtin_elementwise_log2(); 426 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 427 428 i = __builtin_elementwise_log2(i); 429 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 430 431 i = __builtin_elementwise_log2(f, f); 432 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 433 434 u = __builtin_elementwise_log2(u); 435 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 436 437 uv = __builtin_elementwise_log2(uv); 438 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 439 } 440 441 void test_builtin_elementwise_roundeven(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 442 443 struct Foo s = __builtin_elementwise_roundeven(f); 444 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 445 446 i = __builtin_elementwise_roundeven(); 447 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 448 449 i = __builtin_elementwise_roundeven(i); 450 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 451 452 i = __builtin_elementwise_roundeven(f, f); 453 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 454 455 u = __builtin_elementwise_roundeven(u); 456 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 457 458 uv = __builtin_elementwise_roundeven(uv); 459 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 460 } 461 462 void test_builtin_elementwise_sin(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 463 464 struct Foo s = __builtin_elementwise_sin(f); 465 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 466 467 i = __builtin_elementwise_sin(); 468 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 469 470 i = __builtin_elementwise_sin(i); 471 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 472 473 i = __builtin_elementwise_sin(f, f); 474 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 475 476 u = __builtin_elementwise_sin(u); 477 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 478 479 uv = __builtin_elementwise_sin(uv); 480 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 481 } 482 483 void test_builtin_elementwise_trunc(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 484 485 struct Foo s = __builtin_elementwise_trunc(f); 486 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 487 488 i = __builtin_elementwise_trunc(); 489 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 490 491 i = __builtin_elementwise_trunc(i); 492 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 493 494 i = __builtin_elementwise_trunc(f, f); 495 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 496 497 u = __builtin_elementwise_trunc(u); 498 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 499 500 uv = __builtin_elementwise_trunc(uv); 501 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 502 } 503 504 void test_builtin_elementwise_canonicalize(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 505 506 struct Foo s = __builtin_elementwise_canonicalize(f); 507 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 508 509 i = __builtin_elementwise_canonicalize(); 510 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 511 512 i = __builtin_elementwise_canonicalize(i); 513 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 514 515 i = __builtin_elementwise_canonicalize(f, f); 516 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 517 518 u = __builtin_elementwise_canonicalize(u); 519 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 520 521 uv = __builtin_elementwise_canonicalize(uv); 522 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 523 } 524 525 void test_builtin_elementwise_copysign(int i, short s, double d, float f, float4 v, int3 iv, unsigned3 uv, int *p) { 526 i = __builtin_elementwise_copysign(p, d); 527 // expected-error@-1 {{1st argument must be a floating point type (was 'int *')}} 528 529 i = __builtin_elementwise_copysign(i, i); 530 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 531 532 i = __builtin_elementwise_copysign(i); 533 // expected-error@-1 {{too few arguments to function call, expected 2, have 1}} 534 535 i = __builtin_elementwise_copysign(); 536 // expected-error@-1 {{too few arguments to function call, expected 2, have 0}} 537 538 i = __builtin_elementwise_copysign(i, i, i); 539 // expected-error@-1 {{too many arguments to function call, expected 2, have 3}} 540 541 i = __builtin_elementwise_copysign(v, iv); 542 // expected-error@-1 {{2nd argument must be a floating point type (was 'int3' (vector of 3 'int' values))}} 543 544 i = __builtin_elementwise_copysign(uv, iv); 545 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned3' (vector of 3 'unsigned int' values))}} 546 547 s = __builtin_elementwise_copysign(i, s); 548 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 549 550 f = __builtin_elementwise_copysign(f, i); 551 // expected-error@-1 {{2nd argument must be a floating point type (was 'int')}} 552 553 f = __builtin_elementwise_copysign(i, f); 554 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 555 556 enum e { one, 557 two }; 558 i = __builtin_elementwise_copysign(one, two); 559 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 560 561 enum f { three }; 562 enum f x = __builtin_elementwise_copysign(one, three); 563 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 564 565 _BitInt(32) ext; // expected-warning {{'_BitInt' in C17 and earlier is a Clang extension}} 566 ext = __builtin_elementwise_copysign(ext, ext); 567 // expected-error@-1 {{1st argument must be a floating point type (was '_BitInt(32)')}} 568 569 const float cf32; 570 f = __builtin_elementwise_copysign(cf32, f); 571 f = __builtin_elementwise_copysign(f, cf32); 572 f = __builtin_elementwise_copysign(cf32, f); 573 574 f = __builtin_elementwise_copysign(f, float_as_one); // ok (attributes don't match)? 575 f = __builtin_elementwise_copysign(f, waf); // ok (sugar doesn't match)? 576 577 float A[10]; 578 A = __builtin_elementwise_copysign(A, A); 579 // expected-error@-1 {{1st argument must be a floating point type (was 'float *')}} 580 581 float(ii); 582 float j; 583 j = __builtin_elementwise_copysign(f, j); 584 585 _Complex float c1, c2; 586 c1 = __builtin_elementwise_copysign(c1, c2); 587 // expected-error@-1 {{1st argument must be a floating point type (was '_Complex float')}} 588 589 double f64 = 0.0; 590 double tmp0 = __builtin_elementwise_copysign(f64, f); 591 // expected-error@-1 {{arguments are of different types ('double' vs 'float')}} 592 593 float tmp1 = __builtin_elementwise_copysign(f, f64); 594 //expected-error@-1 {{arguments are of different types ('float' vs 'double')}} 595 596 float4 v4f32 = 0.0f; 597 float4 tmp2 = __builtin_elementwise_copysign(v4f32, f); 598 // expected-error@-1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'float')}} 599 600 float tmp3 = __builtin_elementwise_copysign(f, v4f32); 601 // expected-error@-1 {{arguments are of different types ('float' vs 'float4' (vector of 4 'float' values))}} 602 603 float2 v2f32 = 0.0f; 604 double4 v4f64 = 0.0; 605 double4 tmp4 = __builtin_elementwise_copysign(v4f64, v4f32); 606 // expected-error@-1 {{arguments are of different types ('double4' (vector of 4 'double' values) vs 'float4' (vector of 4 'float' values))}} 607 608 float4 tmp6 = __builtin_elementwise_copysign(v4f32, v4f64); 609 // expected-error@-1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'double4' (vector of 4 'double' values))}} 610 611 float4 tmp7 = __builtin_elementwise_copysign(v4f32, v2f32); 612 // expected-error@-1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'float2' (vector of 2 'float' values))}} 613 614 float2 tmp8 = __builtin_elementwise_copysign(v2f32, v4f32); 615 // expected-error@-1 {{arguments are of different types ('float2' (vector of 2 'float' values) vs 'float4' (vector of 4 'float' values))}} 616 617 float2 tmp9 = __builtin_elementwise_copysign(v4f32, v4f32); 618 // expected-error@-1 {{initializing 'float2' (vector of 2 'float' values) with an expression of incompatible type 'float4' (vector of 4 'float' values)}} 619 } 620 621 void test_builtin_elementwise_fma(int i32, int2 v2i32, short i16, 622 double f64, double2 v2f64, double2 v3f64, 623 float f32, float2 v2f32, float v3f32, float4 v4f32, 624 const float4 c_v4f32, 625 int3 v3i32, int *ptr) { 626 627 f32 = __builtin_elementwise_fma(); 628 // expected-error@-1 {{too few arguments to function call, expected 3, have 0}} 629 630 f32 = __builtin_elementwise_fma(f32); 631 // expected-error@-1 {{too few arguments to function call, expected 3, have 1}} 632 633 f32 = __builtin_elementwise_fma(f32, f32); 634 // expected-error@-1 {{too few arguments to function call, expected 3, have 2}} 635 636 f32 = __builtin_elementwise_fma(f32, f32, f32, f32); 637 // expected-error@-1 {{too many arguments to function call, expected 3, have 4}} 638 639 f32 = __builtin_elementwise_fma(f64, f32, f32); 640 // expected-error@-1 {{arguments are of different types ('double' vs 'float')}} 641 642 f32 = __builtin_elementwise_fma(f32, f64, f32); 643 // expected-error@-1 {{arguments are of different types ('float' vs 'double')}} 644 645 f32 = __builtin_elementwise_fma(f32, f32, f64); 646 // expected-error@-1 {{arguments are of different types ('float' vs 'double')}} 647 648 f32 = __builtin_elementwise_fma(f32, f32, f64); 649 // expected-error@-1 {{arguments are of different types ('float' vs 'double')}} 650 651 f64 = __builtin_elementwise_fma(f64, f32, f32); 652 // expected-error@-1 {{arguments are of different types ('double' vs 'float')}} 653 654 f64 = __builtin_elementwise_fma(f64, f64, f32); 655 // expected-error@-1 {{arguments are of different types ('double' vs 'float')}} 656 657 f64 = __builtin_elementwise_fma(f64, f32, f64); 658 // expected-error@-1 {{arguments are of different types ('double' vs 'float')}} 659 660 v2f64 = __builtin_elementwise_fma(v2f32, f64, f64); 661 // expected-error@-1 {{arguments are of different types ('float2' (vector of 2 'float' values) vs 'double'}} 662 663 v2f64 = __builtin_elementwise_fma(v2f32, v2f64, f64); 664 // expected-error@-1 {{arguments are of different types ('float2' (vector of 2 'float' values) vs 'double2' (vector of 2 'double' values)}} 665 666 v2f64 = __builtin_elementwise_fma(v2f32, f64, v2f64); 667 // expected-error@-1 {{arguments are of different types ('float2' (vector of 2 'float' values) vs 'double'}} 668 669 v2f64 = __builtin_elementwise_fma(f64, v2f32, v2f64); 670 // expected-error@-1 {{arguments are of different types ('double' vs 'float2' (vector of 2 'float' values)}} 671 672 v2f64 = __builtin_elementwise_fma(f64, v2f64, v2f64); 673 // expected-error@-1 {{arguments are of different types ('double' vs 'double2' (vector of 2 'double' values)}} 674 675 i32 = __builtin_elementwise_fma(i32, i32, i32); 676 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 677 678 v2i32 = __builtin_elementwise_fma(v2i32, v2i32, v2i32); 679 // expected-error@-1 {{1st argument must be a floating point type (was 'int2' (vector of 2 'int' values))}} 680 681 f32 = __builtin_elementwise_fma(f32, f32, i32); 682 // expected-error@-1 {{3rd argument must be a floating point type (was 'int')}} 683 684 f32 = __builtin_elementwise_fma(f32, i32, f32); 685 // expected-error@-1 {{2nd argument must be a floating point type (was 'int')}} 686 687 f32 = __builtin_elementwise_fma(f32, f32, i32); 688 // expected-error@-1 {{3rd argument must be a floating point type (was 'int')}} 689 690 691 _Complex float c1, c2, c3; 692 c1 = __builtin_elementwise_fma(c1, f32, f32); 693 // expected-error@-1 {{1st argument must be a floating point type (was '_Complex float')}} 694 695 c2 = __builtin_elementwise_fma(f32, c2, f32); 696 // expected-error@-1 {{2nd argument must be a floating point type (was '_Complex float')}} 697 698 c3 = __builtin_elementwise_fma(f32, f32, c3); 699 // expected-error@-1 {{3rd argument must be a floating point type (was '_Complex float')}} 700 } 701