@@ -129,12 +129,13 @@ ManagedValue SILGenFunction::emitManagedStoreBorrow(
129129 assert (lowering.getLoweredType ().getObjectType () == v->getType ());
130130 if (lowering.isTrivial () || v->getOwnershipKind () == OwnershipKind::None) {
131131 lowering.emitStore (B, loc, v, addr, StoreOwnershipQualifier::Trivial);
132- return ManagedValue::forUnmanaged (v );
132+ return ManagedValue::forTrivialAddressRValue (addr );
133133 }
134134 assert ((!lowering.isAddressOnly () || !silConv.useLoweredAddresses ()) &&
135135 " cannot retain an unloadable type" );
136136 auto *sbi = B.createStoreBorrow (loc, v, addr);
137- return emitManagedBorrowedRValueWithCleanup (sbi->getSrc (), sbi, lowering);
137+ Cleanups.pushCleanup <EndBorrowCleanup>(sbi);
138+ return ManagedValue (sbi, CleanupHandle::invalid ());
138139}
139140
140141ManagedValue SILGenFunction::emitManagedBeginBorrow (SILLocation loc,
@@ -243,6 +244,18 @@ ManagedValue SILGenFunction::emitFormalEvaluationManagedBeginBorrow(
243244 lowering);
244245}
245246
247+ ManagedValue SILGenFunction::emitFormalEvaluationManagedStoreBorrow (
248+ SILLocation loc, SILValue v, SILValue addr) {
249+ auto &lowering = getTypeLowering (v->getType ());
250+ if (lowering.isTrivial () || v->getOwnershipKind () == OwnershipKind::None) {
251+ lowering.emitStore (B, loc, v, addr, StoreOwnershipQualifier::Trivial);
252+ return ManagedValue::forTrivialAddressRValue (addr);
253+ }
254+ auto *sbi = B.createStoreBorrow (loc, v, addr);
255+ return emitFormalEvaluationManagedBorrowedRValueWithCleanup (loc, v, sbi,
256+ lowering);
257+ }
258+
246259ManagedValue
247260SILGenFunction::emitFormalEvaluationManagedBorrowedRValueWithCleanup (
248261 SILLocation loc, SILValue original, SILValue borrowed) {
@@ -260,10 +273,6 @@ SILGenFunction::emitFormalEvaluationManagedBorrowedRValueWithCleanup(
260273 if (lowering.isTrivial ())
261274 return ManagedValue::forUnmanaged (borrowed);
262275
263- if (!borrowed->getType ().isObject ()) {
264- return ManagedValue (borrowed, CleanupHandle::invalid ());
265- }
266-
267276 assert (isInFormalEvaluationScope () && " Must be in formal evaluation scope" );
268277 auto &cleanup = Cleanups.pushCleanup <FormalEvaluationEndBorrowCleanup>();
269278 CleanupHandle handle = Cleanups.getTopCleanup ();
@@ -329,10 +338,7 @@ ManagedValue SILGenFunction::emitManagedBorrowedRValueWithCleanup(
329338 original->getOwnershipKind () == OwnershipKind::None)
330339 return ManagedValue::forUnmanaged (borrowed);
331340
332- if (borrowed->getType ().isObject ()) {
333- Cleanups.pushCleanup <EndBorrowCleanup>(borrowed);
334- }
335-
341+ Cleanups.pushCleanup <EndBorrowCleanup>(borrowed);
336342 return ManagedValue (borrowed, CleanupHandle::invalid ());
337343}
338344
0 commit comments