Skip to content

Commit 7c71491

Browse files
authored
[SIL] Look through optionals in an unowned type's referent type during type classification (swiftlang#32949)
1 parent e948699 commit 7c71491

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

lib/SIL/IR/TypeLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,8 @@ namespace {
390390
} \
391391
RetTy visit##Name##StorageType(Can##Name##StorageType type, \
392392
AbstractionPattern origType) { \
393-
auto referentType = type->getReferentType(); \
393+
auto referentType = \
394+
type->getReferentType()->lookThroughSingleOptionalType(); \
394395
auto concreteType = getConcreteReferenceStorageReferent(referentType); \
395396
if (Name##StorageType::get(concreteType, TC.Context) \
396397
->isLoadable(Expansion.getResilienceExpansion())) { \

test/SILGen/unowned.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,13 @@ func takesUnownedStruct(_ z: Unowned<C>) {}
161161
// Make sure we don't crash here
162162
struct UnownedGenericCapture<T : AnyObject> {
163163
var object: T
164+
var optionalObject: T?
164165

165166
func f() -> () -> () {
166167
return { [unowned object] in _ = object }
167168
}
169+
170+
func g() -> () -> () {
171+
return { [unowned optionalObject] in _ = optionalObject }
172+
}
168173
}

0 commit comments

Comments
 (0)