]> granicus.if.org Git - clang/commitdiff
Remove the temporary availability checking workaround for
authorAlex Lorenz <arphaman@gmail.com>
Thu, 5 Apr 2018 18:12:06 +0000 (18:12 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Thu, 5 Apr 2018 18:12:06 +0000 (18:12 +0000)
the nested declarations in @interface.

rdar://28825862

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329324 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDeclAttr.cpp
test/SemaObjC/class-unavail-warning.m

index 1d2c3b55342cdede32c50e9ea8a1a659a0fe68c0..709ba377a4b63faecce7f0e0f160a0bf04df02d2 100644 (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;
index f7d8f569ca67bbe749bad5db48089f64a8ec51eb..30ebf7939edf48b531ed6198e35a03db64daf2a6 100644 (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