Daniel Dunbar | 8fbe78f | 2009-12-15 20:14:24 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic |
Chris Lattner | df89dd4 | 2006-08-06 18:22:00 +0000 | [diff] [blame] | 2 | |
Chris Lattner | 7cf04d1 | 2007-06-08 18:15:09 +0000 | [diff] [blame] | 3 | extern int a1[]; |
Chris Lattner | df89dd4 | 2006-08-06 18:22:00 +0000 | [diff] [blame] | 4 | |
| 5 | void f0(); |
| 6 | void f1(int [*]); |
| 7 | void f2(int [const *]); |
| 8 | void f3(int [volatile const*]); |
Chris Lattner | 9d51f2b | 2008-04-05 06:32:51 +0000 | [diff] [blame] | 9 | int f4(*XX)(void); /* expected-error {{cannot return}} expected-warning {{type specifier missing, defaults to 'int'}} */ |
Chris Lattner | df89dd4 | 2006-08-06 18:22:00 +0000 | [diff] [blame] | 10 | |
| 11 | char ((((*X)))); |
| 12 | |
| 13 | void (*signal(int, void (*)(int)))(int); |
| 14 | |
Chris Lattner | 67b0d6a | 2009-04-12 22:12:26 +0000 | [diff] [blame] | 15 | int aaaa, ***C, * const D, B(int); |
Chris Lattner | df89dd4 | 2006-08-06 18:22:00 +0000 | [diff] [blame] | 16 | |
| 17 | int *A; |
| 18 | |
Chris Lattner | 7bddb3f | 2006-08-13 19:59:13 +0000 | [diff] [blame] | 19 | struct str; |
| 20 | |
Mike Stump | 753d120 | 2009-07-22 00:43:08 +0000 | [diff] [blame] | 21 | void test2(int *P, int A) { |
Chris Lattner | 7bddb3f | 2006-08-13 19:59:13 +0000 | [diff] [blame] | 22 | struct str; |
| 23 | |
| 24 | // Hard case for array decl, not Array[*]. |
Chris Lattner | 3b51ddf | 2006-08-12 18:40:31 +0000 | [diff] [blame] | 25 | int Array[*(int*)P+A]; |
| 26 | } |
Chris Lattner | 7bddb3f | 2006-08-13 19:59:13 +0000 | [diff] [blame] | 27 | |
Chris Lattner | 67b450c | 2008-04-06 06:47:48 +0000 | [diff] [blame] | 28 | typedef int atype; |
Mike Stump | 753d120 | 2009-07-22 00:43:08 +0000 | [diff] [blame] | 29 | void test3(x, |
| 30 | atype /* expected-error {{unexpected type name 'atype': expected identifier}} */ |
| 31 | ) int x, atype; {} |
Chris Lattner | 7bddb3f | 2006-08-13 19:59:13 +0000 | [diff] [blame] | 32 | |
Mike Stump | 753d120 | 2009-07-22 00:43:08 +0000 | [diff] [blame] | 33 | void test4(x, x) int x; {} /* expected-error {{redefinition of parameter 'x'}} */ |
Chris Lattner | 285a3e4 | 2008-04-06 06:50:56 +0000 | [diff] [blame] | 34 | |
Chris Lattner | 8c5dd73 | 2008-11-11 06:13:16 +0000 | [diff] [blame] | 35 | |
| 36 | // PR3031 |
| 37 | int (test5), ; // expected-error {{expected identifier or '('}} |
| 38 | |
Chris Lattner | 6cc055a | 2009-04-12 20:42:31 +0000 | [diff] [blame] | 39 | |
| 40 | |
| 41 | // PR3963 & rdar://6759604 - test error recovery for mistyped "typenames". |
| 42 | |
Chris Lattner | 6cc055a | 2009-04-12 20:42:31 +0000 | [diff] [blame] | 43 | foo_t *d; // expected-error {{unknown type name 'foo_t'}} |
Chris Lattner | 67b0d6a | 2009-04-12 22:12:26 +0000 | [diff] [blame] | 44 | foo_t a; // expected-error {{unknown type name 'foo_t'}} |
Chris Lattner | ffaa0e6 | 2009-04-12 21:49:30 +0000 | [diff] [blame] | 45 | int test6() { return a; } // a should be declared. |
Chris Lattner | 6cc055a | 2009-04-12 20:42:31 +0000 | [diff] [blame] | 46 | |
Chris Lattner | ffaa0e6 | 2009-04-12 21:49:30 +0000 | [diff] [blame] | 47 | // Use of tagged type without tag. rdar://6783347 |
| 48 | struct xyz { int y; }; |
| 49 | enum myenum { ASDFAS }; |
| 50 | xyz b; // expected-error {{use of tagged type 'xyz' without 'struct' tag}} |
| 51 | myenum c; // expected-error {{use of tagged type 'myenum' without 'enum' tag}} |
| 52 | |
| 53 | float *test7() { |
| 54 | // We should recover 'b' by parsing it with a valid type of "struct xyz", which |
| 55 | // allows us to diagnose other bad things done with y, such as this. |
| 56 | return &b.y; // expected-warning {{incompatible pointer types returning 'int *', expected 'float *'}} |
| 57 | } |
| 58 | |
Chris Lattner | 67b0d6a | 2009-04-12 22:12:26 +0000 | [diff] [blame] | 59 | struct xyz test8() { return a; } // a should be be marked invalid, no diag. |
| 60 | |
Chris Lattner | ffaa0e6 | 2009-04-12 21:49:30 +0000 | [diff] [blame] | 61 | |
| 62 | // Verify that implicit int still works. |
Chris Lattner | 6cc055a | 2009-04-12 20:42:31 +0000 | [diff] [blame] | 63 | static f; // expected-warning {{type specifier missing, defaults to 'int'}} |
| 64 | static g = 4; // expected-warning {{type specifier missing, defaults to 'int'}} |
| 65 | static h // expected-warning {{type specifier missing, defaults to 'int'}} |
Eli Friedman | 2b680b4 | 2009-04-28 03:13:54 +0000 | [diff] [blame] | 66 | __asm__("foo"); |
Chris Lattner | 245c533 | 2010-02-02 00:37:27 +0000 | [diff] [blame] | 67 | |
| 68 | |
| 69 | struct test9 { |
| 70 | int x // expected-error {{expected ';' at end of declaration list}} |
| 71 | int y; |
| 72 | int z // expected-warning {{expected ';' at end of declaration list}} |
| 73 | }; |
Chris Lattner | afe6a84 | 2010-02-02 17:32:27 +0000 | [diff] [blame] | 74 | |
| 75 | // PR6208 |
| 76 | struct test10 { int a; } static test10x; |
| 77 | struct test11 { int a; } const test11x; |
Chris Lattner | 35af0ab | 2010-02-03 01:45:03 +0000 | [diff] [blame] | 78 | |
| 79 | // PR6216 |
| 80 | void test12() { |
| 81 | (void)__builtin_offsetof(struct { char c; int i; }, i); |
| 82 | } |
Chris Lattner | 5e854b9 | 2010-02-03 20:41:24 +0000 | [diff] [blame^] | 83 | |
| 84 | // rdar://7608537 |
| 85 | struct test13 { int a; } (test13x); |