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.
a()13 int a() {
14 __int128_t s;
15 __uint128_t t;
16 }
17 // but not a keyword
b()18 int b() {
19 int __int128_t;
20 int __uint128_t;
21 }
22 // __int128 is a keyword
c()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}}
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
test(int i)55 void test(int i) {
56 char c = (char __attribute__((align(8)))) i; // expected-error {{'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.
test2(int i)64 void test2(int i) {
65 char c = (char __attribute__((may_alias))) i;
66 }
67