@@ -30,42 +30,43 @@ fn baz(mut x: i32) {
3030 x = x;
3131}
3232
33+ fn arg_src ( mut x : i32 ) -> i32 {
34+ let y = x;
35+ x = 123 ; // Don't propagate this assignment to `y`
36+ y
37+ }
38+
3339fn main ( ) {
3440 // Make sure the function actually gets instantiated.
3541 foo ( 0 ) ;
3642 bar ( 0 ) ;
3743 baz ( 0 ) ;
44+ arg_src ( 0 ) ;
3845}
3946
4047// END RUST SOURCE
4148// START rustc.foo.CopyPropagation.before.mir
4249// bb0: {
43- // StorageLive(_2);
44- // StorageLive(_3);
50+ // ...
4551// _3 = _1;
4652// _2 = const dummy(move _3) -> bb1;
4753// }
4854// bb1: {
49- // StorageDead(_3);
55+ // ...
5056// _1 = move _2;
51- // StorageDead(_2);
52- // _0 = ();
53- // return;
57+ // ...
5458// }
5559// END rustc.foo.CopyPropagation.before.mir
5660// START rustc.foo.CopyPropagation.after.mir
5761// bb0: {
58- // StorageLive(_2);
59- // nop;
60- // nop;
61- // _2 = const dummy(move _1) -> bb1;
62+ // ...
63+ // _3 = _1;
64+ // _2 = const dummy(move _3) -> bb1;
6265// }
6366// bb1: {
64- // nop;
67+ // ...
6568// _1 = move _2;
66- // StorageDead(_2);
67- // _0 = ();
68- // return;
69+ // ...
6970// }
7071// END rustc.foo.CopyPropagation.after.mir
7172// START rustc.bar.CopyPropagation.before.mir
@@ -83,15 +84,14 @@ fn main() {
8384// END rustc.bar.CopyPropagation.before.mir
8485// START rustc.bar.CopyPropagation.after.mir
8586// bb0: {
86- // nop;
87- // nop ;
88- // _2 = const dummy(move _1 ) -> bb1;
87+ // ...
88+ // _3 = _1 ;
89+ // _2 = const dummy(move _3 ) -> bb1;
8990// }
9091// bb1: {
91- // nop;
92+ // ...
9293// _1 = const 5u8;
93- // _0 = ();
94- // return;
94+ // ...
9595// }
9696// END rustc.bar.CopyPropagation.after.mir
9797// START rustc.baz.CopyPropagation.before.mir
@@ -106,11 +106,35 @@ fn main() {
106106// END rustc.baz.CopyPropagation.before.mir
107107// START rustc.baz.CopyPropagation.after.mir
108108// bb0: {
109- // nop;
110- // nop;
111- // nop;
112- // nop;
113- // _0 = ();
114- // return;
109+ // ...
110+ // _2 = _1;
111+ // _1 = move _2;
112+ // ...
115113// }
116114// END rustc.baz.CopyPropagation.after.mir
115+ // START rustc.arg_src.CopyPropagation.before.mir
116+ // bb0: {
117+ // ...
118+ // _3 = _1;
119+ // _2 = move _3;
120+ // ...
121+ // _1 = const 123i32;
122+ // ...
123+ // _4 = _2;
124+ // _0 = move _4;
125+ // ...
126+ // return;
127+ // }
128+ // END rustc.arg_src.CopyPropagation.before.mir
129+ // START rustc.arg_src.CopyPropagation.after.mir
130+ // bb0: {
131+ // ...
132+ // _3 = _1;
133+ // ...
134+ // _1 = const 123i32;
135+ // ...
136+ // _0 = move _3;
137+ // ...
138+ // return;
139+ // }
140+ // END rustc.arg_src.CopyPropagation.after.mir
0 commit comments