@@ -610,7 +610,8 @@ getOrCreateSubsetParametersThunkForLinearMap(
610
610
};
611
611
612
612
// Build a `.zero` argument for the given `Differentiable`-conforming type.
613
- auto buildZeroArgument = [&](SILType zeroSILType) {
613
+ auto buildZeroArgument = [&](SILParameterInfo zeroSILParameter) {
614
+ auto zeroSILType = zeroSILParameter.getSILStorageInterfaceType ();
614
615
auto zeroSILObjType = zeroSILType.getObjectType ();
615
616
auto zeroType = zeroSILType.getASTType ();
616
617
auto *swiftMod = parentThunk->getModule ().getSwiftModule ();
@@ -623,13 +624,17 @@ getOrCreateSubsetParametersThunkForLinearMap(
623
624
localAllocations.push_back (buf);
624
625
builder.emitZeroIntoBuffer (loc, buf, IsInitialization);
625
626
if (zeroSILType.isAddress ()) {
626
- valuesToCleanup.push_back (buf);
627
627
arguments.push_back (buf);
628
+ if (zeroSILParameter.isGuaranteed ()) {
629
+ valuesToCleanup.push_back (buf);
630
+ }
628
631
} else {
629
632
auto arg = builder.emitLoadValueOperation (loc, buf,
630
633
LoadOwnershipQualifier::Take);
631
- valuesToCleanup.push_back (arg);
632
634
arguments.push_back (arg);
635
+ if (zeroSILParameter.isGuaranteed ()) {
636
+ valuesToCleanup.push_back (arg);
637
+ }
633
638
}
634
639
break ;
635
640
}
@@ -687,10 +692,9 @@ getOrCreateSubsetParametersThunkForLinearMap(
687
692
}
688
693
// Otherwise, construct and use a zero argument.
689
694
else {
690
- auto zeroSILType =
691
- linearMapType->getParameters ()[mapOriginalParameterIndex (i)]
692
- .getSILStorageInterfaceType ();
693
- buildZeroArgument (zeroSILType);
695
+ auto zeroSILParameter =
696
+ linearMapType->getParameters ()[mapOriginalParameterIndex (i)];
697
+ buildZeroArgument (zeroSILParameter);
694
698
}
695
699
}
696
700
break ;
0 commit comments