Skip to content

Commit 2571e05

Browse files
authored
Merge pull request #78265 from tshortli/member-import-visibility-imported-objc-overrides
ClangImporter: Ignore missing imports in `SwiftDeclConverter::recordObjCOverride()`
2 parents 6c8b958 + 94e678d commit 2571e05

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

lib/ClangImporter/ImportDecl.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7226,9 +7226,9 @@ void SwiftDeclConverter::recordObjCOverride(AbstractFunctionDecl *decl) {
72267226
return;
72277227
// Dig out the Objective-C superclass.
72287228
SmallVector<ValueDecl *, 4> results;
7229-
superDecl->lookupQualified(superDecl, DeclNameRef(decl->getName()),
7230-
decl->getLoc(), NL_QualifiedDefault,
7231-
results);
7229+
superDecl->lookupQualified(
7230+
superDecl, DeclNameRef(decl->getName()), decl->getLoc(),
7231+
NL_QualifiedDefault | NL_IgnoreMissingImports, results);
72327232
for (auto member : results) {
72337233
if (member->getKind() != decl->getKind() ||
72347234
member->isInstanceMember() != decl->isInstanceMember() ||
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
@import Categories_A;
22

3+
@interface NSObject (BridgingHeader)
4+
- (void)overridesCategoryMethodOnNSObject;
5+
@end
6+
37
@interface X (BridgingHeader)
48
- (void)fromBridgingHeader;
9+
- (void)overridesCategoryMethodOnNSObject;
510
@end
611

712
struct StructInBridgingHeader {
813
int member;
914
};
15+
16+
@interface ObjectInBridgingHeader : NSObject
17+
- (void)overridesCategoryMethodOnNSObject;
18+
@end

test/NameLookup/members_transitive_objc.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ func test(x: X) {
2424
x.fromOverlayForC() // expected-member-visibility-error {{instance method 'fromOverlayForC()' is not available due to missing import of defining module 'Categories_C'}}
2525
x.fromSubmoduleOfD() // expected-member-visibility-error {{instance method 'fromSubmoduleOfD()' is not available due to missing import of defining module 'Categories_D'}}
2626
x.fromBridgingHeader()
27+
x.overridesCategoryMethodOnNSObject()
2728
}
2829

2930
func testAnyObject(a: AnyObject) {
@@ -37,6 +38,7 @@ func testAnyObject(a: AnyObject) {
3738
a.fromC() // expected-error {{value of type 'AnyObject' has no member 'fromC'}}
3839
a.fromOverlayForCObjC() // expected-error {{value of type 'AnyObject' has no member 'fromOverlayForCObjC'}}
3940
a.fromBridgingHeader()
41+
a.overridesCategoryMethodOnNSObject()
4042
}
4143

4244
extension StructInBridgingHeader {
@@ -48,3 +50,9 @@ extension StructInBridgingHeader {
4850
return member
4951
}
5052
}
53+
54+
extension ObjectInBridgingHeader {
55+
func test() {
56+
overridesCategoryMethodOnNSObject()
57+
}
58+
}

0 commit comments

Comments
 (0)