diff --git a/lib/ClangImporter/ImportDecl.cpp b/lib/ClangImporter/ImportDecl.cpp index 6d93b7263e2..85f80c80f19 100644 --- a/lib/ClangImporter/ImportDecl.cpp +++ b/lib/ClangImporter/ImportDecl.cpp @@ -7226,9 +7226,9 @@ void SwiftDeclConverter::recordObjCOverride(AbstractFunctionDecl *decl) { return; // Dig out the Objective-C superclass. SmallVector results; - superDecl->lookupQualified(superDecl, DeclNameRef(decl->getName()), - decl->getLoc(), NL_QualifiedDefault, - results); + superDecl->lookupQualified( + superDecl, DeclNameRef(decl->getName()), decl->getLoc(), + NL_QualifiedDefault | NL_IgnoreMissingImports, results); for (auto member : results) { if (member->getKind() != decl->getKind() || member->isInstanceMember() != decl->isInstanceMember() || diff --git a/test/NameLookup/Inputs/MemberImportVisibility/Bridging.h b/test/NameLookup/Inputs/MemberImportVisibility/Bridging.h index 86ec86f75be..6b6532d9513 100644 --- a/test/NameLookup/Inputs/MemberImportVisibility/Bridging.h +++ b/test/NameLookup/Inputs/MemberImportVisibility/Bridging.h @@ -1,9 +1,18 @@ @import Categories_A; +@interface NSObject (BridgingHeader) +- (void)overridesCategoryMethodOnNSObject; +@end + @interface X (BridgingHeader) - (void)fromBridgingHeader; +- (void)overridesCategoryMethodOnNSObject; @end struct StructInBridgingHeader { int member; }; + +@interface ObjectInBridgingHeader : NSObject +- (void)overridesCategoryMethodOnNSObject; +@end diff --git a/test/NameLookup/members_transitive_objc.swift b/test/NameLookup/members_transitive_objc.swift index c1d3dc00260..0ea3b994fe8 100644 --- a/test/NameLookup/members_transitive_objc.swift +++ b/test/NameLookup/members_transitive_objc.swift @@ -24,6 +24,7 @@ func test(x: X) { x.fromOverlayForC() // expected-member-visibility-error {{instance method 'fromOverlayForC()' is not available due to missing import of defining module 'Categories_C'}} x.fromSubmoduleOfD() // expected-member-visibility-error {{instance method 'fromSubmoduleOfD()' is not available due to missing import of defining module 'Categories_D'}} x.fromBridgingHeader() + x.overridesCategoryMethodOnNSObject() } func testAnyObject(a: AnyObject) { @@ -37,6 +38,7 @@ func testAnyObject(a: AnyObject) { a.fromC() // expected-error {{value of type 'AnyObject' has no member 'fromC'}} a.fromOverlayForCObjC() // expected-error {{value of type 'AnyObject' has no member 'fromOverlayForCObjC'}} a.fromBridgingHeader() + a.overridesCategoryMethodOnNSObject() } extension StructInBridgingHeader { @@ -48,3 +50,9 @@ extension StructInBridgingHeader { return member } } + +extension ObjectInBridgingHeader { + func test() { + overridesCategoryMethodOnNSObject() + } +}