mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-01 01:31:26 +00:00
Fix: allow @protocol forward declarations inside @implementation-s.
llvm-svn: 146147
This commit is contained in:
parent
311084734d
commit
f988785dc0
@ -1343,7 +1343,6 @@ Decl *Parser::ParseObjCAtProtocolDeclaration(SourceLocation AtLoc,
|
||||
ParsedAttributes &attrs) {
|
||||
assert(Tok.isObjCAtKeyword(tok::objc_protocol) &&
|
||||
"ParseObjCAtProtocolDeclaration(): Expected @protocol");
|
||||
CheckNestedObjCContexts(AtLoc);
|
||||
ConsumeToken(); // the "protocol" identifier
|
||||
|
||||
if (Tok.is(tok::code_completion)) {
|
||||
@ -1367,6 +1366,8 @@ Decl *Parser::ParseObjCAtProtocolDeclaration(SourceLocation AtLoc,
|
||||
attrs.getList());
|
||||
}
|
||||
|
||||
CheckNestedObjCContexts(AtLoc);
|
||||
|
||||
if (Tok.is(tok::comma)) { // list of forward declarations.
|
||||
SmallVector<IdentifierLocPair, 8> ProtocolRefs;
|
||||
ProtocolRefs.push_back(std::make_pair(protocolName, nameLoc));
|
||||
|
51
clang/test/Parser/missing-end-4.m
Normal file
51
clang/test/Parser/missing-end-4.m
Normal file
@ -0,0 +1,51 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||
|
||||
@interface X1
|
||||
@end
|
||||
@implementation X1 // expected-note {{implementation started here}}
|
||||
@interface Y1 // expected-error {{missing '@end'}}
|
||||
@end
|
||||
@end // expected-error {{'@end' must appear in an Objective-C context}}
|
||||
|
||||
@interface X2
|
||||
@end
|
||||
@implementation X2 // expected-note {{implementation started here}}
|
||||
@protocol Y2 // expected-error {{missing '@end'}}
|
||||
@end
|
||||
@end // expected-error {{'@end' must appear in an Objective-C context}}
|
||||
|
||||
@interface X6 // expected-note {{class started here}}
|
||||
@interface X7 // expected-error {{missing '@end'}}
|
||||
@end
|
||||
@end // expected-error {{'@end' must appear in an Objective-C context}}
|
||||
|
||||
@protocol P1 // expected-note {{protocol started here}}
|
||||
@interface P2 // expected-error {{missing '@end'}}
|
||||
@end
|
||||
@end // expected-error {{'@end' must appear in an Objective-C context}}
|
||||
|
||||
@interface X4 // expected-note {{class started here}}
|
||||
@implementation X4 // expected-error {{missing '@end'}}
|
||||
@end
|
||||
@end // expected-error {{'@end' must appear in an Objective-C context}}
|
||||
|
||||
@interface I
|
||||
@end
|
||||
@implementation I
|
||||
@protocol P; // forward declarations of protocols in @implementations is allowed
|
||||
@class C; // forward declarations of classes in @implementations is allowed
|
||||
- (C<P>*) MyMeth {}
|
||||
@end
|
||||
|
||||
@interface I2 {}
|
||||
@protocol P2; // expected-error {{illegal interface qualifier}}
|
||||
@class C2; // expected-error {{illegal interface qualifier}}
|
||||
@end
|
||||
|
||||
@interface I3
|
||||
@end
|
||||
@implementation I3
|
||||
- Meth {}
|
||||
+ Cls {}
|
||||
@protocol P3;
|
||||
@end
|
Loading…
Reference in New Issue
Block a user