Skip to content

Commit 1e2afbe

Browse files
authored
Merge pull request #85956 from slavapestov/fix-issue-85860-6.3
SILGen: Fix keypath descriptor emission for class nested inside generic context [6.3]
2 parents 7056b35 + 4996358 commit 1e2afbe

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

lib/SILGen/SILGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2080,7 +2080,7 @@ SILGenModule::canStorageUseStoredKeyPathComponent(AbstractStorageDecl *decl,
20802080
// See the call to getClassFieldOffsetOffset() inside
20812081
// emitKeyPathComponent().
20822082
if (auto *parentClass = dyn_cast<ClassDecl>(decl->getDeclContext())) {
2083-
if (parentClass->hasGenericParamList()) {
2083+
if (parentClass->isGenericContext()) {
20842084
auto ancestry = parentClass->checkAncestry();
20852085
if (ancestry.contains(AncestryFlags::ResilientOther))
20862086
return false;

test/SILGen/keypaths_resilient_generic.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ import resilient_class
88

99
open class MySubclass<T> : ResilientOutsideParent {
1010
public final var storedProperty: T? = nil
11+
12+
open class MyNestedClass : ResilientOutsideParent {
13+
public final var storedProperty: T? = nil
14+
}
1115
}
1216

1317
open class ConcreteSubclass : MySubclass<Int> {
@@ -25,6 +29,13 @@ open class ConcreteSubclass : MySubclass<Int> {
2529
// CHECK-SAME: setter @$s26keypaths_resilient_generic10MySubclassC14storedPropertyxSgvplACyxGTk : $@convention(keypath_accessor_setter) <τ_0_0> (@in_guaranteed Optional<τ_0_0>, @in_guaranteed MySubclass<τ_0_0>) -> ()
2630
// CHECK-SAME: )
2731

32+
// CHECK: sil_property #MySubclass.MyNestedClass.storedProperty<τ_0_0> (
33+
// CHECK-SAME: settable_property $Optional<τ_0_0>,
34+
// CHECK-SAME: id ##MySubclass.MyNestedClass.storedProperty,
35+
// CHECK-SAME: getter @$s26keypaths_resilient_generic10MySubclassC0D11NestedClassC14storedPropertyxSgvplAEyx_GTK : $@convention(keypath_accessor_getter) <τ_0_0> (@in_guaranteed MySubclass<τ_0_0>.MyNestedClass) -> @out Optional<τ_0_0>,
36+
// CHECK-SAME: setter @$s26keypaths_resilient_generic10MySubclassC0D11NestedClassC14storedPropertyxSgvplAEyx_GTk : $@convention(keypath_accessor_setter) <τ_0_0> (@in_guaranteed Optional<τ_0_0>, @in_guaranteed MySubclass<τ_0_0>.MyNestedClass) -> ()
37+
// CHECK-SAME: )
38+
2839
// CHECK: sil_property #ConcreteSubclass.anotherStoredProperty (
2940
// CHECK-SAME: stored_property #ConcreteSubclass.anotherStoredProperty : $Optional<Int>
3041
// CHECK-SAME: )

0 commit comments

Comments
 (0)