// 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