Skip to content

Commit 2d8d7ad

Browse files
committed
ObjC generics are representable in ObjC.
1 parent 89bc2a4 commit 2d8d7ad

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

lib/AST/Type.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1942,8 +1942,7 @@ static ForeignRepresentableKind getObjCObjectRepresentable(Type type) {
19421942
type = dynSelf->getSelfType();
19431943

19441944
// @objc classes.
1945-
if (auto classType = type->getAs<ClassType>()) {
1946-
auto classDecl = classType->getDecl();
1945+
if (auto classDecl = type->getClassOrBoundGenericClass()) {
19471946
auto &ctx = classDecl->getASTContext();
19481947
if (auto resolver = ctx.getLazyResolver())
19491948
resolver->resolveDeclSignature(classDecl);

test/ClangModules/objc_bridging_generics.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ func testImportedTypeParamRequirements() {
7676

7777
extension GenericClass {
7878
func doesntUseGenericParam() {}
79+
@objc func doesntUseGenericParam2() -> Self {}
80+
// Doesn't technically use 'T', since it's type-erased at runtime
81+
func doesntUseGenericParam3() -> GenericClass<T> {}
7982

8083
// expected-error@+1{{Extension of a generic Objective-C class cannot access the class's generic parameters}}
8184
func usesGenericParamA(_ x: T) {}
@@ -97,6 +100,9 @@ extension GenericClass {
97100
}
98101

99102
static func doesntUseGenericParam() {}
103+
static func doesntUseGenericParam2() -> Self {}
104+
// Doesn't technically use 'T', since it's type-erased at runtime
105+
static func doesntUseGenericParam3() -> GenericClass<T> {}
100106

101107
// expected-error@+1{{Extension of a generic Objective-C class cannot access the class's generic parameters}}
102108
static func usesGenericParamA(_ x: T) {}
@@ -116,4 +122,10 @@ extension GenericClass {
116122
static func usesGenericParamF(_ x: Int) {
117123
_ = x is T
118124
}
125+
126+
func checkThatMethodsAreObjC() {
127+
_ = #selector(GenericClass.doesntUseGenericParam)
128+
_ = #selector(GenericClass.doesntUseGenericParam2)
129+
_ = #selector(GenericClass.doesntUseGenericParam3)
130+
}
119131
}

0 commit comments

Comments
 (0)