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