Author: mren Date: Tue Oct 11 16:18:20 2016 New Revision: 283943 URL: http://llvm.org/viewvc/llvm-project?rev=283943&view=rev Log: Module: for ObjectiveC, be consistent when checking hidden decls.
In MatchAllMethodDeclarations, when checking a hidden decl, be sure to allow hidden when searching for methods. rdar://28699972 Added: cfe/trunk/test/Modules/Inputs/objc-hidden/ cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/ cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Headers/ cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Headers/FakeUnavailableObjCFramework.h cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Modules/ cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Modules/module.modulemap cfe/trunk/test/Modules/Inputs/objc-hidden/System/ cfe/trunk/test/Modules/Inputs/objc-hidden/System/X.h cfe/trunk/test/Modules/Inputs/objc-hidden/System/module.map cfe/trunk/test/Modules/objc-hidden.m Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=283943&r1=283942&r2=283943&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original) +++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Tue Oct 11 16:18:20 2016 @@ -2741,7 +2741,7 @@ void Sema::MatchAllMethodDeclarations(co } else { ObjCMethodDecl *ImpMethodDecl = IMPDecl->getInstanceMethod(I->getSelector()); - assert(CDecl->getInstanceMethod(I->getSelector()) && + assert(CDecl->getInstanceMethod(I->getSelector(), true/*AllowHidden*/) && "Expected to find the method through lookup as well"); // ImpMethodDecl may be null as in a @dynamic property. if (ImpMethodDecl) { @@ -2767,7 +2767,7 @@ void Sema::MatchAllMethodDeclarations(co } else { ObjCMethodDecl *ImpMethodDecl = IMPDecl->getClassMethod(I->getSelector()); - assert(CDecl->getClassMethod(I->getSelector()) && + assert(CDecl->getClassMethod(I->getSelector(), true/*AllowHidden*/) && "Expected to find the method through lookup as well"); // ImpMethodDecl may be null as in a @dynamic property. if (ImpMethodDecl) { Added: cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Headers/FakeUnavailableObjCFramework.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Headers/FakeUnavailableObjCFramework.h?rev=283943&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Headers/FakeUnavailableObjCFramework.h (added) +++ cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Headers/FakeUnavailableObjCFramework.h Tue Oct 11 16:18:20 2016 @@ -0,0 +1,7 @@ +#include <X.h> + +__attribute__((availability(macosx,introduced=1066.0))) __attribute__((availability(ios,introduced=1066.0))) +@interface UnavailableObjCClass : NSObject +- (void)someMethod; +@end + Added: cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Modules/module.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Modules/module.modulemap?rev=283943&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Modules/module.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/objc-hidden/FakeUnavailableObjCFramework.framework/Modules/module.modulemap Tue Oct 11 16:18:20 2016 @@ -0,0 +1,5 @@ +framework module FakeUnavailableObjCFramework { + umbrella header "FakeUnavailableObjCFramework.h" + // Do not export to test hidden decls. + // export * +} Added: cfe/trunk/test/Modules/Inputs/objc-hidden/System/X.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/objc-hidden/System/X.h?rev=283943&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/objc-hidden/System/X.h (added) +++ cfe/trunk/test/Modules/Inputs/objc-hidden/System/X.h Tue Oct 11 16:18:20 2016 @@ -0,0 +1,5 @@ +@protocol NSObject +@property (readonly) int hash; +@end +@interface NSObject <NSObject> +@end Added: cfe/trunk/test/Modules/Inputs/objc-hidden/System/module.map URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/objc-hidden/System/module.map?rev=283943&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/objc-hidden/System/module.map (added) +++ cfe/trunk/test/Modules/Inputs/objc-hidden/System/module.map Tue Oct 11 16:18:20 2016 @@ -0,0 +1,4 @@ +module X { + header "X.h" + export * +} Added: cfe/trunk/test/Modules/objc-hidden.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/objc-hidden.m?rev=283943&view=auto ============================================================================== --- cfe/trunk/test/Modules/objc-hidden.m (added) +++ cfe/trunk/test/Modules/objc-hidden.m Tue Oct 11 16:18:20 2016 @@ -0,0 +1,11 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fsyntax-only -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %S/Inputs/objc-hidden/System -F %S/Inputs/objc-hidden -verify -x objective-c %s +// expected-no-diagnostics + +// Make sure we don't crash with hidden decls. +@import FakeUnavailableObjCFramework; + +@implementation UnavailableObjCClass +- (void)someMethod { } +@end + _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits