@@ -407,8 +407,9 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
407
407
ty : Ty < ' tcx > ,
408
408
rcvr_field : Place < ' tcx > ,
409
409
next : BasicBlock ,
410
- cleanup : BasicBlock
411
- ) -> Place < ' tcx > {
410
+ cleanup : BasicBlock ,
411
+ place : Place < ' tcx >
412
+ ) {
412
413
let tcx = self . tcx ;
413
414
414
415
let substs = Substs :: for_item (
@@ -439,8 +440,6 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
439
440
} )
440
441
) ;
441
442
442
- let loc = self . make_place ( Mutability :: Not , ty) ;
443
-
444
443
// `let ref_loc: &ty = &rcvr_field;`
445
444
let statement = self . make_statement (
446
445
StatementKind :: Assign (
@@ -453,11 +452,9 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
453
452
self . block ( vec ! [ statement] , TerminatorKind :: Call {
454
453
func,
455
454
args : vec ! [ Operand :: Move ( ref_loc) ] ,
456
- destination : Some ( ( loc . clone ( ) , next) ) ,
455
+ destination : Some ( ( place , next) ) ,
457
456
cleanup : Some ( cleanup) ,
458
457
} , false ) ;
459
-
460
- loc
461
458
}
462
459
463
460
fn loop_header (
@@ -540,7 +537,9 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
540
537
// `let cloned = Clone::clone(rcvr[beg])`;
541
538
// Goto #3 if ok, #5 if unwinding happens.
542
539
let rcvr_field = rcvr. clone ( ) . index ( beg) ;
543
- let cloned = self . make_clone_call ( ty, rcvr_field, BasicBlock :: new ( 3 ) , BasicBlock :: new ( 5 ) ) ;
540
+ let cloned = self . make_place ( Mutability :: Not , ty) ;
541
+ self . make_clone_call ( ty, rcvr_field, BasicBlock :: new ( 3 ) ,
542
+ BasicBlock :: new ( 5 ) , cloned. clone ( ) ) ;
544
543
545
544
// BB #3
546
545
// `ret[beg] = cloned;`
@@ -638,16 +637,18 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
638
637
for ( i, ity) in tys. iter ( ) . enumerate ( ) {
639
638
let rcvr_field = rcvr. clone ( ) . field ( Field :: new ( i) , * ity) ;
640
639
640
+ let place = self . make_place ( Mutability :: Not , ity) ;
641
+ returns. push ( place. clone ( ) ) ;
642
+
641
643
// BB #(2i)
642
644
// `returns[i] = Clone::clone(&rcvr.i);`
643
645
// Goto #(2i + 2) if ok, #(2i + 1) if unwinding happens.
644
- returns. push (
645
- self . make_clone_call (
646
- * ity,
647
- rcvr_field,
648
- BasicBlock :: new ( 2 * i + 2 ) ,
649
- BasicBlock :: new ( 2 * i + 1 ) ,
650
- )
646
+ self . make_clone_call (
647
+ * ity,
648
+ rcvr_field,
649
+ BasicBlock :: new ( 2 * i + 2 ) ,
650
+ BasicBlock :: new ( 2 * i + 1 ) ,
651
+ place
651
652
) ;
652
653
653
654
// BB #(2i + 1) (cleanup)
0 commit comments