mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-31 13:40:15 +03:00
d69725d5d5
Since this only affects `PreCodegen MIR, and it would be nice for that to be resilient to permutations of things that don't affect the actual semantic behaviours.
84 lines
5.3 KiB
Diff
84 lines
5.3 KiB
Diff
- // MIR for `h` before Inline
|
|
+ // MIR for `h` after Inline
|
|
|
|
fn h() -> () {
|
|
let mut _0: (); // return place in scope 0 at $DIR/inline_diverging.rs:+0:12: +0:12
|
|
let _1: (!, !); // in scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
|
|
+ let mut _2: fn() -> ! {sleep}; // in scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
|
|
+ let mut _8: (); // in scope 0 at $DIR/inline_diverging.rs:27:13: 27:16
|
|
+ scope 1 (inlined call_twice::<!, fn() -> ! {sleep}>) { // at $DIR/inline_diverging.rs:22:5: 22:22
|
|
+ debug f => _2; // in scope 1 at $DIR/inline_diverging.rs:26:36: 26:37
|
|
+ let mut _3: &fn() -> ! {sleep}; // in scope 1 at $DIR/inline_diverging.rs:27:13: 27:14
|
|
+ let _4: !; // in scope 1 at $DIR/inline_diverging.rs:27:9: 27:10
|
|
+ let mut _5: &fn() -> ! {sleep}; // in scope 1 at $DIR/inline_diverging.rs:28:13: 28:14
|
|
+ let mut _6: !; // in scope 1 at $DIR/inline_diverging.rs:29:9: 29:10
|
|
+ let mut _7: !; // in scope 1 at $DIR/inline_diverging.rs:29:6: 29:7
|
|
+ scope 2 {
|
|
+ debug a => _4; // in scope 2 at $DIR/inline_diverging.rs:27:9: 27:10
|
|
+ scope 3 {
|
|
+ debug b => _6; // in scope 3 at $DIR/inline_diverging.rs:28:9: 28:10
|
|
+ }
|
|
+ }
|
|
+ scope 4 (inlined <fn() -> ! {sleep} as Fn<()>>::call - shim(fn() -> ! {sleep})) { // at $DIR/inline_diverging.rs:27:13: 27:16
|
|
+ }
|
|
+ }
|
|
|
|
bb0: {
|
|
StorageLive(_1); // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
|
|
- _1 = call_twice::<!, fn() -> ! {sleep}>(sleep); // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
|
|
+ StorageLive(_2); // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
|
|
+ _2 = sleep; // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
|
|
// mir::Constant
|
|
- // + span: $DIR/inline_diverging.rs:22:5: 22:15
|
|
- // + literal: Const { ty: fn(fn() -> ! {sleep}) -> (!, !) {call_twice::<!, fn() -> ! {sleep}>}, val: Value(<ZST>) }
|
|
- // mir::Constant
|
|
// + span: $DIR/inline_diverging.rs:22:16: 22:21
|
|
// + literal: Const { ty: fn() -> ! {sleep}, val: Value(<ZST>) }
|
|
+ StorageLive(_6); // scope 0 at $DIR/inline_diverging.rs:+1:5: +1:22
|
|
+ StorageLive(_4); // scope 1 at $DIR/inline_diverging.rs:27:9: 27:10
|
|
+ StorageLive(_3); // scope 1 at $DIR/inline_diverging.rs:27:13: 27:14
|
|
+ _3 = &_2; // scope 1 at $DIR/inline_diverging.rs:27:13: 27:14
|
|
+ StorageLive(_8); // scope 1 at $DIR/inline_diverging.rs:27:13: 27:16
|
|
+ _8 = const (); // scope 1 at $DIR/inline_diverging.rs:27:13: 27:16
|
|
+ _4 = move (*_3)() -> [return: bb6, unwind: bb4]; // scope 4 at $SRC_DIR/core/src/ops/function.rs:LL:COL
|
|
+ }
|
|
+
|
|
+ bb1: {
|
|
+ StorageDead(_5); // scope 2 at $DIR/inline_diverging.rs:28:15: 28:16
|
|
+ StorageLive(_7); // scope 3 at $DIR/inline_diverging.rs:29:6: 29:7
|
|
+ _7 = move _4; // scope 3 at $DIR/inline_diverging.rs:29:6: 29:7
|
|
+ _1 = (move _7, move _6); // scope 3 at $DIR/inline_diverging.rs:29:5: 29:11
|
|
+ StorageDead(_7); // scope 3 at $DIR/inline_diverging.rs:29:10: 29:11
|
|
+ StorageDead(_4); // scope 1 at $DIR/inline_diverging.rs:30:1: 30:2
|
|
+ drop(_2) -> bb2; // scope 1 at $DIR/inline_diverging.rs:30:1: 30:2
|
|
+ }
|
|
+
|
|
+ bb2: {
|
|
+ unreachable; // scope 0 at $DIR/inline_diverging.rs:30:2: 30:2
|
|
+ }
|
|
+
|
|
+ bb3 (cleanup): {
|
|
+ drop(_4) -> [return: bb4, unwind terminate]; // scope 1 at $DIR/inline_diverging.rs:30:1: 30:2
|
|
+ }
|
|
+
|
|
+ bb4 (cleanup): {
|
|
+ drop(_2) -> [return: bb5, unwind terminate]; // scope 1 at $DIR/inline_diverging.rs:30:1: 30:2
|
|
+ }
|
|
+
|
|
+ bb5 (cleanup): {
|
|
+ resume; // scope 1 at $DIR/inline_diverging.rs:26:1: 30:2
|
|
+ }
|
|
+
|
|
+ bb6: {
|
|
+ StorageDead(_8); // scope 1 at $DIR/inline_diverging.rs:27:13: 27:16
|
|
+ StorageDead(_3); // scope 1 at $DIR/inline_diverging.rs:27:15: 27:16
|
|
+ StorageLive(_5); // scope 2 at $DIR/inline_diverging.rs:28:13: 28:14
|
|
+ _5 = &_2; // scope 2 at $DIR/inline_diverging.rs:28:13: 28:14
|
|
+ _6 = <fn() -> ! {sleep} as Fn<()>>::call(move _5, const ()) -> [return: bb1, unwind: bb3]; // scope 2 at $DIR/inline_diverging.rs:28:13: 28:16
|
|
+ // mir::Constant
|
|
+ // + span: $DIR/inline_diverging.rs:28:13: 28:14
|
|
+ // + literal: Const { ty: for<'a> extern "rust-call" fn(&'a fn() -> ! {sleep}, ()) -> <fn() -> ! {sleep} as FnOnce<()>>::Output {<fn() -> ! {sleep} as Fn<()>>::call}, val: Value(<ZST>) }
|
|
}
|
|
}
|
|
|