@@ -2290,12 +2290,14 @@ namespace {
22902290
22912291 TypeLowering *handleTrivial (CanType type,
22922292 RecursiveProperties properties) {
2293+ properties = mergeHasPack (HasPack_t (type->hasAnyPack ()), properties);
22932294 auto silType = SILType::getPrimitiveObjectType (type);
22942295 return new (TC) TrivialTypeLowering (silType, properties, Expansion);
22952296 }
22962297
22972298 TypeLowering *handleReference (CanType type,
22982299 RecursiveProperties properties) {
2300+ properties = mergeHasPack (HasPack_t (type->hasAnyPack ()), properties);
22992301 auto silType = SILType::getPrimitiveObjectType (type);
23002302 if (type.isForeignReferenceType () &&
23012303 type->getReferenceCounting () == ReferenceCounting::None)
@@ -2307,13 +2309,15 @@ namespace {
23072309
23082310 TypeLowering *handleMoveOnlyReference (CanType type,
23092311 RecursiveProperties properties) {
2312+ properties = mergeHasPack (HasPack_t (type->hasAnyPack ()), properties);
23102313 auto silType = SILType::getPrimitiveObjectType (type);
23112314 return new (TC)
23122315 MoveOnlyReferenceTypeLowering (silType, properties, Expansion);
23132316 }
23142317
23152318 TypeLowering *handleMoveOnlyAddressOnly (CanType type,
23162319 RecursiveProperties properties) {
2320+ properties = mergeHasPack (HasPack_t (type->hasAnyPack ()), properties);
23172321 if (!TC.Context .SILOpts .EnableSILOpaqueValues &&
23182322 !TypeLoweringForceOpaqueValueLowering) {
23192323 auto silType = SILType::getPrimitiveAddressType (type);
@@ -2326,13 +2330,15 @@ namespace {
23262330 }
23272331
23282332 TypeLowering *handleReference (CanType type) {
2333+ auto properties = RecursiveProperties::forReference ();
2334+ properties = mergeHasPack (HasPack_t (type->hasAnyPack ()), properties);
23292335 auto silType = SILType::getPrimitiveObjectType (type);
2330- return new (TC) ReferenceTypeLowering (
2331- silType, RecursiveProperties::forReference (), Expansion);
2336+ return new (TC) ReferenceTypeLowering (silType, properties, Expansion);
23322337 }
23332338
23342339 TypeLowering *handleAddressOnly (CanType type,
23352340 RecursiveProperties properties) {
2341+ properties = mergeHasPack (HasPack_t (type->hasAnyPack ()), properties);
23362342 if (!TC.Context .SILOpts .EnableSILOpaqueValues &&
23372343 !TypeLoweringForceOpaqueValueLowering) {
23382344 auto silType = SILType::getPrimitiveAddressType (type);
@@ -2347,6 +2353,7 @@ namespace {
23472353
23482354 TypeLowering *handleInfinite (CanType type,
23492355 RecursiveProperties properties) {
2356+ properties = mergeHasPack (HasPack_t (type->hasAnyPack ()), properties);
23502357 // Infinite types cannot actually be instantiated, so treat them as
23512358 // opaque for code generation purposes.
23522359 properties.setAddressOnly ();
0 commit comments