@@ -505,11 +505,11 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
505
505
fn array_shim ( & mut self , ty : Ty < ' tcx > , len : u64 ) {
506
506
let tcx = self . tcx ;
507
507
let span = self . span ;
508
- let rcvr = Place :: Local ( Local :: new ( 1 +0 ) ) . deref ( ) ;
508
+ let src = Place :: Local ( Local :: new ( 1 +0 ) ) . deref ( ) ;
509
+ let dest = Place :: Local ( RETURN_PLACE ) ;
509
510
510
511
let beg = self . local_decls . push ( temp_decl ( Mutability :: Mut , tcx. types . usize , span) ) ;
511
512
let end = self . make_place ( Mutability :: Not , tcx. types . usize ) ;
512
- let ret = self . make_place ( Mutability :: Mut , tcx. mk_array ( ty, len) ) ;
513
513
514
514
// BB #0
515
515
// `let mut beg = 0;`
@@ -539,25 +539,17 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
539
539
self . loop_header ( Place :: Local ( beg) , end, BasicBlock :: new ( 2 ) , BasicBlock :: new ( 4 ) , false ) ;
540
540
541
541
// BB #2
542
- // `let cloned = Clone::clone(rcvr [beg])`;
542
+ // `dest[i] = Clone::clone(src [beg])`;
543
543
// Goto #3 if ok, #5 if unwinding happens.
544
- let rcvr_field = rcvr . clone ( ) . index ( beg) ;
545
- let cloned = self . make_place ( Mutability :: Not , ty ) ;
546
- self . make_clone_call ( cloned . clone ( ) , rcvr_field , ty, BasicBlock :: new ( 3 ) ,
544
+ let dest_field = dest . clone ( ) . index ( beg) ;
545
+ let src_field = src . clone ( ) . index ( beg ) ;
546
+ self . make_clone_call ( dest_field , src_field , ty, BasicBlock :: new ( 3 ) ,
547
547
BasicBlock :: new ( 5 ) ) ;
548
548
549
549
// BB #3
550
- // `ret[beg] = cloned;`
551
550
// `beg = beg + 1;`
552
551
// `goto #1`;
553
- let ret_field = ret. clone ( ) . index ( beg) ;
554
552
let statements = vec ! [
555
- self . make_statement(
556
- StatementKind :: Assign (
557
- ret_field,
558
- Rvalue :: Use ( Operand :: Move ( cloned) )
559
- )
560
- ) ,
561
553
self . make_statement(
562
554
StatementKind :: Assign (
563
555
Place :: Local ( beg) ,
@@ -572,14 +564,8 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
572
564
self . block ( statements, TerminatorKind :: Goto { target : BasicBlock :: new ( 1 ) } , false ) ;
573
565
574
566
// BB #4
575
- // `return ret;`
576
- let ret_statement = self . make_statement (
577
- StatementKind :: Assign (
578
- Place :: Local ( RETURN_PLACE ) ,
579
- Rvalue :: Use ( Operand :: Move ( ret. clone ( ) ) ) ,
580
- )
581
- ) ;
582
- self . block ( vec ! [ ret_statement] , TerminatorKind :: Return , false ) ;
567
+ // `return dest;`
568
+ self . block ( vec ! [ ] , TerminatorKind :: Return , false ) ;
583
569
584
570
// BB #5 (cleanup)
585
571
// `let end = beg;`
@@ -604,9 +590,9 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
604
590
BasicBlock :: new ( 7 ) , BasicBlock :: new ( 9 ) , true ) ;
605
591
606
592
// BB #7 (cleanup)
607
- // `drop(ret [beg])`;
593
+ // `drop(dest [beg])`;
608
594
self . block ( vec ! [ ] , TerminatorKind :: Drop {
609
- location : ret . index ( beg) ,
595
+ location : dest . index ( beg) ,
610
596
target : BasicBlock :: new ( 8 ) ,
611
597
unwind : None ,
612
598
} , true ) ;
0 commit comments