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_floor(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 315 316 struct Foo s = __builtin_elementwise_floor(f); 317 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 318 319 i = __builtin_elementwise_floor(); 320 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 321 322 i = __builtin_elementwise_floor(i); 323 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 324 325 i = __builtin_elementwise_floor(f, f); 326 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 327 328 u = __builtin_elementwise_floor(u); 329 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 330 331 uv = __builtin_elementwise_floor(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_log(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 336 337 struct Foo s = __builtin_elementwise_log(f); 338 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 339 340 i = __builtin_elementwise_log(); 341 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 342 343 i = __builtin_elementwise_log(i); 344 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 345 346 i = __builtin_elementwise_log(f, f); 347 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 348 349 u = __builtin_elementwise_log(u); 350 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 351 352 uv = __builtin_elementwise_log(uv); 353 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 354 } 355 356 void test_builtin_elementwise_log10(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 357 358 struct Foo s = __builtin_elementwise_log10(f); 359 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 360 361 i = __builtin_elementwise_log10(); 362 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 363 364 i = __builtin_elementwise_log10(i); 365 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 366 367 i = __builtin_elementwise_log10(f, f); 368 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 369 370 u = __builtin_elementwise_log10(u); 371 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 372 373 uv = __builtin_elementwise_log10(uv); 374 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 375 } 376 377 void test_builtin_elementwise_log2(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 378 379 struct Foo s = __builtin_elementwise_log2(f); 380 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 381 382 i = __builtin_elementwise_log2(); 383 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 384 385 i = __builtin_elementwise_log2(i); 386 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 387 388 i = __builtin_elementwise_log2(f, f); 389 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 390 391 u = __builtin_elementwise_log2(u); 392 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 393 394 uv = __builtin_elementwise_log2(uv); 395 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 396 } 397 398 void test_builtin_elementwise_roundeven(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 399 400 struct Foo s = __builtin_elementwise_roundeven(f); 401 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 402 403 i = __builtin_elementwise_roundeven(); 404 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 405 406 i = __builtin_elementwise_roundeven(i); 407 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 408 409 i = __builtin_elementwise_roundeven(f, f); 410 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 411 412 u = __builtin_elementwise_roundeven(u); 413 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 414 415 uv = __builtin_elementwise_roundeven(uv); 416 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 417 } 418 419 void test_builtin_elementwise_sin(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 420 421 struct Foo s = __builtin_elementwise_sin(f); 422 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 423 424 i = __builtin_elementwise_sin(); 425 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 426 427 i = __builtin_elementwise_sin(i); 428 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 429 430 i = __builtin_elementwise_sin(f, f); 431 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 432 433 u = __builtin_elementwise_sin(u); 434 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 435 436 uv = __builtin_elementwise_sin(uv); 437 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 438 } 439 440 void test_builtin_elementwise_trunc(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 441 442 struct Foo s = __builtin_elementwise_trunc(f); 443 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 444 445 i = __builtin_elementwise_trunc(); 446 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 447 448 i = __builtin_elementwise_trunc(i); 449 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 450 451 i = __builtin_elementwise_trunc(f, f); 452 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 453 454 u = __builtin_elementwise_trunc(u); 455 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 456 457 uv = __builtin_elementwise_trunc(uv); 458 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 459 } 460 461 void test_builtin_elementwise_canonicalize(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) { 462 463 struct Foo s = __builtin_elementwise_canonicalize(f); 464 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}} 465 466 i = __builtin_elementwise_canonicalize(); 467 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}} 468 469 i = __builtin_elementwise_canonicalize(i); 470 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 471 472 i = __builtin_elementwise_canonicalize(f, f); 473 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} 474 475 u = __builtin_elementwise_canonicalize(u); 476 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}} 477 478 uv = __builtin_elementwise_canonicalize(uv); 479 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}} 480 } 481 482 void test_builtin_elementwise_copysign(int i, short s, double d, float f, float4 v, int3 iv, unsigned3 uv, int *p) { 483 i = __builtin_elementwise_copysign(p, d); 484 // expected-error@-1 {{1st argument must be a floating point type (was 'int *')}} 485 486 i = __builtin_elementwise_copysign(i, i); 487 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 488 489 i = __builtin_elementwise_copysign(i); 490 // expected-error@-1 {{too few arguments to function call, expected 2, have 1}} 491 492 i = __builtin_elementwise_copysign(); 493 // expected-error@-1 {{too few arguments to function call, expected 2, have 0}} 494 495 i = __builtin_elementwise_copysign(i, i, i); 496 // expected-error@-1 {{too many arguments to function call, expected 2, have 3}} 497 498 i = __builtin_elementwise_copysign(v, iv); 499 // expected-error@-1 {{2nd argument must be a floating point type (was 'int3' (vector of 3 'int' values))}} 500 501 i = __builtin_elementwise_copysign(uv, iv); 502 // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned3' (vector of 3 'unsigned int' values))}} 503 504 s = __builtin_elementwise_copysign(i, s); 505 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 506 507 f = __builtin_elementwise_copysign(f, i); 508 // expected-error@-1 {{2nd argument must be a floating point type (was 'int')}} 509 510 f = __builtin_elementwise_copysign(i, f); 511 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 512 513 enum e { one, 514 two }; 515 i = __builtin_elementwise_copysign(one, two); 516 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 517 518 enum f { three }; 519 enum f x = __builtin_elementwise_copysign(one, three); 520 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 521 522 _BitInt(32) ext; // expected-warning {{'_BitInt' in C17 and earlier is a Clang extension}} 523 ext = __builtin_elementwise_copysign(ext, ext); 524 // expected-error@-1 {{1st argument must be a floating point type (was '_BitInt(32)')}} 525 526 const float cf32; 527 f = __builtin_elementwise_copysign(cf32, f); 528 f = __builtin_elementwise_copysign(f, cf32); 529 f = __builtin_elementwise_copysign(cf32, f); 530 531 f = __builtin_elementwise_copysign(f, float_as_one); // ok (attributes don't match)? 532 f = __builtin_elementwise_copysign(f, waf); // ok (sugar doesn't match)? 533 534 float A[10]; 535 A = __builtin_elementwise_copysign(A, A); 536 // expected-error@-1 {{1st argument must be a floating point type (was 'float *')}} 537 538 float(ii); 539 float j; 540 j = __builtin_elementwise_copysign(f, j); 541 542 _Complex float c1, c2; 543 c1 = __builtin_elementwise_copysign(c1, c2); 544 // expected-error@-1 {{1st argument must be a floating point type (was '_Complex float')}} 545 546 double f64 = 0.0; 547 double tmp0 = __builtin_elementwise_copysign(f64, f); 548 // expected-error@-1 {{arguments are of different types ('double' vs 'float')}} 549 550 float tmp1 = __builtin_elementwise_copysign(f, f64); 551 //expected-error@-1 {{arguments are of different types ('float' vs 'double')}} 552 553 float4 v4f32 = 0.0f; 554 float4 tmp2 = __builtin_elementwise_copysign(v4f32, f); 555 // expected-error@-1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'float')}} 556 557 float tmp3 = __builtin_elementwise_copysign(f, v4f32); 558 // expected-error@-1 {{arguments are of different types ('float' vs 'float4' (vector of 4 'float' values))}} 559 560 float2 v2f32 = 0.0f; 561 double4 v4f64 = 0.0; 562 double4 tmp4 = __builtin_elementwise_copysign(v4f64, v4f32); 563 // expected-error@-1 {{arguments are of different types ('double4' (vector of 4 'double' values) vs 'float4' (vector of 4 'float' values))}} 564 565 float4 tmp6 = __builtin_elementwise_copysign(v4f32, v4f64); 566 // expected-error@-1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'double4' (vector of 4 'double' values))}} 567 568 float4 tmp7 = __builtin_elementwise_copysign(v4f32, v2f32); 569 // expected-error@-1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'float2' (vector of 2 'float' values))}} 570 571 float2 tmp8 = __builtin_elementwise_copysign(v2f32, v4f32); 572 // expected-error@-1 {{arguments are of different types ('float2' (vector of 2 'float' values) vs 'float4' (vector of 4 'float' values))}} 573 574 float2 tmp9 = __builtin_elementwise_copysign(v4f32, v4f32); 575 // expected-error@-1 {{initializing 'float2' (vector of 2 'float' values) with an expression of incompatible type 'float4' (vector of 4 'float' values)}} 576 } 577 578 void test_builtin_elementwise_fma(int i32, int2 v2i32, short i16, 579 double f64, double2 v2f64, double2 v3f64, 580 float f32, float2 v2f32, float v3f32, float4 v4f32, 581 const float4 c_v4f32, 582 int3 v3i32, int *ptr) { 583 584 f32 = __builtin_elementwise_fma(); 585 // expected-error@-1 {{too few arguments to function call, expected 3, have 0}} 586 587 f32 = __builtin_elementwise_fma(f32); 588 // expected-error@-1 {{too few arguments to function call, expected 3, have 1}} 589 590 f32 = __builtin_elementwise_fma(f32, f32); 591 // expected-error@-1 {{too few arguments to function call, expected 3, have 2}} 592 593 f32 = __builtin_elementwise_fma(f32, f32, f32, f32); 594 // expected-error@-1 {{too many arguments to function call, expected 3, have 4}} 595 596 f32 = __builtin_elementwise_fma(f64, f32, f32); 597 // expected-error@-1 {{arguments are of different types ('double' vs 'float')}} 598 599 f32 = __builtin_elementwise_fma(f32, f64, f32); 600 // expected-error@-1 {{arguments are of different types ('float' vs 'double')}} 601 602 f32 = __builtin_elementwise_fma(f32, f32, f64); 603 // expected-error@-1 {{arguments are of different types ('float' vs 'double')}} 604 605 f32 = __builtin_elementwise_fma(f32, f32, f64); 606 // expected-error@-1 {{arguments are of different types ('float' vs 'double')}} 607 608 f64 = __builtin_elementwise_fma(f64, f32, f32); 609 // expected-error@-1 {{arguments are of different types ('double' vs 'float')}} 610 611 f64 = __builtin_elementwise_fma(f64, f64, f32); 612 // expected-error@-1 {{arguments are of different types ('double' vs 'float')}} 613 614 f64 = __builtin_elementwise_fma(f64, f32, f64); 615 // expected-error@-1 {{arguments are of different types ('double' vs 'float')}} 616 617 v2f64 = __builtin_elementwise_fma(v2f32, f64, f64); 618 // expected-error@-1 {{arguments are of different types ('float2' (vector of 2 'float' values) vs 'double'}} 619 620 v2f64 = __builtin_elementwise_fma(v2f32, v2f64, f64); 621 // expected-error@-1 {{arguments are of different types ('float2' (vector of 2 'float' values) vs 'double2' (vector of 2 'double' values)}} 622 623 v2f64 = __builtin_elementwise_fma(v2f32, f64, v2f64); 624 // expected-error@-1 {{arguments are of different types ('float2' (vector of 2 'float' values) vs 'double'}} 625 626 v2f64 = __builtin_elementwise_fma(f64, v2f32, v2f64); 627 // expected-error@-1 {{arguments are of different types ('double' vs 'float2' (vector of 2 'float' values)}} 628 629 v2f64 = __builtin_elementwise_fma(f64, v2f64, v2f64); 630 // expected-error@-1 {{arguments are of different types ('double' vs 'double2' (vector of 2 'double' values)}} 631 632 i32 = __builtin_elementwise_fma(i32, i32, i32); 633 // expected-error@-1 {{1st argument must be a floating point type (was 'int')}} 634 635 v2i32 = __builtin_elementwise_fma(v2i32, v2i32, v2i32); 636 // expected-error@-1 {{1st argument must be a floating point type (was 'int2' (vector of 2 'int' values))}} 637 638 f32 = __builtin_elementwise_fma(f32, f32, i32); 639 // expected-error@-1 {{3rd argument must be a floating point type (was 'int')}} 640 641 f32 = __builtin_elementwise_fma(f32, i32, f32); 642 // expected-error@-1 {{2nd argument must be a floating point type (was 'int')}} 643 644 f32 = __builtin_elementwise_fma(f32, f32, i32); 645 // expected-error@-1 {{3rd argument must be a floating point type (was 'int')}} 646 647 648 _Complex float c1, c2, c3; 649 c1 = __builtin_elementwise_fma(c1, f32, f32); 650 // expected-error@-1 {{1st argument must be a floating point type (was '_Complex float')}} 651 652 c2 = __builtin_elementwise_fma(f32, c2, f32); 653 // expected-error@-1 {{2nd argument must be a floating point type (was '_Complex float')}} 654 655 c3 = __builtin_elementwise_fma(f32, f32, c3); 656 // expected-error@-1 {{3rd argument must be a floating point type (was '_Complex float')}} 657 } 658