| 1 | // RUN: %clang_cc1 %s -fblocks -pedantic -verify -triple=x86_64-apple-darwin9 |
| 2 | // RUN: %clang_cc1 %s -fblocks -pedantic -verify -triple=mips64-linux-gnu |
| 3 | // RUN: %clang_cc1 %s -fblocks -pedantic -verify -triple=x86_64-unknown-linux |
| 4 | // RUN: %clang_cc1 %s -fblocks -pedantic -verify -triple=x86_64-unknown-linux-gnux32 |
| 5 | |
| 6 | // rdar://6097662 |
| 7 | typedef int (*T)[2]; |
| 8 | restrict T x; |
| 9 | |
| 10 | typedef int *S[2]; |
| 11 | restrict S y; // expected-error {{restrict requires a pointer or reference ('S' (aka 'int *[2]') is invalid)}} |
| 12 | |
| 13 | |
| 14 | |
| 15 | // int128_t is available. |
| 16 | int a() { |
| 17 | __int128_t s; |
| 18 | __uint128_t t; |
| 19 | } |
| 20 | // but not a keyword |
| 21 | int b() { |
| 22 | int __int128_t; |
| 23 | int __uint128_t; |
| 24 | } |
| 25 | // __int128 is a keyword |
| 26 | int c() { |
| 27 | __int128 i; |
| 28 | unsigned __int128 j; |
| 29 | long unsigned __int128 k; // expected-error {{'long __int128' is invalid}} |
| 30 | int __int128; // expected-error {{cannot combine with previous}} expected-warning {{does not declare anything}} |
| 31 | } |
| 32 | // __int128_t is __int128; __uint128_t is unsigned __int128. |
| 33 | typedef __int128 check_int_128; |
| 34 | typedef __int128_t check_int_128; // expected-note {{here}} |
| 35 | typedef int check_int_128; // expected-error {{different types ('int' vs '__int128_t' (aka '__int128'))}} |
| 36 | |
| 37 | typedef unsigned __int128 check_uint_128; |
| 38 | typedef __uint128_t check_uint_128; // expected-note {{here}} |
| 39 | typedef int check_uint_128; // expected-error {{different types ('int' vs '__uint128_t' (aka 'unsigned __int128'))}} |
| 40 | |
| 41 | // Array type merging should convert array size to whatever matches the target |
| 42 | // pointer size. |
| 43 | // rdar://6880874 |
| 44 | extern int i[1LL]; |
| 45 | int i[(short)1]; |
| 46 | |
| 47 | enum e { e_1 }; |
| 48 | extern int j[sizeof(enum e)]; // expected-note {{previous declaration}} |
| 49 | int j[42]; // expected-error {{redefinition of 'j' with a different type: 'int [42]' vs 'int [4]'}} |
| 50 | |
| 51 | // rdar://6880104 |
| 52 | _Decimal32 x; // expected-error {{GNU decimal type extension not supported}} |
| 53 | |
| 54 | |
| 55 | // rdar://6880951 |
| 56 | int __attribute__ ((vector_size (8), vector_size (8))) v; // expected-error {{invalid vector element type}} |
| 57 | |
| 58 | void test(int i) { |
| 59 | char c = (char __attribute__((aligned(8)))) i; // expected-warning {{'aligned' attribute ignored when parsing type}} |
| 60 | } |
| 61 | |
| 62 | // http://llvm.org/PR11082 |
| 63 | // |
| 64 | // FIXME: This may or may not be the correct approach (no warning or error), |
| 65 | // but large amounts of Linux and FreeBSD code need this attribute to not be |
| 66 | // a hard error in order to work correctly. |
| 67 | void test2(int i) { |
| 68 | char c = (char __attribute__((may_alias))) i; |
| 69 | } |
| 70 | |
| 71 | // vector size too large |
| 72 | int __attribute__ ((vector_size(8192))) x1; // expected-error {{vector size too large}} |
| 73 | typedef int __attribute__ ((ext_vector_type(8192))) x2; // expected-error {{vector size too large}} |
| 74 | |
| 75 | // no support for vector enum type |
| 76 | enum { e_2 } x3 __attribute__((vector_size(64))); // expected-error {{invalid vector element type}} |
| 77 | |
| 78 | int x4 __attribute__((ext_vector_type(64))); // expected-error {{'ext_vector_type' attribute only applies to typedefs}} |
| 79 | |
| 80 | // rdar://16492792 |
| 81 | typedef __attribute__ ((ext_vector_type(32),__aligned__(32))) unsigned char uchar32; |
| 82 | |
| 83 | void convert() { |
| 84 | uchar32 r = 0; |
| 85 | r.s[ 1234 ] = 1; // expected-error {{illegal vector component name 's'}} |
| 86 | } |
| 87 | |
| 88 | int &*_Atomic null_type_0; // expected-error {{expected identifier or '('}} |
| 89 | int &*__restrict__ null_type_1; // expected-error {{expected identifier or '('}} |
| 90 | int ^_Atomic null_type_2; // expected-error {{block pointer to non-function type is invalid}} |
| 91 | |