blob: 48936d59226968bb6d5a0d6c4abb642d926921ab [file] [log] [blame]
Daniel Dunbar8fbe78f2009-12-15 20:14:24 +00001// RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic
Chris Lattnerdf89dd42006-08-06 18:22:00 +00002
Chris Lattner7cf04d12007-06-08 18:15:09 +00003extern int a1[];
Chris Lattnerdf89dd42006-08-06 18:22:00 +00004
5void f0();
6void f1(int [*]);
7void f2(int [const *]);
8void f3(int [volatile const*]);
Chris Lattner9d51f2b2008-04-05 06:32:51 +00009int f4(*XX)(void); /* expected-error {{cannot return}} expected-warning {{type specifier missing, defaults to 'int'}} */
David Majnemerf9834d52014-08-08 07:21:18 +000010int f5(int [static]); /* expected-error {{'static' may not be used without an array size}} */
Chris Lattnerdf89dd42006-08-06 18:22:00 +000011
12char ((((*X))));
13
14void (*signal(int, void (*)(int)))(int);
15
Chris Lattner67b0d6a2009-04-12 22:12:26 +000016int aaaa, ***C, * const D, B(int);
Chris Lattnerdf89dd42006-08-06 18:22:00 +000017
18int *A;
19
Chris Lattner7bddb3f2006-08-13 19:59:13 +000020struct str;
21
Mike Stump753d1202009-07-22 00:43:08 +000022void test2(int *P, int A) {
Chris Lattner7bddb3f2006-08-13 19:59:13 +000023 struct str;
24
25 // Hard case for array decl, not Array[*].
Chris Lattner3b51ddf2006-08-12 18:40:31 +000026 int Array[*(int*)P+A];
27}
Chris Lattner7bddb3f2006-08-13 19:59:13 +000028
Chris Lattner67b450c2008-04-06 06:47:48 +000029typedef int atype;
Mike Stump753d1202009-07-22 00:43:08 +000030void test3(x,
31 atype /* expected-error {{unexpected type name 'atype': expected identifier}} */
32 ) int x, atype; {}
Chris Lattner7bddb3f2006-08-13 19:59:13 +000033
Mike Stump753d1202009-07-22 00:43:08 +000034void test4(x, x) int x; {} /* expected-error {{redefinition of parameter 'x'}} */
Chris Lattner285a3e42008-04-06 06:50:56 +000035
Chris Lattner8c5dd732008-11-11 06:13:16 +000036
37// PR3031
38int (test5), ; // expected-error {{expected identifier or '('}}
39
Chris Lattner6cc055a2009-04-12 20:42:31 +000040
41
42// PR3963 & rdar://6759604 - test error recovery for mistyped "typenames".
43
Chris Lattner6cc055a2009-04-12 20:42:31 +000044foo_t *d; // expected-error {{unknown type name 'foo_t'}}
Chris Lattner67b0d6a2009-04-12 22:12:26 +000045foo_t a; // expected-error {{unknown type name 'foo_t'}}
Chris Lattnerffaa0e62009-04-12 21:49:30 +000046int test6() { return a; } // a should be declared.
Chris Lattner6cc055a2009-04-12 20:42:31 +000047
Chris Lattnerffaa0e62009-04-12 21:49:30 +000048// Use of tagged type without tag. rdar://6783347
49struct xyz { int y; };
50enum myenum { ASDFAS };
John McCall38200b02010-02-14 01:03:10 +000051xyz 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'}}
Chris Lattnerffaa0e62009-04-12 21:49:30 +000053
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.
Douglas Gregorc68e1402010-04-09 00:35:39 +000057 return &b.y; // expected-warning {{incompatible pointer types returning 'int *' from a function with result type 'float *'}}
Chris Lattnerffaa0e62009-04-12 21:49:30 +000058}
59
Chris Lattner67b0d6a2009-04-12 22:12:26 +000060struct xyz test8() { return a; } // a should be be marked invalid, no diag.
61
Chris Lattnerffaa0e62009-04-12 21:49:30 +000062
63// Verify that implicit int still works.
Chris Lattner6cc055a2009-04-12 20:42:31 +000064static 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'}}
Eli Friedman2b680b42009-04-28 03:13:54 +000067 __asm__("foo");
Chris Lattner245c5332010-02-02 00:37:27 +000068
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};
Chris Lattnerafe6a842010-02-02 17:32:27 +000075
76// PR6208
77struct test10 { int a; } static test10x;
78struct test11 { int a; } const test11x;
Chris Lattner35af0ab2010-02-03 01:45:03 +000079
80// PR6216
81void test12() {
82 (void)__builtin_offsetof(struct { char c; int i; }, i);
83}
Chris Lattner5e854b92010-02-03 20:41:24 +000084
85// rdar://7608537
86struct test13 { int a; } (test13x);
Douglas Gregord5a479c2010-05-30 22:30:21 +000087
88// <rdar://problem/8044088>
89struct X<foo::int> { }; // expected-error{{expected identifier or '('}}
Chris Lattner13901342010-07-11 22:42:07 +000090
91
92// PR7617 - error recovery on missing ;.
93
Chris Lattneref74e2b22010-07-11 22:46:04 +000094void test14() // expected-error {{expected ';' after top level declarator}}
Chris Lattner13901342010-07-11 22:42:07 +000095
96void test14a();
97void *test14b = (void*)test14a; // Make sure test14a didn't get skipped.
John McCalla3707cc2010-08-26 17:22:34 +000098
99// rdar://problem/8358508
John McCallc162d1b2010-08-26 17:42:30 +0000100long struct X { int x; } test15(); // expected-error {{'long struct' is invalid}}
David Blaikie89f13cb2012-04-06 23:33:59 +0000101
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}}
Alp Tokereec81012014-01-05 03:27:57 +0000104void knrNoSemi(i) int i { } // expected-error {{expected ';' at end of declaration}}
Chris Lattner02f1b612012-04-28 16:12:17 +0000105
106
107// PR12595
108void test18() {
109 int x = 4+(5-12)); // expected-error {{extraneous ')' before ';'}}
110}
111
Richard Smith200f47c2012-07-02 19:14:01 +0000112enum E1 { e1 }: // expected-error {{expected ';'}}
Serge Pavlov89578fd2013-06-08 13:29:58 +0000113struct EnumBitfield { // expected-warning {{struct without named members is a GNU extension}}
Richard Smith200f47c2012-07-02 19:14:01 +0000114 enum E2 { e2 } : 4; // ok
115 struct S { int n; }: // expected-error {{expected ';'}}
Fariborz Jahanianffc120a2014-08-26 21:10:47 +0000116 // expected-warning@-1 {{declaration does not declare anything}}
Serge Pavlov89578fd2013-06-08 13:29:58 +0000117
Richard Smith200f47c2012-07-02 19:14:01 +0000118};
Serge Pavlov2e3ecb62013-12-31 06:26:03 +0000119
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};
Richard Smith843f18f2014-08-13 02:13:15 +0000153
154int PR20634 = sizeof(struct { int n; } [5]);