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