// RUN: %clang_cc1 %s -fblocks -pedantic -verify -triple=x86_64-apple-darwin9
// RUN: %clang_cc1 %s -fblocks -pedantic -verify -triple=mips64-linux-gnu
// RUN: %clang_cc1 %s -fblocks -pedantic -verify -triple=x86_64-unknown-linux
// RUN: %clang_cc1 %s -fblocks -pedantic -verify -triple=x86_64-unknown-linux-gnux32
// RUN: %clang_cc1 %s -fblocks -pedantic -pedantic -verify -triple=arm64_32-apple-ios7.0
// RUN: %clang_cc1 %s -fblocks -pedantic -verify -triple=powerpc64-ibm-aix-xcoff
// rdar://6097662
typedef int ;
restrict T x;
typedef int *S;
restrict S y; // expected-error {{restrict requires a pointer or reference ('S' (aka 'int *[2]') is invalid)}}
// int128_t is available.
int
// but not a keyword
int
// __int128 is a keyword
int
// __int128_t is __int128; __uint128_t is unsigned __int128.
typedef __int128 check_int_128;
typedef __int128_t check_int_128; // expected-note {{here}}
typedef int check_int_128; // expected-error {{different types ('int' vs '__int128_t' (aka '__int128'))}}
typedef unsigned __int128 check_uint_128;
typedef __uint128_t check_uint_128; // expected-note {{here}}
typedef int check_uint_128; // expected-error {{different types ('int' vs '__uint128_t' (aka 'unsigned __int128'))}}
// Array type merging should convert array size to whatever matches the target
// pointer size.
// rdar://6880874
extern int i;
int i;
;
extern int j; // expected-note {{previous declaration}}
int j; // expected-error {{redefinition of 'j' with a different type: 'int[42]' vs 'int[4]'}}
// rdar://6880104
_Decimal32 x; // expected-error {{GNU decimal type extension not supported}}
// rdar://6880951
int v; // expected-error {{invalid vector element type}}
void
// http://llvm.org/PR11082
//
// FIXME: This may or may not be the correct approach (no warning or error),
// but large amounts of Linux and FreeBSD code need this attribute to not be
// a hard error in order to work correctly.
void
// vector size
int v1;
int v2; // expected-error {{vector size too large}}
int v3; // expected-error {{vector size too large}}
int v4; // expected-error {{zero vector size}}
typedef int e1;
typedef int e2; // expected-error {{vector size too large}}
typedef int e3; // expected-error {{vector size too large}}
typedef int e4; // expected-error {{zero vector size}}
// no support for vector enum type
x3 ; // expected-error {{invalid vector element type}}
int x4 ; // expected-error {{'ext_vector_type' attribute only applies to typedefs}}
// rdar://16492792
typedef unsigned char uchar32;
void
int &*_Atomic null_type_0; // expected-error {{expected identifier or '('}}
int &*__restrict__ null_type_1; // expected-error {{expected identifier or '('}}
int ^_Atomic null_type_2; // expected-error {{block pointer to non-function type is invalid}}