Jordan Rose | 94f29f4 | 2012-07-09 16:54:53 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s |
| 2 | |
| 3 | @interface StopAtAtEnd |
| 4 | // This used to eat the @end |
| 5 | int 123 // expected-error{{expected unqualified-id}} |
| 6 | @end |
| 7 | |
| 8 | @implementation StopAtAtEnd // no-warning |
| 9 | int 123 // expected-error{{expected unqualified-id}} |
| 10 | @end |
| 11 | |
| 12 | |
| 13 | @interface StopAtMethodDecls |
| 14 | // This used to eat the method declarations |
| 15 | int 123 // expected-error{{expected unqualified-id}} |
| 16 | - (void)foo; // expected-note{{here}} |
| 17 | int 456 // expected-error{{expected unqualified-id}} |
| 18 | + (void)bar; // expected-note{{here}} |
| 19 | @end |
| 20 | |
| 21 | @implementation StopAtMethodDecls |
| 22 | int 123 // expected-error{{expected unqualified-id}} |
| 23 | - (id)foo {} // expected-warning{{conflicting return type}} |
| 24 | int 456 // expected-error{{expected unqualified-id}} |
| 25 | + (id)bar {} // expected-warning{{conflicting return type}} |
| 26 | @end |
| 27 | |
| 28 | |
| 29 | @interface EmbeddedNamespace |
| 30 | // This used to cause an infinite loop. |
| 31 | namespace NS { // expected-error{{expected unqualified-id}} |
| 32 | } |
| 33 | - (id)test; // expected-note{{here}} |
| 34 | @end |
| 35 | |
| 36 | @implementation EmbeddedNamespace |
| 37 | int 123 // expected-error{{expected unqualified-id}} |
| 38 | // We should still stop here and parse this namespace. |
| 39 | namespace NS { |
| 40 | void foo(); |
| 41 | } |
| 42 | |
| 43 | // Make sure the declaration of -test was recognized. |
| 44 | - (void)test { // expected-warning{{conflicting return type}} |
| 45 | // Make sure the declaration of NS::foo was recognized. |
| 46 | NS::foo(); |
| 47 | } |
| 48 | |
| 49 | @end |
| 50 | |
| 51 | |
| 52 | @protocol ProtocolWithEmbeddedNamespace |
| 53 | namespace NS { // expected-error{{expected unqualified-id}} |
| 54 | |
| 55 | } |
| 56 | - (void)PWEN_foo; // expected-note{{here}} |
| 57 | @end |
| 58 | |
| 59 | @interface ImplementPWEN <ProtocolWithEmbeddedNamespace> |
| 60 | @end |
| 61 | |
| 62 | @implementation ImplementPWEN |
| 63 | - (id)PWEN_foo {} // expected-warning{{conflicting return type}} |
| 64 | @end |