rust/tests/mir-opt/issue_41888.main.ElaborateDrops.diff
Giacomo Pasini b3a47d9b6b
Desugars drop and replace at MIR build
This commit desugars the drop and replace deriving from an
assignment at MIR build, avoiding the construction of the
DropAndReplace terminator (which will be removed in a followign PR)

In order to retain the same error messages for replaces a new
DesugaringKind::Replace variant is introduced.
2023-03-03 16:33:11 +01:00

148 lines
7.3 KiB
Diff

- // MIR for `main` before ElaborateDrops
+ // MIR for `main` after ElaborateDrops
fn main() -> () {
let mut _0: (); // return place in scope 0 at $DIR/issue_41888.rs:+0:11: +0:11
let _1: E; // in scope 0 at $DIR/issue_41888.rs:+1:9: +1:10
let mut _2: bool; // in scope 0 at $DIR/issue_41888.rs:+2:8: +2:14
let mut _3: E; // in scope 0 at $DIR/issue_41888.rs:+3:13: +3:20
let mut _4: K; // in scope 0 at $DIR/issue_41888.rs:+3:18: +3:19
let mut _5: isize; // in scope 0 at $DIR/issue_41888.rs:+4:16: +4:24
+ let mut _7: bool; // in scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ let mut _8: bool; // in scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ let mut _9: bool; // in scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ let mut _10: isize; // in scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ let mut _11: isize; // in scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
scope 1 {
debug e => _1; // in scope 1 at $DIR/issue_41888.rs:+1:9: +1:10
scope 2 {
debug _k => _6; // in scope 2 at $DIR/issue_41888.rs:+4:21: +4:23
let _6: K; // in scope 2 at $DIR/issue_41888.rs:+4:21: +4:23
}
}
bb0: {
+ _9 = const false; // scope 0 at $DIR/issue_41888.rs:+1:9: +1:10
+ _7 = const false; // scope 0 at $DIR/issue_41888.rs:+1:9: +1:10
+ _8 = const false; // scope 0 at $DIR/issue_41888.rs:+1:9: +1:10
StorageLive(_1); // scope 0 at $DIR/issue_41888.rs:+1:9: +1:10
StorageLive(_2); // scope 1 at $DIR/issue_41888.rs:+2:8: +2:14
_2 = cond() -> [return: bb1, unwind: bb11]; // scope 1 at $DIR/issue_41888.rs:+2:8: +2:14
// mir::Constant
// + span: $DIR/issue_41888.rs:8:8: 8:12
// + literal: Const { ty: fn() -> bool {cond}, val: Value(<ZST>) }
}
bb1: {
switchInt(move _2) -> [0: bb8, otherwise: bb2]; // scope 1 at $DIR/issue_41888.rs:+2:8: +2:14
}
bb2: {
StorageLive(_3); // scope 1 at $DIR/issue_41888.rs:+3:13: +3:20
StorageLive(_4); // scope 1 at $DIR/issue_41888.rs:+3:18: +3:19
_4 = K; // scope 1 at $DIR/issue_41888.rs:+3:18: +3:19
_3 = E::F(move _4); // scope 1 at $DIR/issue_41888.rs:+3:13: +3:20
StorageDead(_4); // scope 1 at $DIR/issue_41888.rs:+3:19: +3:20
- drop(_1) -> [return: bb3, unwind: bb4]; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
+ goto -> bb3; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
}
bb3: {
+ _7 = const true; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
+ _8 = const true; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
+ _9 = const true; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
_1 = move _3; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
- drop(_3) -> [return: bb5, unwind: bb11]; // scope 1 at $DIR/issue_41888.rs:+3:19: +3:20
+ goto -> bb5; // scope 1 at $DIR/issue_41888.rs:+3:19: +3:20
}
bb4 (cleanup): {
_1 = move _3; // scope 1 at $DIR/issue_41888.rs:+3:9: +3:10
drop(_3) -> bb11; // scope 1 at $DIR/issue_41888.rs:+3:19: +3:20
}
bb5: {
StorageDead(_3); // scope 1 at $DIR/issue_41888.rs:+3:19: +3:20
_5 = discriminant(_1); // scope 2 at $DIR/issue_41888.rs:+4:16: +4:24
switchInt(move _5) -> [0: bb6, otherwise: bb7]; // scope 2 at $DIR/issue_41888.rs:+4:16: +4:24
}
bb6: {
StorageLive(_6); // scope 2 at $DIR/issue_41888.rs:+4:21: +4:23
+ _9 = const false; // scope 2 at $DIR/issue_41888.rs:+4:21: +4:23
_6 = move ((_1 as F).0: K); // scope 2 at $DIR/issue_41888.rs:+4:21: +4:23
_0 = const (); // scope 2 at $DIR/issue_41888.rs:+4:29: +7:10
StorageDead(_6); // scope 1 at $DIR/issue_41888.rs:+7:9: +7:10
goto -> bb9; // scope 1 at $DIR/issue_41888.rs:+4:9: +7:10
}
bb7: {
_0 = const (); // scope 1 at $DIR/issue_41888.rs:+7:10: +7:10
goto -> bb9; // scope 1 at $DIR/issue_41888.rs:+4:9: +7:10
}
bb8: {
_0 = const (); // scope 1 at $DIR/issue_41888.rs:+8:6: +8:6
goto -> bb9; // scope 1 at $DIR/issue_41888.rs:+2:5: +8:6
}
bb9: {
StorageDead(_2); // scope 1 at $DIR/issue_41888.rs:+8:5: +8:6
- drop(_1) -> bb10; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ goto -> bb18; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
}
bb10: {
+ _7 = const false; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ _8 = const false; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ _9 = const false; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
StorageDead(_1); // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
return; // scope 0 at $DIR/issue_41888.rs:+9:2: +9:2
}
bb11 (cleanup): {
- drop(_1) -> bb12; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ goto -> bb12; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
}
bb12 (cleanup): {
resume; // scope 0 at $DIR/issue_41888.rs:+0:1: +9:2
+ }
+
+ bb13: {
+ _7 = const false; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ goto -> bb10; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ }
+
+ bb14 (cleanup): {
+ goto -> bb12; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ }
+
+ bb15: {
+ drop(_1) -> [return: bb13, unwind: bb12]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ }
+
+ bb16 (cleanup): {
+ drop(_1) -> bb12; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ }
+
+ bb17: {
+ _10 = discriminant(_1); // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ switchInt(move _10) -> [0: bb13, otherwise: bb15]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ }
+
+ bb18: {
+ switchInt(_7) -> [0: bb13, otherwise: bb17]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ }
+
+ bb19 (cleanup): {
+ _11 = discriminant(_1); // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ switchInt(move _11) -> [0: bb14, otherwise: bb16]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
+ }
+
+ bb20 (cleanup): {
+ switchInt(_7) -> [0: bb12, otherwise: bb19]; // scope 0 at $DIR/issue_41888.rs:+9:1: +9:2
}
}