Remove the temporary availability checking workaround for

the nested declarations in @interface.

rdar://28825862

llvm-svn: 329324
This commit is contained in:
Alex Lorenz 2018-04-05 18:12:06 +00:00
parent 5e9059ceb1
commit 9c64f211b6
2 changed files with 2 additions and 24 deletions

View File

@ -6828,28 +6828,6 @@ static bool ShouldDiagnoseAvailabilityInContext(Sema &S, AvailabilityResult K,
return false;
};
// FIXME: This is a temporary workaround! Some existing Apple headers depends
// on nested declarations in an @interface having the availability of the
// interface when they really shouldn't: they are members of the enclosing
// context, and can referenced from there.
if (S.OriginalLexicalContext && cast<Decl>(S.OriginalLexicalContext) != Ctx) {
const auto *OrigCtx = cast<Decl>(S.OriginalLexicalContext);
if (CheckContext(OrigCtx))
return false;
// An implementation implicitly has the availability of the interface.
if (const auto *CatOrImpl = dyn_cast<ObjCImplDecl>(OrigCtx)) {
if (const ObjCInterfaceDecl *Interface = CatOrImpl->getClassInterface())
if (CheckContext(Interface))
return false;
}
// A category implicitly has the availability of the interface.
else if (const auto *CatD = dyn_cast<ObjCCategoryDecl>(OrigCtx))
if (const ObjCInterfaceDecl *Interface = CatD->getClassInterface())
if (CheckContext(Interface))
return false;
}
do {
if (CheckContext(Ctx))
return false;

View File

@ -115,9 +115,9 @@ UNAVAILABLE __attribute__((objc_root_class))
}
@end
typedef int unavailable_int UNAVAILABLE;
typedef int unavailable_int UNAVAILABLE; // expected-note {{'unavailable_int' has been explicitly marked unavailable here}}
UNAVAILABLE
@interface A
extern unavailable_int global_unavailable; // FIXME: this should be an error!
extern unavailable_int global_unavailable; // expected-error {{'unavailable_int' is unavailable: not available}}
@end