mirror of https://github.com/microsoft/clang.git
[Sema][ObjC] Process category attributes before checking protocol uses
This ensures that any availability attributes are attached to the category before the availability for the referenced protocols is checked. rdar://37829755 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@325994 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
09dd8b45bd
commit
af90db31b5
|
@ -1835,6 +1835,13 @@ ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc,
|
||||||
// FIXME: PushOnScopeChains?
|
// FIXME: PushOnScopeChains?
|
||||||
CurContext->addDecl(CDecl);
|
CurContext->addDecl(CDecl);
|
||||||
|
|
||||||
|
// Process the attributes before looking at protocols to ensure that the
|
||||||
|
// availability attribute is attached to the category to provide availability
|
||||||
|
// checking for protocol uses.
|
||||||
|
if (AttrList)
|
||||||
|
ProcessDeclAttributeList(TUScope, CDecl, AttrList);
|
||||||
|
AddPragmaAttributes(TUScope, CDecl);
|
||||||
|
|
||||||
if (NumProtoRefs) {
|
if (NumProtoRefs) {
|
||||||
diagnoseUseOfProtocols(*this, CDecl, (ObjCProtocolDecl*const*)ProtoRefs,
|
diagnoseUseOfProtocols(*this, CDecl, (ObjCProtocolDecl*const*)ProtoRefs,
|
||||||
NumProtoRefs, ProtoLocs);
|
NumProtoRefs, ProtoLocs);
|
||||||
|
@ -1846,10 +1853,6 @@ ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc,
|
||||||
NumProtoRefs, Context);
|
NumProtoRefs, Context);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AttrList)
|
|
||||||
ProcessDeclAttributeList(TUScope, CDecl, AttrList);
|
|
||||||
AddPragmaAttributes(TUScope, CDecl);
|
|
||||||
|
|
||||||
CheckObjCDeclScope(CDecl);
|
CheckObjCDeclScope(CDecl);
|
||||||
return ActOnObjCContainerStartDefinition(CDecl);
|
return ActOnObjCContainerStartDefinition(CDecl);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
// RUN: %clang_cc1 -triple arm64-apple-ios10 -Wunguarded-availability -fblocks -fsyntax-only -verify %s
|
||||||
|
|
||||||
|
__attribute__((availability(ios,unavailable)))
|
||||||
|
@protocol Prot // expected-note {{here}}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface A
|
||||||
|
@end
|
||||||
|
|
||||||
|
__attribute__((availability(ios,unavailable)))
|
||||||
|
@interface A (Cat) <Prot> // No error.
|
||||||
|
@end
|
||||||
|
|
||||||
|
__attribute__((availability(tvos,unavailable)))
|
||||||
|
@interface B @end
|
||||||
|
@interface B (Cat) <Prot> // expected-error {{'Prot' is unavailable: not available on iOS}}
|
||||||
|
@end
|
Loading…
Reference in New Issue