Home | History | Annotate | Download | only in Sema
      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 types}}
     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