| // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s | 
 |  | 
 | @interface StopAtAtEnd | 
 | // This used to eat the @end | 
 | int 123 // expected-error{{expected unqualified-id}} | 
 | @end | 
 |  | 
 | @implementation StopAtAtEnd // no-warning | 
 | int 123 // expected-error{{expected unqualified-id}} | 
 | @end | 
 |  | 
 |  | 
 | @interface StopAtMethodDecls | 
 | // This used to eat the method declarations | 
 | int 123 // expected-error{{expected unqualified-id}} | 
 | - (void)foo; // expected-note{{here}} | 
 | int 456 // expected-error{{expected unqualified-id}} | 
 | + (void)bar; // expected-note{{here}} | 
 | @end | 
 |  | 
 | @implementation StopAtMethodDecls | 
 | int 123 // expected-error{{expected unqualified-id}} | 
 | - (id)foo {} // expected-warning{{conflicting return type}} | 
 | int 456 // expected-error{{expected unqualified-id}} | 
 | + (id)bar {} // expected-warning{{conflicting return type}} | 
 | @end | 
 |  | 
 |  | 
 | @interface EmbeddedNamespace | 
 | // This used to cause an infinite loop. | 
 | namespace NS { // expected-error{{expected unqualified-id}} | 
 | } | 
 | - (id)test; // expected-note{{here}} | 
 | @end | 
 |  | 
 | @implementation EmbeddedNamespace | 
 | int 123 // expected-error{{expected unqualified-id}} | 
 | // We should still stop here and parse this namespace. | 
 | namespace NS { | 
 |   void foo(); | 
 | } | 
 |  | 
 | // Make sure the declaration of -test was recognized. | 
 | - (void)test { // expected-warning{{conflicting return type}} | 
 |   // Make sure the declaration of NS::foo was recognized. | 
 |   NS::foo(); | 
 | } | 
 |  | 
 | @end | 
 |  | 
 |  | 
 | @protocol ProtocolWithEmbeddedNamespace | 
 | namespace NS { // expected-error{{expected unqualified-id}} | 
 |  | 
 | } | 
 | - (void)PWEN_foo; // expected-note{{here}} | 
 | @end | 
 |  | 
 | @interface ImplementPWEN <ProtocolWithEmbeddedNamespace> | 
 | @end | 
 |  | 
 | @implementation ImplementPWEN | 
 | - (id)PWEN_foo {} // expected-warning{{conflicting return type}} | 
 | @end |