1// RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic 2 3extern int a1[]; 4 5void f0(); 6void f1(int [*]); 7void f2(int [const *]); 8void f3(int [volatile const*]); 9int f4(*XX)(void); /* expected-error {{cannot return}} expected-warning {{type specifier missing, defaults to 'int'}} */ 10int f5(int [static]); /* expected-error {{'static' may not be used without an array size}} */ 11 12char ((((*X)))); 13 14void (*signal(int, void (*)(int)))(int); 15 16int aaaa, ***C, * const D, B(int); 17 18int *A; 19 20struct str; 21 22void test2(int *P, int A) { 23 struct str; 24 25 // Hard case for array decl, not Array[*]. 26 int Array[*(int*)P+A]; 27} 28 29typedef int atype; 30void test3(x, 31 atype /* expected-error {{unexpected type name 'atype': expected identifier}} */ 32 ) int x, atype; {} 33 34void test4(x, x) int x; {} /* expected-error {{redefinition of parameter 'x'}} */ 35 36 37// PR3031 38int (test5), ; // expected-error {{expected identifier or '('}} 39 40 41 42// PR3963 & rdar://6759604 - test error recovery for mistyped "typenames". 43 44foo_t *d; // expected-error {{unknown type name 'foo_t'}} 45foo_t a; // expected-error {{unknown type name 'foo_t'}} 46int test6() { return a; } // a should be declared. 47 48// Use of tagged type without tag. rdar://6783347 49struct xyz { int y; }; 50enum myenum { ASDFAS }; 51xyz b; // expected-error {{must use 'struct' tag to refer to type 'xyz'}} 52myenum c; // expected-error {{must use 'enum' tag to refer to type 'myenum'}} 53 54float *test7() { 55 // We should recover 'b' by parsing it with a valid type of "struct xyz", which 56 // allows us to diagnose other bad things done with y, such as this. 57 return &b.y; // expected-warning {{incompatible pointer types returning 'int *' from a function with result type 'float *'}} 58} 59 60struct xyz test8() { return a; } // a should be be marked invalid, no diag. 61 62 63// Verify that implicit int still works. 64static f; // expected-warning {{type specifier missing, defaults to 'int'}} 65static g = 4; // expected-warning {{type specifier missing, defaults to 'int'}} 66static h // expected-warning {{type specifier missing, defaults to 'int'}} 67 __asm__("foo"); 68 69 70struct test9 { 71 int x // expected-error {{expected ';' at end of declaration list}} 72 int y; 73 int z // expected-warning {{expected ';' at end of declaration list}} 74}; 75 76// PR6208 77struct test10 { int a; } static test10x; 78struct test11 { int a; } const test11x; 79 80// PR6216 81void test12() { 82 (void)__builtin_offsetof(struct { char c; int i; }, i); 83} 84 85// rdar://7608537 86struct test13 { int a; } (test13x); 87 88// <rdar://problem/8044088> 89struct X<foo::int> { }; // expected-error{{expected identifier or '('}} 90 91 92// PR7617 - error recovery on missing ;. 93 94void test14() // expected-error {{expected ';' after top level declarator}} 95 96void test14a(); 97void *test14b = (void*)test14a; // Make sure test14a didn't get skipped. 98 99// rdar://problem/8358508 100long struct X { int x; } test15(); // expected-error {{'long struct' is invalid}} 101 102void test16(i) int i j; { } // expected-error {{expected ';' at end of declaration}} 103void test17(i, j) int i, j k; { } // expected-error {{expected ';' at end of declaration}} 104void knrNoSemi(i) int i { } // expected-error {{expected ';' at end of declaration}} 105 106 107// PR12595 108void test18() { 109 int x = 4+(5-12)); // expected-error {{extraneous ')' before ';'}} 110} 111 112enum E1 { e1 }: // expected-error {{expected ';'}} 113struct EnumBitfield { // expected-warning {{struct without named members is a GNU extension}} 114 enum E2 { e2 } : 4; // ok 115 struct S { int n; }: // expected-error {{expected ';'}} 116 // expected-warning@-1 {{declaration does not declare anything}} 117 118}; 119 120// PR10982 121enum E11 { 122 A1 = 1, 123}; 124 125enum E12 { 126 , // expected-error{{expected identifier}} 127 A2 128}; 129void func_E12(enum E12 *p) { *p = A2; } 130 131enum E13 { 132 1D, // expected-error{{expected identifier}} 133 A3 134}; 135void func_E13(enum E13 *p) { *p = A3; } 136 137enum E14 { 138 A4 12, // expected-error{{expected '= constant-expression' or end of enumerator definition}} 139 A4a 140}; 141void func_E14(enum E14 *p) { *p = A4a; } 142 143enum E15 { 144 A5=12 4, // expected-error{{expected '}' or ','}} 145 A5a 146}; 147void func_E15(enum E15 *p) { *p = A5a; } 148 149enum E16 { 150 A6; // expected-error{{expected '= constant-expression' or end of enumerator definition}} 151 A6a 152}; 153 154int PR20634 = sizeof(struct { int n; } [5]); 155