forked from OSchip/llvm-project
ObjectiveC: ObjC declarations, including forward class
and protocols can be at global scope only. llvm-svn: 191155
This commit is contained in:
parent
829aec5900
commit
aa78931e91
|
@ -809,6 +809,12 @@ Sema::ActOnForwardProtocolDeclaration(SourceLocation AtProtocolLoc,
|
|||
unsigned NumElts,
|
||||
AttributeList *attrList) {
|
||||
SmallVector<Decl *, 8> DeclsInGroup;
|
||||
if (isa<ObjCContainerDecl>(CurContext)) {
|
||||
Diag(AtProtocolLoc,
|
||||
diag::err_objc_decls_may_only_appear_in_global_scope);
|
||||
return BuildDeclaratorGroup(DeclsInGroup, false);
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i != NumElts; ++i) {
|
||||
IdentifierInfo *Ident = IdentList[i].first;
|
||||
ObjCProtocolDecl *PrevDecl = LookupProtocol(Ident, IdentList[i].second,
|
||||
|
@ -1927,6 +1933,12 @@ Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc,
|
|||
SourceLocation *IdentLocs,
|
||||
unsigned NumElts) {
|
||||
SmallVector<Decl *, 8> DeclsInGroup;
|
||||
if (isa<ObjCContainerDecl>(CurContext)) {
|
||||
Diag(AtClassLoc,
|
||||
diag::err_objc_decls_may_only_appear_in_global_scope);
|
||||
return BuildDeclaratorGroup(DeclsInGroup, false);
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i != NumElts; ++i) {
|
||||
// Check for another declaration kind with the same name.
|
||||
NamedDecl *PrevDecl
|
||||
|
|
|
@ -32,9 +32,9 @@
|
|||
@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 {}
|
||||
@protocol P; // expected-error {{Objective-C declarations may only appear in global scope}}
|
||||
@class C; // expected-error {{Objective-C declarations may only appear in global scope}}
|
||||
- (C<P>*) MyMeth {} // expected-error {{expected a type}}
|
||||
@end
|
||||
|
||||
@interface I2 {}
|
||||
|
@ -47,5 +47,5 @@
|
|||
@implementation I3
|
||||
- Meth {}
|
||||
+ Cls {}
|
||||
@protocol P3;
|
||||
@protocol P3; // expected-error {{Objective-C declarations may only appear in global scope}}
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue