Auto merge of #112240 - cjgillot:recurse-inline, r=scottmcm

Only check inlining counter after recursing.

This PR aims to reduce the strength of https://github.com/rust-lang/rust/pull/105119 even more.

In the current implementation, we check the inline count before recursing. This means that we never actually reach inlining depth 3.

This PR checks the counter after recursion, to give a chance to inline at depth >= 3.

r? `@scottmcm`
cc `@JakobDegen`
This commit is contained in:
bors 2023-06-04 03:39:24 +00:00
commit 9eee230cd0
11 changed files with 395 additions and 271 deletions

View File

@ -145,13 +145,16 @@ impl<'tcx> Inliner<'tcx> {
Ok(new_blocks) => {
debug!("inlined {}", callsite.callee);
self.changed = true;
inlined_count += 1;
if inlined_count == inline_limit {
return;
}
self.history.push(callsite.callee.def_id());
self.process_blocks(caller_body, new_blocks);
self.history.pop();
inlined_count += 1;
if inlined_count == inline_limit {
debug!("inline count reached");
return;
}
}
}
}

View File

@ -11,6 +11,14 @@
+ let mut _3: &fn() {g}; // in scope 1 at $DIR/cycle.rs:6:5: 6:6
+ let _4: (); // in scope 1 at $DIR/cycle.rs:6:5: 6:8
+ scope 2 (inlined <fn() {g} as Fn<()>>::call - shim(fn() {g})) { // at $DIR/cycle.rs:6:5: 6:8
+ scope 3 (inlined g) { // at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ scope 4 (inlined f::<fn() {main}>) { // at $DIR/cycle.rs:12:5: 12:12
+ debug g => main; // in scope 4 at $DIR/cycle.rs:5:6: 5:7
+ let _6: (); // in scope 4 at $DIR/cycle.rs:6:5: 6:8
+ scope 5 (inlined <fn() {main} as Fn<()>>::call - shim(fn() {main})) { // at $DIR/cycle.rs:6:5: 6:8
+ }
+ }
+ }
+ }
+ }
@ -30,7 +38,11 @@
+ _3 = &_2; // scope 1 at $DIR/cycle.rs:6:5: 6:6
+ StorageLive(_5); // scope 1 at $DIR/cycle.rs:6:5: 6:8
+ _5 = const (); // scope 1 at $DIR/cycle.rs:6:5: 6:8
+ _4 = move (*_3)() -> [return: bb4, unwind: bb2]; // scope 2 at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ StorageLive(_6); // scope 2 at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ _6 = main() -> [return: bb4, unwind: bb2]; // scope 5 at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ // mir::Constant
+ // + span: no-location
+ // + literal: Const { ty: fn() {main}, val: Value(<ZST>) }
}
bb1: {
@ -50,6 +62,7 @@
+ }
+
+ bb4: {
+ StorageDead(_6); // scope 2 at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ StorageDead(_5); // scope 1 at $DIR/cycle.rs:6:5: 6:8
+ StorageDead(_3); // scope 1 at $DIR/cycle.rs:6:7: 6:8
+ drop(_2) -> bb1; // scope 1 at $DIR/cycle.rs:7:1: 7:2

View File

@ -12,6 +12,26 @@
+ let _5: (); // in scope 2 at $DIR/exponential_runtime.rs:62:9: 62:25
+ let _6: (); // in scope 2 at $DIR/exponential_runtime.rs:63:9: 63:25
+ let _7: (); // in scope 2 at $DIR/exponential_runtime.rs:64:9: 64:25
+ scope 3 (inlined <() as E>::call) { // at $DIR/exponential_runtime.rs:62:9: 62:25
+ let _8: (); // in scope 3 at $DIR/exponential_runtime.rs:50:9: 50:25
+ let _9: (); // in scope 3 at $DIR/exponential_runtime.rs:51:9: 51:25
+ let _10: (); // in scope 3 at $DIR/exponential_runtime.rs:52:9: 52:25
+ scope 4 (inlined <() as D>::call) { // at $DIR/exponential_runtime.rs:50:9: 50:25
+ let _11: (); // in scope 4 at $DIR/exponential_runtime.rs:38:9: 38:25
+ let _12: (); // in scope 4 at $DIR/exponential_runtime.rs:39:9: 39:25
+ let _13: (); // in scope 4 at $DIR/exponential_runtime.rs:40:9: 40:25
+ scope 5 (inlined <() as C>::call) { // at $DIR/exponential_runtime.rs:38:9: 38:25
+ let _14: (); // in scope 5 at $DIR/exponential_runtime.rs:26:9: 26:25
+ let _15: (); // in scope 5 at $DIR/exponential_runtime.rs:27:9: 27:25
+ let _16: (); // in scope 5 at $DIR/exponential_runtime.rs:28:9: 28:25
+ scope 6 (inlined <() as B>::call) { // at $DIR/exponential_runtime.rs:26:9: 26:25
+ let _17: (); // in scope 6 at $DIR/exponential_runtime.rs:14:9: 14:25
+ let _18: (); // in scope 6 at $DIR/exponential_runtime.rs:15:9: 15:25
+ let _19: (); // in scope 6 at $DIR/exponential_runtime.rs:16:9: 16:25
+ }
+ }
+ }
+ }
+ }
+ }
@ -24,12 +44,24 @@
+ StorageLive(_5); // scope 1 at $DIR/exponential_runtime.rs:74:9: 74:25
+ StorageLive(_6); // scope 1 at $DIR/exponential_runtime.rs:74:9: 74:25
+ StorageLive(_7); // scope 1 at $DIR/exponential_runtime.rs:74:9: 74:25
+ _5 = <() as E>::call() -> bb4; // scope 2 at $DIR/exponential_runtime.rs:62:9: 62:25
+ StorageLive(_8); // scope 2 at $DIR/exponential_runtime.rs:62:9: 62:25
+ StorageLive(_9); // scope 2 at $DIR/exponential_runtime.rs:62:9: 62:25
+ StorageLive(_10); // scope 2 at $DIR/exponential_runtime.rs:62:9: 62:25
+ StorageLive(_11); // scope 3 at $DIR/exponential_runtime.rs:50:9: 50:25
+ StorageLive(_12); // scope 3 at $DIR/exponential_runtime.rs:50:9: 50:25
+ StorageLive(_13); // scope 3 at $DIR/exponential_runtime.rs:50:9: 50:25
+ StorageLive(_14); // scope 4 at $DIR/exponential_runtime.rs:38:9: 38:25
+ StorageLive(_15); // scope 4 at $DIR/exponential_runtime.rs:38:9: 38:25
+ StorageLive(_16); // scope 4 at $DIR/exponential_runtime.rs:38:9: 38:25
+ StorageLive(_17); // scope 5 at $DIR/exponential_runtime.rs:26:9: 26:25
+ StorageLive(_18); // scope 5 at $DIR/exponential_runtime.rs:26:9: 26:25
+ StorageLive(_19); // scope 5 at $DIR/exponential_runtime.rs:26:9: 26:25
+ _17 = <() as A>::call() -> bb12; // scope 6 at $DIR/exponential_runtime.rs:14:9: 14:25
// mir::Constant
- // + span: $DIR/exponential_runtime.rs:87:5: 87:20
- // + literal: Const { ty: fn() {<() as G>::call}, val: Value(<ZST>) }
+ // + span: $DIR/exponential_runtime.rs:62:9: 62:23
+ // + literal: Const { ty: fn() {<() as E>::call}, val: Value(<ZST>) }
+ // + span: $DIR/exponential_runtime.rs:14:9: 14:23
+ // + literal: Const { ty: fn() {<() as A>::call}, val: Value(<ZST>) }
}
bb1: {
@ -59,6 +91,9 @@
+ }
+
+ bb4: {
+ StorageDead(_10); // scope 2 at $DIR/exponential_runtime.rs:62:9: 62:25
+ StorageDead(_9); // scope 2 at $DIR/exponential_runtime.rs:62:9: 62:25
+ StorageDead(_8); // scope 2 at $DIR/exponential_runtime.rs:62:9: 62:25
+ _6 = <() as E>::call() -> bb5; // scope 2 at $DIR/exponential_runtime.rs:63:9: 63:25
+ // mir::Constant
+ // + span: $DIR/exponential_runtime.rs:63:9: 63:23
@ -70,6 +105,71 @@
+ // mir::Constant
+ // + span: $DIR/exponential_runtime.rs:64:9: 64:23
+ // + literal: Const { ty: fn() {<() as E>::call}, val: Value(<ZST>) }
+ }
+
+ bb6: {
+ StorageDead(_13); // scope 3 at $DIR/exponential_runtime.rs:50:9: 50:25
+ StorageDead(_12); // scope 3 at $DIR/exponential_runtime.rs:50:9: 50:25
+ StorageDead(_11); // scope 3 at $DIR/exponential_runtime.rs:50:9: 50:25
+ _9 = <() as D>::call() -> bb7; // scope 3 at $DIR/exponential_runtime.rs:51:9: 51:25
+ // mir::Constant
+ // + span: $DIR/exponential_runtime.rs:51:9: 51:23
+ // + literal: Const { ty: fn() {<() as D>::call}, val: Value(<ZST>) }
+ }
+
+ bb7: {
+ _10 = <() as D>::call() -> bb4; // scope 3 at $DIR/exponential_runtime.rs:52:9: 52:25
+ // mir::Constant
+ // + span: $DIR/exponential_runtime.rs:52:9: 52:23
+ // + literal: Const { ty: fn() {<() as D>::call}, val: Value(<ZST>) }
+ }
+
+ bb8: {
+ StorageDead(_16); // scope 4 at $DIR/exponential_runtime.rs:38:9: 38:25
+ StorageDead(_15); // scope 4 at $DIR/exponential_runtime.rs:38:9: 38:25
+ StorageDead(_14); // scope 4 at $DIR/exponential_runtime.rs:38:9: 38:25
+ _12 = <() as C>::call() -> bb9; // scope 4 at $DIR/exponential_runtime.rs:39:9: 39:25
+ // mir::Constant
+ // + span: $DIR/exponential_runtime.rs:39:9: 39:23
+ // + literal: Const { ty: fn() {<() as C>::call}, val: Value(<ZST>) }
+ }
+
+ bb9: {
+ _13 = <() as C>::call() -> bb6; // scope 4 at $DIR/exponential_runtime.rs:40:9: 40:25
+ // mir::Constant
+ // + span: $DIR/exponential_runtime.rs:40:9: 40:23
+ // + literal: Const { ty: fn() {<() as C>::call}, val: Value(<ZST>) }
+ }
+
+ bb10: {
+ StorageDead(_19); // scope 5 at $DIR/exponential_runtime.rs:26:9: 26:25
+ StorageDead(_18); // scope 5 at $DIR/exponential_runtime.rs:26:9: 26:25
+ StorageDead(_17); // scope 5 at $DIR/exponential_runtime.rs:26:9: 26:25
+ _15 = <() as B>::call() -> bb11; // scope 5 at $DIR/exponential_runtime.rs:27:9: 27:25
+ // mir::Constant
+ // + span: $DIR/exponential_runtime.rs:27:9: 27:23
+ // + literal: Const { ty: fn() {<() as B>::call}, val: Value(<ZST>) }
+ }
+
+ bb11: {
+ _16 = <() as B>::call() -> bb8; // scope 5 at $DIR/exponential_runtime.rs:28:9: 28:25
+ // mir::Constant
+ // + span: $DIR/exponential_runtime.rs:28:9: 28:23
+ // + literal: Const { ty: fn() {<() as B>::call}, val: Value(<ZST>) }
+ }
+
+ bb12: {
+ _18 = <() as A>::call() -> bb13; // scope 6 at $DIR/exponential_runtime.rs:15:9: 15:25
+ // mir::Constant
+ // + span: $DIR/exponential_runtime.rs:15:9: 15:23
+ // + literal: Const { ty: fn() {<() as A>::call}, val: Value(<ZST>) }
+ }
+
+ bb13: {
+ _19 = <() as A>::call() -> bb10; // scope 6 at $DIR/exponential_runtime.rs:16:9: 16:25
+ // mir::Constant
+ // + span: $DIR/exponential_runtime.rs:16:9: 16:23
+ // + literal: Const { ty: fn() {<() as A>::call}, val: Value(<ZST>) }
}
}

View File

@ -10,6 +10,14 @@
+ debug f => _2; // in scope 1 at $DIR/inline_cycle.rs:54:22: 54:23
+ let _3: (); // in scope 1 at $DIR/inline_cycle.rs:55:5: 55:8
+ scope 2 (inlined <fn() {f} as FnOnce<()>>::call_once - shim(fn() {f})) { // at $DIR/inline_cycle.rs:55:5: 55:8
+ scope 3 (inlined f) { // at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ scope 4 (inlined call::<fn() {f}>) { // at $DIR/inline_cycle.rs:60:5: 60:12
+ debug f => f; // in scope 4 at $DIR/inline_cycle.rs:54:22: 54:23
+ let _5: (); // in scope 4 at $DIR/inline_cycle.rs:55:5: 55:8
+ scope 5 (inlined <fn() {f} as FnOnce<()>>::call_once - shim(fn() {f})) { // at $DIR/inline_cycle.rs:55:5: 55:8
+ }
+ }
+ }
+ }
+ }
@ -27,10 +35,15 @@
+ StorageLive(_3); // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
+ StorageLive(_4); // scope 1 at $DIR/inline_cycle.rs:55:5: 55:8
+ _4 = const (); // scope 1 at $DIR/inline_cycle.rs:55:5: 55:8
+ _3 = move _2() -> bb1; // scope 2 at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ StorageLive(_5); // scope 2 at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ _5 = f() -> bb1; // scope 5 at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ // mir::Constant
+ // + span: no-location
+ // + literal: Const { ty: fn() {f}, val: Value(<ZST>) }
}
bb1: {
+ StorageDead(_5); // scope 2 at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ StorageDead(_4); // scope 1 at $DIR/inline_cycle.rs:55:5: 55:8
+ StorageDead(_3); // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12
+ StorageDead(_2); // scope 0 at $DIR/inline_cycle.rs:+1:5: +1:12

View File

@ -6,18 +6,20 @@
let _1: (); // in scope 0 at $DIR/inline_cycle_generic.rs:+1:5: +1:24
+ scope 1 (inlined <C as Call>::call) { // at $DIR/inline_cycle_generic.rs:10:5: 10:24
+ scope 2 (inlined <B<A> as Call>::call) { // at $DIR/inline_cycle_generic.rs:39:9: 39:31
+ scope 3 (inlined <A as Call>::call) { // at $DIR/inline_cycle_generic.rs:32:9: 32:28
+ }
+ }
+ }
bb0: {
StorageLive(_1); // scope 0 at $DIR/inline_cycle_generic.rs:+1:5: +1:24
- _1 = <C as Call>::call() -> bb1; // scope 0 at $DIR/inline_cycle_generic.rs:+1:5: +1:24
+ _1 = <A as Call>::call() -> bb1; // scope 2 at $DIR/inline_cycle_generic.rs:32:9: 32:28
+ _1 = <B<C> as Call>::call() -> bb1; // scope 3 at $DIR/inline_cycle_generic.rs:24:9: 24:31
// mir::Constant
- // + span: $DIR/inline_cycle_generic.rs:10:5: 10:22
- // + literal: Const { ty: fn() {<C as Call>::call}, val: Value(<ZST>) }
+ // + span: $DIR/inline_cycle_generic.rs:32:9: 32:26
+ // + literal: Const { ty: fn() {<A as Call>::call}, val: Value(<ZST>) }
+ // + span: $DIR/inline_cycle_generic.rs:24:9: 24:29
+ // + literal: Const { ty: fn() {<B<C> as Call>::call}, val: Value(<ZST>) }
}
bb1: {

View File

@ -20,6 +20,8 @@
+ }
+ }
+ scope 4 (inlined <fn() -> ! {sleep} as Fn<()>>::call - shim(fn() -> ! {sleep})) { // at $DIR/inline_diverging.rs:27:13: 27:16
+ scope 5 (inlined sleep) { // at $SRC_DIR/core/src/ops/function.rs:LL:COL
+ }
+ }
+ }
@ -40,44 +42,11 @@
+ _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
+ goto -> bb1; // scope 5 at $DIR/inline_diverging.rs:39:5: 39:12
+ }
+
+ 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>) }
+ goto -> bb1; // scope 5 at $DIR/inline_diverging.rs:39:5: 39:12
}
}

View File

@ -38,37 +38,37 @@ fn checked_shl(_1: u32, _2: u32) -> Option<u32> {
debug self => _4; // in scope 10 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
scope 11 (inlined <u32 as TryFrom<u32>>::try_from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
debug value => _4; // in scope 11 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
scope 21 (inlined <u32 as Into<u32>>::into) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
debug self => _4; // in scope 21 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
scope 22 (inlined <u32 as From<u32>>::from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
debug t => _4; // in scope 22 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
scope 12 (inlined <u32 as Into<u32>>::into) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
debug self => _4; // in scope 12 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
scope 13 (inlined <u32 as From<u32>>::from) { // at $SRC_DIR/core/src/convert/mod.rs:LL:COL
debug t => _4; // in scope 13 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
}
}
}
}
scope 12 (inlined Result::<u32, Infallible>::ok) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
debug self => _5; // in scope 12 at $SRC_DIR/core/src/result.rs:LL:COL
let _6: u32; // in scope 12 at $SRC_DIR/core/src/result.rs:LL:COL
scope 13 {
debug x => _6; // in scope 13 at $SRC_DIR/core/src/result.rs:LL:COL
scope 14 (inlined Result::<u32, Infallible>::ok) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
debug self => _5; // in scope 14 at $SRC_DIR/core/src/result.rs:LL:COL
let _6: u32; // in scope 14 at $SRC_DIR/core/src/result.rs:LL:COL
scope 15 {
debug x => _6; // in scope 15 at $SRC_DIR/core/src/result.rs:LL:COL
}
}
scope 14 (inlined #[track_caller] Option::<u32>::unwrap_unchecked) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
debug self => _7; // in scope 14 at $SRC_DIR/core/src/option.rs:LL:COL
let mut _13: &std::option::Option<u32>; // in scope 14 at $SRC_DIR/core/src/option.rs:LL:COL
scope 15 {
debug val => _8; // in scope 15 at $SRC_DIR/core/src/option.rs:LL:COL
scope 16 (inlined #[track_caller] Option::<u32>::unwrap_unchecked) { // at $SRC_DIR/core/src/num/mod.rs:LL:COL
debug self => _7; // in scope 16 at $SRC_DIR/core/src/option.rs:LL:COL
let mut _13: &std::option::Option<u32>; // in scope 16 at $SRC_DIR/core/src/option.rs:LL:COL
scope 17 {
debug val => _8; // in scope 17 at $SRC_DIR/core/src/option.rs:LL:COL
}
scope 16 {
scope 18 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
scope 19 {
scope 20 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
scope 18 {
scope 20 (inlined unreachable_unchecked) { // at $SRC_DIR/core/src/option.rs:LL:COL
scope 21 {
scope 22 (inlined unreachable_unchecked::runtime) { // at $SRC_DIR/core/src/intrinsics.rs:LL:COL
}
}
}
}
scope 17 (inlined Option::<u32>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
debug self => _13; // in scope 17 at $SRC_DIR/core/src/option.rs:LL:COL
scope 19 (inlined Option::<u32>::is_some) { // at $SRC_DIR/core/src/option.rs:LL:COL
debug self => _13; // in scope 19 at $SRC_DIR/core/src/option.rs:LL:COL
}
}
}
@ -84,7 +84,7 @@ fn checked_shl(_1: u32, _2: u32) -> Option<u32> {
StorageLive(_10); // scope 0 at $DIR/checked_ops.rs:+1:7: +1:23
StorageLive(_11); // scope 0 at $DIR/checked_ops.rs:+1:7: +1:23
StorageLive(_9); // scope 3 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
StorageLive(_4); // scope 3 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
StorageLive(_4); // scope 5 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
StorageLive(_3); // scope 5 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
_3 = const 31_u32; // scope 5 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
_4 = BitAnd(_2, move _3); // scope 5 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
@ -94,12 +94,12 @@ fn checked_shl(_1: u32, _2: u32) -> Option<u32> {
StorageLive(_5); // scope 9 at $SRC_DIR/core/src/num/mod.rs:LL:COL
_5 = Result::<u32, Infallible>::Ok(_4); // scope 11 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
StorageLive(_6); // scope 9 at $SRC_DIR/core/src/num/mod.rs:LL:COL
_6 = move ((_5 as Ok).0: u32); // scope 12 at $SRC_DIR/core/src/result.rs:LL:COL
_7 = Option::<u32>::Some(move _6); // scope 13 at $SRC_DIR/core/src/result.rs:LL:COL
_6 = move ((_5 as Ok).0: u32); // scope 14 at $SRC_DIR/core/src/result.rs:LL:COL
_7 = Option::<u32>::Some(move _6); // scope 15 at $SRC_DIR/core/src/result.rs:LL:COL
StorageDead(_6); // scope 9 at $SRC_DIR/core/src/num/mod.rs:LL:COL
StorageDead(_5); // scope 9 at $SRC_DIR/core/src/num/mod.rs:LL:COL
StorageLive(_13); // scope 9 at $SRC_DIR/core/src/num/mod.rs:LL:COL
_8 = move ((_7 as Some).0: u32); // scope 14 at $SRC_DIR/core/src/option.rs:LL:COL
_8 = move ((_7 as Some).0: u32); // scope 16 at $SRC_DIR/core/src/option.rs:LL:COL
StorageDead(_13); // scope 9 at $SRC_DIR/core/src/num/mod.rs:LL:COL
StorageDead(_7); // scope 9 at $SRC_DIR/core/src/num/mod.rs:LL:COL
_9 = unchecked_shl::<u32>(_1, move _8) -> [return: bb1, unwind unreachable]; // scope 7 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
@ -110,7 +110,7 @@ fn checked_shl(_1: u32, _2: u32) -> Option<u32> {
bb1: {
StorageDead(_8); // scope 7 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
StorageDead(_4); // scope 3 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
StorageDead(_4); // scope 5 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
_10 = Ge(_2, const _); // scope 3 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
_11 = move _9; // scope 3 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL
StorageDead(_9); // scope 3 at $SRC_DIR/core/src/num/uint_macros.rs:LL:COL

View File

@ -7,14 +7,14 @@ fn int_range(_1: usize, _2: usize) -> () {
let mut _3: std::ops::Range<usize>; // in scope 0 at $DIR/loops.rs:+1:14: +1:24
let mut _4: std::ops::Range<usize>; // in scope 0 at $DIR/loops.rs:+1:14: +1:24
let mut _5: &mut std::ops::Range<usize>; // in scope 0 at $DIR/loops.rs:+1:14: +1:24
let mut _9: std::option::Option<usize>; // in scope 0 at $DIR/loops.rs:+1:14: +1:24
let mut _12: isize; // in scope 0 at $DIR/loops.rs:+1:5: +3:6
let _14: (); // in scope 0 at $DIR/loops.rs:+1:14: +1:24
let mut _11: std::option::Option<usize>; // in scope 0 at $DIR/loops.rs:+1:14: +1:24
let mut _14: isize; // in scope 0 at $DIR/loops.rs:+1:5: +3:6
let _16: (); // in scope 0 at $DIR/loops.rs:+1:14: +1:24
scope 1 {
debug iter => _4; // in scope 1 at $DIR/loops.rs:+1:14: +1:24
let _13: usize; // in scope 1 at $DIR/loops.rs:+1:9: +1:10
let _15: usize; // in scope 1 at $DIR/loops.rs:+1:9: +1:10
scope 2 {
debug i => _13; // in scope 2 at $DIR/loops.rs:+1:9: +1:10
debug i => _15; // in scope 2 at $DIR/loops.rs:+1:9: +1:10
}
scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) { // at $DIR/loops.rs:8:14: 8:24
debug self => _5; // in scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
@ -22,14 +22,20 @@ fn int_range(_1: usize, _2: usize) -> () {
debug self => _5; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _6: &usize; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _7: &usize; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _8: bool; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let _10: usize; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _11: usize; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _10: bool; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let _12: usize; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _13: usize; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
scope 6 {
debug old => _10; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
debug old => _12; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
scope 7 {
}
}
scope 8 (inlined cmp::impls::<impl PartialOrd for usize>::lt) { // at $SRC_DIR/core/src/iter/range.rs:LL:COL
debug self => _6; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
debug other => _7; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
let mut _8: usize; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
let mut _9: usize; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
}
}
}
}
@ -45,74 +51,74 @@ fn int_range(_1: usize, _2: usize) -> () {
}
bb1: {
StorageLive(_9); // scope 1 at $DIR/loops.rs:+1:14: +1:24
StorageLive(_11); // scope 1 at $DIR/loops.rs:+1:14: +1:24
_5 = &mut _4; // scope 1 at $DIR/loops.rs:+1:14: +1:24
StorageLive(_10); // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_8); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_12); // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_10); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_6); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_6 = &((*_5).0: usize); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_7); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_7 = &((*_5).1: usize); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_8 = <usize as PartialOrd>::lt(move _6, move _7) -> bb2; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
// mir::Constant
// + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
// + literal: Const { ty: for<'a, 'b> fn(&'a usize, &'b usize) -> bool {<usize as PartialOrd>::lt}, val: Value(<ZST>) }
StorageLive(_8); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
_8 = (*_6); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageLive(_9); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
_9 = (*_7); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
_10 = Lt(move _8, move _9); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_9); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_8); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_7); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_6); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
switchInt(move _10) -> [0: bb2, otherwise: bb3]; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb2: {
StorageDead(_7); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_6); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
switchInt(move _8) -> [0: bb3, otherwise: bb4]; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_11 = Option::<usize>::None; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb5; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb3: {
_9 = Option::<usize>::None; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb6; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb4: {
_10 = ((*_5).0: usize); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_11); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_11 = <usize as Step>::forward_unchecked(_10, const 1_usize) -> bb5; // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_12 = ((*_5).0: usize); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_13); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_13 = <usize as Step>::forward_unchecked(_12, const 1_usize) -> bb4; // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
// mir::Constant
// + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
// + literal: Const { ty: unsafe fn(usize, usize) -> usize {<usize as Step>::forward_unchecked}, val: Value(<ZST>) }
}
bb4: {
((*_5).0: usize) = move _13; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_13); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_11 = Option::<usize>::Some(_12); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb5; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb5: {
((*_5).0: usize) = move _11; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_11); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_9 = Option::<usize>::Some(_10); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb6; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_10); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_12); // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_14 = discriminant(_11); // scope 1 at $DIR/loops.rs:+1:14: +1:24
switchInt(move _14) -> [0: bb6, 1: bb7, otherwise: bb9]; // scope 1 at $DIR/loops.rs:+1:14: +1:24
}
bb6: {
StorageDead(_8); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_10); // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_12 = discriminant(_9); // scope 1 at $DIR/loops.rs:+1:14: +1:24
switchInt(move _12) -> [0: bb7, 1: bb8, otherwise: bb10]; // scope 1 at $DIR/loops.rs:+1:14: +1:24
}
bb7: {
StorageDead(_9); // scope 1 at $DIR/loops.rs:+3:5: +3:6
StorageDead(_11); // scope 1 at $DIR/loops.rs:+3:5: +3:6
StorageDead(_4); // scope 0 at $DIR/loops.rs:+3:5: +3:6
return; // scope 0 at $DIR/loops.rs:+4:2: +4:2
}
bb8: {
_13 = ((_9 as Some).0: usize); // scope 1 at $DIR/loops.rs:+1:9: +1:10
_14 = opaque::<usize>(_13) -> bb9; // scope 2 at $DIR/loops.rs:+2:9: +2:18
bb7: {
_15 = ((_11 as Some).0: usize); // scope 1 at $DIR/loops.rs:+1:9: +1:10
_16 = opaque::<usize>(_15) -> bb8; // scope 2 at $DIR/loops.rs:+2:9: +2:18
// mir::Constant
// + span: $DIR/loops.rs:9:9: 9:15
// + literal: Const { ty: fn(usize) {opaque::<usize>}, val: Value(<ZST>) }
}
bb9: {
StorageDead(_9); // scope 1 at $DIR/loops.rs:+3:5: +3:6
bb8: {
StorageDead(_11); // scope 1 at $DIR/loops.rs:+3:5: +3:6
goto -> bb1; // scope 1 at $DIR/loops.rs:+1:5: +3:6
}
bb10: {
bb9: {
unreachable; // scope 1 at $DIR/loops.rs:+1:14: +1:24
}
}

View File

@ -8,16 +8,16 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
let mut _4: std::ops::Range<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
let mut _5: std::ops::Range<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
let mut _6: &mut std::ops::Range<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
let mut _10: std::option::Option<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
let mut _13: isize; // in scope 0 at $DIR/range_iter.rs:+1:5: +3:6
let mut _15: &impl Fn(u32); // in scope 0 at $DIR/range_iter.rs:+2:9: +2:10
let mut _16: (u32,); // in scope 0 at $DIR/range_iter.rs:+2:9: +2:13
let _17: (); // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
let mut _12: std::option::Option<u32>; // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
let mut _15: isize; // in scope 0 at $DIR/range_iter.rs:+1:5: +3:6
let mut _17: &impl Fn(u32); // in scope 0 at $DIR/range_iter.rs:+2:9: +2:10
let mut _18: (u32,); // in scope 0 at $DIR/range_iter.rs:+2:9: +2:13
let _19: (); // in scope 0 at $DIR/range_iter.rs:+1:14: +1:24
scope 1 {
debug iter => _5; // in scope 1 at $DIR/range_iter.rs:+1:14: +1:24
let _14: u32; // in scope 1 at $DIR/range_iter.rs:+1:9: +1:10
let _16: u32; // in scope 1 at $DIR/range_iter.rs:+1:9: +1:10
scope 2 {
debug x => _14; // in scope 2 at $DIR/range_iter.rs:+1:9: +1:10
debug x => _16; // in scope 2 at $DIR/range_iter.rs:+1:9: +1:10
}
scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) { // at $DIR/range_iter.rs:21:14: 21:24
debug self => _6; // in scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
@ -25,14 +25,20 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
debug self => _6; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _7: &u32; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _8: &u32; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _9: bool; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let _11: u32; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _12: u32; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _11: bool; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let _13: u32; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _14: u32; // in scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
scope 6 {
debug old => _11; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
debug old => _13; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
scope 7 {
}
}
scope 8 (inlined cmp::impls::<impl PartialOrd for u32>::lt) { // at $SRC_DIR/core/src/iter/range.rs:LL:COL
debug self => _7; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
debug other => _8; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
let mut _9: u32; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
let mut _10: u32; // in scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
}
}
}
}
@ -48,92 +54,92 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
}
bb1: {
StorageLive(_10); // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
StorageLive(_12); // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
_6 = &mut _5; // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
StorageLive(_11); // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_9); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_13); // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_11); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_7); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_7 = &((*_6).0: u32); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_8); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_8 = &((*_6).1: u32); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_9 = <u32 as PartialOrd>::lt(move _7, move _8) -> [return: bb2, unwind: bb12]; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
// mir::Constant
// + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
// + literal: Const { ty: for<'a, 'b> fn(&'a u32, &'b u32) -> bool {<u32 as PartialOrd>::lt}, val: Value(<ZST>) }
StorageLive(_9); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
_9 = (*_7); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageLive(_10); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
_10 = (*_8); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
_11 = Lt(move _9, move _10); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_10); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_9); // scope 8 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_8); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_7); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
switchInt(move _11) -> [0: bb2, otherwise: bb3]; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb2: {
StorageDead(_8); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_7); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
switchInt(move _9) -> [0: bb3, otherwise: bb4]; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_12 = Option::<u32>::None; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb5; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb3: {
_10 = Option::<u32>::None; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb6; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb4: {
_11 = ((*_6).0: u32); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_12); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_12 = <u32 as Step>::forward_unchecked(_11, const 1_usize) -> [return: bb5, unwind: bb12]; // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_13 = ((*_6).0: u32); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_14); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_14 = <u32 as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind: bb11]; // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
// mir::Constant
// + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
// + literal: Const { ty: unsafe fn(u32, usize) -> u32 {<u32 as Step>::forward_unchecked}, val: Value(<ZST>) }
}
bb4: {
((*_6).0: u32) = move _14; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_14); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_12 = Option::<u32>::Some(_13); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb5; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb5: {
((*_6).0: u32) = move _12; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_12); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_10 = Option::<u32>::Some(_11); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb6; // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_11); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_13); // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_15 = discriminant(_12); // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb10]; // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
}
bb6: {
StorageDead(_9); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_11); // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_13 = discriminant(_10); // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
switchInt(move _13) -> [0: bb7, 1: bb9, otherwise: bb11]; // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
StorageDead(_12); // scope 1 at $DIR/range_iter.rs:+3:5: +3:6
StorageDead(_5); // scope 0 at $DIR/range_iter.rs:+3:5: +3:6
drop(_3) -> bb7; // scope 0 at $DIR/range_iter.rs:+4:1: +4:2
}
bb7: {
StorageDead(_10); // scope 1 at $DIR/range_iter.rs:+3:5: +3:6
StorageDead(_5); // scope 0 at $DIR/range_iter.rs:+3:5: +3:6
drop(_3) -> bb8; // scope 0 at $DIR/range_iter.rs:+4:1: +4:2
}
bb8: {
return; // scope 0 at $DIR/range_iter.rs:+4:2: +4:2
}
bb9: {
_14 = ((_10 as Some).0: u32); // scope 1 at $DIR/range_iter.rs:+1:9: +1:10
StorageLive(_15); // scope 2 at $DIR/range_iter.rs:+2:9: +2:10
_15 = &_3; // scope 2 at $DIR/range_iter.rs:+2:9: +2:10
StorageLive(_16); // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
_16 = (_14,); // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
_17 = <impl Fn(u32) as Fn<(u32,)>>::call(move _15, move _16) -> [return: bb10, unwind: bb12]; // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
bb8: {
_16 = ((_12 as Some).0: u32); // scope 1 at $DIR/range_iter.rs:+1:9: +1:10
StorageLive(_17); // scope 2 at $DIR/range_iter.rs:+2:9: +2:10
_17 = &_3; // scope 2 at $DIR/range_iter.rs:+2:9: +2:10
StorageLive(_18); // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
_18 = (_16,); // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
_19 = <impl Fn(u32) as Fn<(u32,)>>::call(move _17, move _18) -> [return: bb9, unwind: bb11]; // scope 2 at $DIR/range_iter.rs:+2:9: +2:13
// mir::Constant
// + span: $DIR/range_iter.rs:22:9: 22:10
// + literal: Const { ty: for<'a> extern "rust-call" fn(&'a impl Fn(u32), (u32,)) -> <impl Fn(u32) as FnOnce<(u32,)>>::Output {<impl Fn(u32) as Fn<(u32,)>>::call}, val: Value(<ZST>) }
}
bb10: {
StorageDead(_16); // scope 2 at $DIR/range_iter.rs:+2:12: +2:13
StorageDead(_15); // scope 2 at $DIR/range_iter.rs:+2:12: +2:13
StorageDead(_10); // scope 1 at $DIR/range_iter.rs:+3:5: +3:6
bb9: {
StorageDead(_18); // scope 2 at $DIR/range_iter.rs:+2:12: +2:13
StorageDead(_17); // scope 2 at $DIR/range_iter.rs:+2:12: +2:13
StorageDead(_12); // scope 1 at $DIR/range_iter.rs:+3:5: +3:6
goto -> bb1; // scope 1 at $DIR/range_iter.rs:+1:5: +3:6
}
bb11: {
bb10: {
unreachable; // scope 1 at $DIR/range_iter.rs:+1:14: +1:24
}
bb12 (cleanup): {
drop(_3) -> [return: bb13, unwind terminate]; // scope 0 at $DIR/range_iter.rs:+4:1: +4:2
bb11 (cleanup): {
drop(_3) -> [return: bb12, unwind terminate]; // scope 0 at $DIR/range_iter.rs:+4:1: +4:2
}
bb13 (cleanup): {
bb12 (cleanup): {
resume; // scope 0 at $DIR/range_iter.rs:+0:1: +4:2
}
}

View File

@ -9,60 +9,66 @@ fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
debug self => _1; // in scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _2: &u32; // in scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _3: &u32; // in scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _4: bool; // in scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let _5: u32; // in scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _6: u32; // in scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _6: bool; // in scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let _7: u32; // in scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _8: u32; // in scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
scope 3 {
debug old => _5; // in scope 3 at $SRC_DIR/core/src/iter/range.rs:LL:COL
debug old => _7; // in scope 3 at $SRC_DIR/core/src/iter/range.rs:LL:COL
scope 4 {
}
}
scope 5 (inlined cmp::impls::<impl PartialOrd for u32>::lt) { // at $SRC_DIR/core/src/iter/range.rs:LL:COL
debug self => _2; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
debug other => _3; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
let mut _4: u32; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
let mut _5: u32; // in scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
}
}
}
bb0: {
StorageLive(_5); // scope 1 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_4); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_7); // scope 1 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_6); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_2); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_2 = &((*_1).0: u32); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_3); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_3 = &((*_1).1: u32); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_4 = <u32 as PartialOrd>::lt(move _2, move _3) -> bb1; // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
// mir::Constant
// + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
// + literal: Const { ty: for<'a, 'b> fn(&'a u32, &'b u32) -> bool {<u32 as PartialOrd>::lt}, val: Value(<ZST>) }
StorageLive(_4); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
_4 = (*_2); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageLive(_5); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
_5 = (*_3); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
_6 = Lt(move _4, move _5); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_5); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_4); // scope 5 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_3); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_2); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
switchInt(move _6) -> [0: bb1, otherwise: bb2]; // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb1: {
StorageDead(_3); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_2); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
switchInt(move _4) -> [0: bb2, otherwise: bb3]; // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_0 = Option::<u32>::None; // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb4; // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb2: {
_0 = Option::<u32>::None; // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb5; // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb3: {
_5 = ((*_1).0: u32); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_6); // scope 3 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_6 = <u32 as Step>::forward_unchecked(_5, const 1_usize) -> bb4; // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_7 = ((*_1).0: u32); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_8); // scope 3 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_8 = <u32 as Step>::forward_unchecked(_7, const 1_usize) -> bb3; // scope 4 at $SRC_DIR/core/src/iter/range.rs:LL:COL
// mir::Constant
// + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
// + literal: Const { ty: unsafe fn(u32, usize) -> u32 {<u32 as Step>::forward_unchecked}, val: Value(<ZST>) }
}
bb4: {
((*_1).0: u32) = move _6; // scope 3 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_6); // scope 3 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_0 = Option::<u32>::Some(_5); // scope 3 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb5; // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
bb3: {
((*_1).0: u32) = move _8; // scope 3 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_8); // scope 3 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_0 = Option::<u32>::Some(_7); // scope 3 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb4; // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb5: {
StorageDead(_4); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_5); // scope 1 at $SRC_DIR/core/src/iter/range.rs:LL:COL
bb4: {
StorageDead(_6); // scope 2 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_7); // scope 1 at $SRC_DIR/core/src/iter/range.rs:LL:COL
return; // scope 0 at $DIR/range_iter.rs:+2:2: +2:2
}
}

View File

@ -8,21 +8,21 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
let mut _4: std::ops::Range<usize>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:28
let mut _5: std::ops::Range<usize>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:28
let mut _6: &mut std::ops::Range<usize>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:28
let mut _10: std::option::Option<usize>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:28
let mut _13: isize; // in scope 0 at $DIR/slice_iter.rs:+1:5: +4:6
let mut _15: usize; // in scope 0 at $DIR/slice_iter.rs:+2:18: +2:26
let mut _16: bool; // in scope 0 at $DIR/slice_iter.rs:+2:18: +2:26
let mut _18: &impl Fn(usize, &T); // in scope 0 at $DIR/slice_iter.rs:+3:9: +3:10
let mut _19: (usize, &T); // in scope 0 at $DIR/slice_iter.rs:+3:9: +3:16
let _20: (); // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:28
let mut _12: std::option::Option<usize>; // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:28
let mut _15: isize; // in scope 0 at $DIR/slice_iter.rs:+1:5: +4:6
let mut _17: usize; // in scope 0 at $DIR/slice_iter.rs:+2:18: +2:26
let mut _18: bool; // in scope 0 at $DIR/slice_iter.rs:+2:18: +2:26
let mut _20: &impl Fn(usize, &T); // in scope 0 at $DIR/slice_iter.rs:+3:9: +3:10
let mut _21: (usize, &T); // in scope 0 at $DIR/slice_iter.rs:+3:9: +3:16
let _22: (); // in scope 0 at $DIR/slice_iter.rs:+1:14: +1:28
scope 1 {
debug iter => _5; // in scope 1 at $DIR/slice_iter.rs:+1:14: +1:28
let _14: usize; // in scope 1 at $DIR/slice_iter.rs:+1:9: +1:10
let _16: usize; // in scope 1 at $DIR/slice_iter.rs:+1:9: +1:10
scope 2 {
debug i => _14; // in scope 2 at $DIR/slice_iter.rs:+1:9: +1:10
let _17: &T; // in scope 2 at $DIR/slice_iter.rs:+2:13: +2:14
debug i => _16; // in scope 2 at $DIR/slice_iter.rs:+1:9: +1:10
let _19: &T; // in scope 2 at $DIR/slice_iter.rs:+2:13: +2:14
scope 3 {
debug x => _17; // in scope 3 at $DIR/slice_iter.rs:+2:13: +2:14
debug x => _19; // in scope 3 at $DIR/slice_iter.rs:+2:13: +2:14
}
}
scope 5 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) { // at $DIR/slice_iter.rs:49:14: 49:28
@ -31,14 +31,20 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
debug self => _6; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _7: &usize; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _8: &usize; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _9: bool; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let _11: usize; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _12: usize; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _11: bool; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let _13: usize; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
let mut _14: usize; // in scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
scope 7 {
debug old => _11; // in scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
debug old => _13; // in scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
scope 8 {
}
}
scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::lt) { // at $SRC_DIR/core/src/iter/range.rs:LL:COL
debug self => _7; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
debug other => _8; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
let mut _9: usize; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
let mut _10: usize; // in scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
}
}
}
}
@ -57,99 +63,99 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
}
bb1: {
StorageLive(_10); // scope 1 at $DIR/slice_iter.rs:+1:14: +1:28
StorageLive(_12); // scope 1 at $DIR/slice_iter.rs:+1:14: +1:28
_6 = &mut _5; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:28
StorageLive(_11); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_9); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_13); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_11); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_7); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_7 = &((*_6).0: usize); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_8); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_8 = &((*_6).1: usize); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_9 = <usize as PartialOrd>::lt(move _7, move _8) -> [return: bb2, unwind: bb13]; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
// mir::Constant
// + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
// + literal: Const { ty: for<'a, 'b> fn(&'a usize, &'b usize) -> bool {<usize as PartialOrd>::lt}, val: Value(<ZST>) }
StorageLive(_9); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
_9 = (*_7); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageLive(_10); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
_10 = (*_8); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
_11 = Lt(move _9, move _10); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_10); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_9); // scope 9 at $SRC_DIR/core/src/cmp.rs:LL:COL
StorageDead(_8); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_7); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
switchInt(move _11) -> [0: bb2, otherwise: bb3]; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb2: {
StorageDead(_8); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_7); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
switchInt(move _9) -> [0: bb3, otherwise: bb4]; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_12 = Option::<usize>::None; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb5; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb3: {
_10 = Option::<usize>::None; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb6; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb4: {
_11 = ((*_6).0: usize); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_12); // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_12 = <usize as Step>::forward_unchecked(_11, const 1_usize) -> [return: bb5, unwind: bb13]; // scope 8 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_13 = ((*_6).0: usize); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageLive(_14); // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_14 = <usize as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind: bb12]; // scope 8 at $SRC_DIR/core/src/iter/range.rs:LL:COL
// mir::Constant
// + span: $SRC_DIR/core/src/iter/range.rs:LL:COL
// + literal: Const { ty: unsafe fn(usize, usize) -> usize {<usize as Step>::forward_unchecked}, val: Value(<ZST>) }
}
bb4: {
((*_6).0: usize) = move _14; // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_14); // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_12 = Option::<usize>::Some(_13); // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb5; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
}
bb5: {
((*_6).0: usize) = move _12; // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_12); // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_10 = Option::<usize>::Some(_11); // scope 7 at $SRC_DIR/core/src/iter/range.rs:LL:COL
goto -> bb6; // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_11); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_13); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_15 = discriminant(_12); // scope 1 at $DIR/slice_iter.rs:+1:14: +1:28
switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb11]; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:28
}
bb6: {
StorageDead(_9); // scope 6 at $SRC_DIR/core/src/iter/range.rs:LL:COL
StorageDead(_11); // scope 5 at $SRC_DIR/core/src/iter/range.rs:LL:COL
_13 = discriminant(_10); // scope 1 at $DIR/slice_iter.rs:+1:14: +1:28
switchInt(move _13) -> [0: bb7, 1: bb9, otherwise: bb12]; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:28
StorageDead(_12); // scope 1 at $DIR/slice_iter.rs:+4:5: +4:6
StorageDead(_5); // scope 0 at $DIR/slice_iter.rs:+4:5: +4:6
drop(_2) -> bb7; // scope 0 at $DIR/slice_iter.rs:+5:1: +5:2
}
bb7: {
StorageDead(_10); // scope 1 at $DIR/slice_iter.rs:+4:5: +4:6
StorageDead(_5); // scope 0 at $DIR/slice_iter.rs:+4:5: +4:6
drop(_2) -> bb8; // scope 0 at $DIR/slice_iter.rs:+5:1: +5:2
}
bb8: {
return; // scope 0 at $DIR/slice_iter.rs:+5:2: +5:2
}
bb9: {
_14 = ((_10 as Some).0: usize); // scope 1 at $DIR/slice_iter.rs:+1:9: +1:10
_15 = Len((*_1)); // scope 2 at $DIR/slice_iter.rs:+2:18: +2:26
_16 = Lt(_14, _15); // scope 2 at $DIR/slice_iter.rs:+2:18: +2:26
assert(move _16, "index out of bounds: the length is {} but the index is {}", move _15, _14) -> [success: bb10, unwind: bb13]; // scope 2 at $DIR/slice_iter.rs:+2:18: +2:26
bb8: {
_16 = ((_12 as Some).0: usize); // scope 1 at $DIR/slice_iter.rs:+1:9: +1:10
_17 = Len((*_1)); // scope 2 at $DIR/slice_iter.rs:+2:18: +2:26
_18 = Lt(_16, _17); // scope 2 at $DIR/slice_iter.rs:+2:18: +2:26
assert(move _18, "index out of bounds: the length is {} but the index is {}", move _17, _16) -> [success: bb9, unwind: bb12]; // scope 2 at $DIR/slice_iter.rs:+2:18: +2:26
}
bb10: {
_17 = &(*_1)[_14]; // scope 2 at $DIR/slice_iter.rs:+2:17: +2:26
StorageLive(_18); // scope 3 at $DIR/slice_iter.rs:+3:9: +3:10
_18 = &_2; // scope 3 at $DIR/slice_iter.rs:+3:9: +3:10
StorageLive(_19); // scope 3 at $DIR/slice_iter.rs:+3:9: +3:16
_19 = (_14, _17); // scope 3 at $DIR/slice_iter.rs:+3:9: +3:16
_20 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _18, move _19) -> [return: bb11, unwind: bb13]; // scope 3 at $DIR/slice_iter.rs:+3:9: +3:16
bb9: {
_19 = &(*_1)[_16]; // scope 2 at $DIR/slice_iter.rs:+2:17: +2:26
StorageLive(_20); // scope 3 at $DIR/slice_iter.rs:+3:9: +3:10
_20 = &_2; // scope 3 at $DIR/slice_iter.rs:+3:9: +3:10
StorageLive(_21); // scope 3 at $DIR/slice_iter.rs:+3:9: +3:16
_21 = (_16, _19); // scope 3 at $DIR/slice_iter.rs:+3:9: +3:16
_22 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _20, move _21) -> [return: bb10, unwind: bb12]; // scope 3 at $DIR/slice_iter.rs:+3:9: +3:16
// mir::Constant
// + span: $DIR/slice_iter.rs:51:9: 51:10
// + literal: Const { ty: for<'a> extern "rust-call" fn(&'a impl Fn(usize, &T), (usize, &T)) -> <impl Fn(usize, &T) as FnOnce<(usize, &T)>>::Output {<impl Fn(usize, &T) as Fn<(usize, &T)>>::call}, val: Value(<ZST>) }
}
bb11: {
StorageDead(_19); // scope 3 at $DIR/slice_iter.rs:+3:15: +3:16
StorageDead(_18); // scope 3 at $DIR/slice_iter.rs:+3:15: +3:16
StorageDead(_10); // scope 1 at $DIR/slice_iter.rs:+4:5: +4:6
bb10: {
StorageDead(_21); // scope 3 at $DIR/slice_iter.rs:+3:15: +3:16
StorageDead(_20); // scope 3 at $DIR/slice_iter.rs:+3:15: +3:16
StorageDead(_12); // scope 1 at $DIR/slice_iter.rs:+4:5: +4:6
goto -> bb1; // scope 1 at $DIR/slice_iter.rs:+1:5: +4:6
}
bb12: {
bb11: {
unreachable; // scope 1 at $DIR/slice_iter.rs:+1:14: +1:28
}
bb13 (cleanup): {
drop(_2) -> [return: bb14, unwind terminate]; // scope 0 at $DIR/slice_iter.rs:+5:1: +5:2
bb12 (cleanup): {
drop(_2) -> [return: bb13, unwind terminate]; // scope 0 at $DIR/slice_iter.rs:+5:1: +5:2
}
bb14 (cleanup): {
bb13 (cleanup): {
resume; // scope 0 at $DIR/slice_iter.rs:+0:1: +5:2
}
}