From 342ba4c2440d4c6962782df5fffc29699ff1a9c8 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Thu, 21 Aug 2014 17:06:57 +0000 Subject: [PATCH] Objective-C. Recover from missing interface decl. and checking on availability of method declaration instead of crashing. // rdar://18059669 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216191 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 3 ++- test/SemaObjC/attr-availability.m | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index b3e92d765f..c8c381518b 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -13634,5 +13634,6 @@ AvailabilityResult Sema::getCurContextAvailability() const { dyn_cast(D)) { D = ID->getClassInterface(); } - return D->getAvailability(); + // Recover from user error. + return D ? D->getAvailability() : AR_Available; } diff --git a/test/SemaObjC/attr-availability.m b/test/SemaObjC/attr-availability.m index 7990b1202e..c455bc7acc 100644 --- a/test/SemaObjC/attr-availability.m +++ b/test/SemaObjC/attr-availability.m @@ -60,3 +60,30 @@ void f(A *a, B *b) { } @end +// rdar://18059669 +@class NSMutableArray; + +@interface NSDictionary ++ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ... __attribute__((sentinel(0,1))); +@end + +@class NSString; + +extern NSString *NSNibTopLevelObjects __attribute__((availability(macosx,introduced=10.0 ,deprecated=10.8,message="" ))); +id NSNibOwner, topNibObjects; + +@interface AppDelegate (SIEImport) // expected-error {{cannot find interface declaration for 'AppDelegate'}} + +-(void)__attribute__((ibaction))importFromSIE:(id)sender; + +@end + +@implementation AppDelegate (SIEImport) // expected-error {{cannot find interface declaration for 'AppDelegate'}} + +-(void)__attribute__((ibaction))importFromSIE:(id)sender { + + NSMutableArray *topNibObjects; + NSDictionary *nibLoadDict = [NSDictionary dictionaryWithObjectsAndKeys:self, NSNibOwner, topNibObjects, NSNibTopLevelObjects, ((void *)0)]; +} + +@end -- 2.50.1