mir-opt & codegen test updates

`SimplifyArm` and such are currently in `-Zunsound-mir-opts` and thus weren't running by default, so having something like them for the new desugar shouldn't be necessary for switching.
This commit is contained in:
Scott McMurray 2021-04-25 22:02:48 -07:00
parent 266a72637a
commit 47b99485a3
10 changed files with 352 additions and 349 deletions

View file

@ -7,11 +7,28 @@
type R = Result<u64, i32>;
// This was written to the `?` from `try_trait`,
// but `try_trait_v2` uses a different structure,
// so the relevant desugar is copied inline
// in order to keep the test testing the same thing.
#[no_mangle]
fn try_identity(x: R) -> R {
pub fn try_identity(x: R) -> R {
// CHECK: start:
// CHECK-NOT: br {{.*}}
// CHECK ret void
let y = x?;
let y = match into_result(x) {
Err(e) => return from_error(From::from(e)),
Ok(v) => v,
};
Ok(y)
}
#[inline]
fn into_result<T, E>(r: Result<T, E>) -> Result<T, E> {
r
}
#[inline]
fn from_error<T, E>(e: E) -> Result<T, E> {
Err(e)
}

View file

@ -4,21 +4,20 @@ fn test() -> Option<Box<u32>> {
let mut _0: std::option::Option<std::boxed::Box<u32>>; // return place in scope 0 at $DIR/issue-62289.rs:8:14: 8:30
let mut _1: std::boxed::Box<u32>; // in scope 0 at $DIR/issue-62289.rs:9:10: 9:21
let mut _2: std::boxed::Box<u32>; // in scope 0 at $DIR/issue-62289.rs:9:10: 9:21
let mut _3: std::result::Result<u32, std::option::NoneError>; // in scope 0 at $DIR/issue-62289.rs:9:15: 9:20
let mut _3: std::ops::ControlFlow<std::option::Option<std::convert::Infallible>, u32>; // in scope 0 at $DIR/issue-62289.rs:9:15: 9:20
let mut _4: std::option::Option<u32>; // in scope 0 at $DIR/issue-62289.rs:9:15: 9:19
let mut _5: isize; // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
let _6: std::option::NoneError; // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
let _6: std::option::Option<std::convert::Infallible>; // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
let mut _7: !; // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
let mut _8: std::option::NoneError; // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
let mut _9: std::option::NoneError; // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
let _10: u32; // in scope 0 at $DIR/issue-62289.rs:9:15: 9:20
let mut _8: std::option::Option<std::convert::Infallible>; // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
let _9: u32; // in scope 0 at $DIR/issue-62289.rs:9:15: 9:20
scope 1 {
debug err => _6; // in scope 1 at $DIR/issue-62289.rs:9:19: 9:20
debug residual => _6; // in scope 1 at $DIR/issue-62289.rs:9:19: 9:20
scope 2 {
}
}
scope 3 {
debug val => _10; // in scope 3 at $DIR/issue-62289.rs:9:15: 9:20
debug val => _9; // in scope 3 at $DIR/issue-62289.rs:9:15: 9:20
scope 4 {
}
}
@ -30,10 +29,10 @@ fn test() -> Option<Box<u32>> {
StorageLive(_3); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
StorageLive(_4); // scope 0 at $DIR/issue-62289.rs:9:15: 9:19
_4 = Option::<u32>::None; // scope 0 at $DIR/issue-62289.rs:9:15: 9:19
_3 = <Option<u32> as Try>::into_result(move _4) -> [return: bb1, unwind: bb12]; // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
_3 = <Option<u32> as Try>::branch(move _4) -> [return: bb1, unwind: bb11]; // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
// mir::Constant
// + span: $DIR/issue-62289.rs:9:15: 9:20
// + literal: Const { ty: fn(std::option::Option<u32>) -> std::result::Result<<std::option::Option<u32> as std::ops::Try>::Ok, <std::option::Option<u32> as std::ops::Try>::Error> {<std::option::Option<u32> as std::ops::Try>::into_result}, val: Value(Scalar(<ZST>)) }
// + literal: Const { ty: fn(std::option::Option<u32>) -> std::ops::ControlFlow<<std::option::Option<u32> as std::ops::Try>::Residual, <std::option::Option<u32> as std::ops::Try>::Output> {<std::option::Option<u32> as std::ops::Try>::branch}, val: Value(Scalar(<ZST>)) }
}
bb1: {
@ -43,12 +42,12 @@ fn test() -> Option<Box<u32>> {
}
bb2: {
StorageLive(_10); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
_10 = ((_3 as Ok).0: u32); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
(*_2) = _10; // scope 4 at $DIR/issue-62289.rs:9:15: 9:20
StorageDead(_10); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
StorageLive(_9); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
_9 = ((_3 as Continue).0: u32); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
(*_2) = _9; // scope 4 at $DIR/issue-62289.rs:9:15: 9:20
StorageDead(_9); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
_1 = move _2; // scope 0 at $DIR/issue-62289.rs:9:10: 9:21
drop(_2) -> [return: bb7, unwind: bb11]; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
drop(_2) -> [return: bb6, unwind: bb10]; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
}
bb3: {
@ -57,62 +56,53 @@ fn test() -> Option<Box<u32>> {
bb4: {
StorageLive(_6); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
_6 = ((_3 as Err).0: std::option::NoneError); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
_6 = ((_3 as Break).0: std::option::Option<std::convert::Infallible>); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
StorageLive(_8); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
StorageLive(_9); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
_9 = _6; // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
_8 = <NoneError as From<NoneError>>::from(move _9) -> [return: bb5, unwind: bb12]; // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
_8 = _6; // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
_0 = <Option<Box<u32>> as FromResidual<Option<Infallible>>>::from_residual(move _8) -> [return: bb5, unwind: bb11]; // scope 2 at $DIR/issue-62289.rs:9:15: 9:20
// mir::Constant
// + span: $DIR/issue-62289.rs:9:19: 9:20
// + literal: Const { ty: fn(std::option::NoneError) -> std::option::NoneError {<std::option::NoneError as std::convert::From<std::option::NoneError>>::from}, val: Value(Scalar(<ZST>)) }
// + literal: Const { ty: fn(std::option::Option<std::convert::Infallible>) -> std::option::Option<std::boxed::Box<u32>> {<std::option::Option<std::boxed::Box<u32>> as std::ops::FromResidual<std::option::Option<std::convert::Infallible>>>::from_residual}, val: Value(Scalar(<ZST>)) }
}
bb5: {
StorageDead(_9); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
_0 = <Option<Box<u32>> as Try>::from_error(move _8) -> [return: bb6, unwind: bb12]; // scope 2 at $DIR/issue-62289.rs:9:15: 9:20
// mir::Constant
// + span: $DIR/issue-62289.rs:9:15: 9:20
// + literal: Const { ty: fn(<std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::Error) -> std::option::Option<std::boxed::Box<u32>> {<std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::from_error}, val: Value(Scalar(<ZST>)) }
StorageDead(_8); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
StorageDead(_6); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
drop(_2) -> bb8; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
}
bb6: {
StorageDead(_8); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
StorageDead(_6); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
drop(_2) -> bb9; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
StorageDead(_2); // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
_0 = Option::<Box<u32>>::Some(move _1); // scope 0 at $DIR/issue-62289.rs:9:5: 9:22
drop(_1) -> bb7; // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
}
bb7: {
StorageDead(_2); // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
_0 = Option::<Box<u32>>::Some(move _1); // scope 0 at $DIR/issue-62289.rs:9:5: 9:22
drop(_1) -> bb8; // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
StorageDead(_1); // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
StorageDead(_3); // scope 0 at $DIR/issue-62289.rs:10:1: 10:2
goto -> bb9; // scope 0 at $DIR/issue-62289.rs:10:2: 10:2
}
bb8: {
StorageDead(_1); // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
StorageDead(_3); // scope 0 at $DIR/issue-62289.rs:10:1: 10:2
goto -> bb10; // scope 0 at $DIR/issue-62289.rs:10:2: 10:2
}
bb9: {
StorageDead(_2); // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
StorageDead(_1); // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
StorageDead(_3); // scope 0 at $DIR/issue-62289.rs:10:1: 10:2
goto -> bb10; // scope 0 at $DIR/issue-62289.rs:10:2: 10:2
goto -> bb9; // scope 0 at $DIR/issue-62289.rs:10:2: 10:2
}
bb10: {
bb9: {
return; // scope 0 at $DIR/issue-62289.rs:10:2: 10:2
}
bb10 (cleanup): {
drop(_1) -> bb12; // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
}
bb11 (cleanup): {
drop(_1) -> bb13; // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
drop(_2) -> bb12; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
}
bb12 (cleanup): {
drop(_2) -> bb13; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
}
bb13 (cleanup): {
resume; // scope 0 at $DIR/issue-62289.rs:8:1: 10:2
}
}

View file

@ -20,8 +20,23 @@ fn id_result(r: Result<u8, i32>) -> Result<u8, i32> {
}
}
fn into_result<T, E>(r: Result<T, E>) -> Result<T, E> {
r
}
fn from_error<T, E>(e: E) -> Result<T, E> {
Err(e)
}
// This was written to the `?` from `try_trait`,
// but `try_trait_v2` uses a different structure,
// so the relevant desugar is copied inline
// in order to keep the test testing the same thing.
fn id_try(r: Result<u8, i32>) -> Result<u8, i32> {
let x = r?;
let x = match into_result(r) {
Err(e) => return from_error(From::from(e)),
Ok(v) => v,
};
Ok(x)
}

View file

@ -2,101 +2,93 @@
+ // MIR for `id_try` after SimplifyArmIdentity
fn id_try(_1: Result<u8, i32>) -> Result<u8, i32> {
debug r => _1; // in scope 0 at $DIR/simplify-arm.rs:23:11: 23:12
let mut _0: std::result::Result<u8, i32>; // return place in scope 0 at $DIR/simplify-arm.rs:23:34: 23:49
let _2: u8; // in scope 0 at $DIR/simplify-arm.rs:24:9: 24:10
let mut _3: std::result::Result<u8, i32>; // in scope 0 at $DIR/simplify-arm.rs:24:13: 24:15
let mut _4: std::result::Result<u8, i32>; // in scope 0 at $DIR/simplify-arm.rs:24:13: 24:14
let mut _5: isize; // in scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
let _6: i32; // in scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
let mut _7: !; // in scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
let mut _8: i32; // in scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
let mut _9: i32; // in scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
let _10: u8; // in scope 0 at $DIR/simplify-arm.rs:24:13: 24:15
let mut _11: u8; // in scope 0 at $DIR/simplify-arm.rs:25:8: 25:9
debug r => _1; // in scope 0 at $DIR/simplify-arm.rs:35:11: 35:12
let mut _0: std::result::Result<u8, i32>; // return place in scope 0 at $DIR/simplify-arm.rs:35:34: 35:49
let _2: u8; // in scope 0 at $DIR/simplify-arm.rs:36:9: 36:10
let mut _3: std::result::Result<u8, i32>; // in scope 0 at $DIR/simplify-arm.rs:36:19: 36:33
let mut _4: std::result::Result<u8, i32>; // in scope 0 at $DIR/simplify-arm.rs:36:31: 36:32
let mut _5: isize; // in scope 0 at $DIR/simplify-arm.rs:37:9: 37:15
let _6: i32; // in scope 0 at $DIR/simplify-arm.rs:37:13: 37:14
let mut _7: !; // in scope 0 at $DIR/simplify-arm.rs:37:19: 37:51
let mut _8: i32; // in scope 0 at $DIR/simplify-arm.rs:37:37: 37:50
let mut _9: i32; // in scope 0 at $DIR/simplify-arm.rs:37:48: 37:49
let _10: u8; // in scope 0 at $DIR/simplify-arm.rs:38:12: 38:13
let mut _11: u8; // in scope 0 at $DIR/simplify-arm.rs:40:8: 40:9
scope 1 {
- debug x => _2; // in scope 1 at $DIR/simplify-arm.rs:24:9: 24:10
+ debug x => ((_0 as Ok).0: u8); // in scope 1 at $DIR/simplify-arm.rs:24:9: 24:10
- debug x => _2; // in scope 1 at $DIR/simplify-arm.rs:36:9: 36:10
+ debug x => ((_0 as Ok).0: u8); // in scope 1 at $DIR/simplify-arm.rs:36:9: 36:10
}
scope 2 {
- debug err => _6; // in scope 2 at $DIR/simplify-arm.rs:24:14: 24:15
+ debug err => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify-arm.rs:24:14: 24:15
scope 3 {
scope 7 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify-arm.rs:24:14: 24:15
- debug t => _9; // in scope 7 at $DIR/simplify-arm.rs:24:14: 24:15
+ debug t => ((_0 as Err).0: i32); // in scope 7 at $DIR/simplify-arm.rs:24:14: 24:15
}
scope 8 (inlined <Result<u8, i32> as Try>::from_error) { // at $DIR/simplify-arm.rs:24:13: 24:15
- debug v => _8; // in scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
+ debug v => ((_0 as Err).0: i32); // in scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
let mut _12: i32; // in scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
}
- debug e => _6; // in scope 2 at $DIR/simplify-arm.rs:37:13: 37:14
+ debug e => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify-arm.rs:37:13: 37:14
scope 5 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify-arm.rs:37:37: 37:50
- debug t => _9; // in scope 5 at $DIR/simplify-arm.rs:37:37: 37:50
+ debug t => ((_0 as Err).0: i32); // in scope 5 at $DIR/simplify-arm.rs:37:37: 37:50
}
scope 6 (inlined from_error::<u8, i32>) { // at $DIR/simplify-arm.rs:37:26: 37:51
- debug e => _8; // in scope 6 at $DIR/simplify-arm.rs:37:26: 37:51
+ debug e => ((_0 as Err).0: i32); // in scope 6 at $DIR/simplify-arm.rs:37:26: 37:51
}
}
scope 4 {
- debug val => _10; // in scope 4 at $DIR/simplify-arm.rs:24:13: 24:15
+ debug val => ((_0 as Ok).0: u8); // in scope 4 at $DIR/simplify-arm.rs:24:13: 24:15
scope 5 {
}
scope 3 {
- debug v => _10; // in scope 3 at $DIR/simplify-arm.rs:38:12: 38:13
+ debug v => ((_0 as Ok).0: u8); // in scope 3 at $DIR/simplify-arm.rs:38:12: 38:13
}
scope 6 (inlined <Result<u8, i32> as Try>::into_result) { // at $DIR/simplify-arm.rs:24:13: 24:15
debug self => _4; // in scope 6 at $DIR/simplify-arm.rs:24:13: 24:15
scope 4 (inlined into_result::<u8, i32>) { // at $DIR/simplify-arm.rs:36:19: 36:33
debug r => _4; // in scope 4 at $DIR/simplify-arm.rs:36:19: 36:33
}
bb0: {
StorageLive(_2); // scope 0 at $DIR/simplify-arm.rs:24:9: 24:10
StorageLive(_3); // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15
StorageLive(_4); // scope 0 at $DIR/simplify-arm.rs:24:13: 24:14
_4 = _1; // scope 0 at $DIR/simplify-arm.rs:24:13: 24:14
_3 = move _4; // scope 6 at $DIR/simplify-arm.rs:24:13: 24:15
StorageDead(_4); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
_5 = discriminant(_3); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
switchInt(move _5) -> [0_isize: bb1, 1_isize: bb3, otherwise: bb2]; // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
StorageLive(_2); // scope 0 at $DIR/simplify-arm.rs:36:9: 36:10
StorageLive(_3); // scope 0 at $DIR/simplify-arm.rs:36:19: 36:33
StorageLive(_4); // scope 0 at $DIR/simplify-arm.rs:36:31: 36:32
_4 = _1; // scope 0 at $DIR/simplify-arm.rs:36:31: 36:32
_3 = move _4; // scope 4 at $DIR/simplify-arm.rs:36:19: 36:33
StorageDead(_4); // scope 0 at $DIR/simplify-arm.rs:36:32: 36:33
_5 = discriminant(_3); // scope 0 at $DIR/simplify-arm.rs:37:9: 37:15
switchInt(move _5) -> [0_isize: bb1, 1_isize: bb3, otherwise: bb2]; // scope 0 at $DIR/simplify-arm.rs:37:9: 37:15
}
bb1: {
- StorageLive(_10); // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15
- _10 = ((_3 as Ok).0: u8); // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15
- _2 = _10; // scope 5 at $DIR/simplify-arm.rs:24:13: 24:15
- StorageDead(_10); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
+ _0 = move _3; // scope 1 at $DIR/simplify-arm.rs:25:5: 25:10
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:24:15: 24:16
- StorageLive(_11); // scope 1 at $DIR/simplify-arm.rs:25:8: 25:9
- _11 = _2; // scope 1 at $DIR/simplify-arm.rs:25:8: 25:9
- ((_0 as Ok).0: u8) = move _11; // scope 1 at $DIR/simplify-arm.rs:25:5: 25:10
- discriminant(_0) = 0; // scope 1 at $DIR/simplify-arm.rs:25:5: 25:10
- StorageDead(_11); // scope 1 at $DIR/simplify-arm.rs:25:9: 25:10
StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2
- StorageLive(_10); // scope 0 at $DIR/simplify-arm.rs:38:12: 38:13
- _10 = ((_3 as Ok).0: u8); // scope 0 at $DIR/simplify-arm.rs:38:12: 38:13
- _2 = _10; // scope 3 at $DIR/simplify-arm.rs:38:18: 38:19
- StorageDead(_10); // scope 0 at $DIR/simplify-arm.rs:38:18: 38:19
+ _0 = move _3; // scope 1 at $DIR/simplify-arm.rs:40:5: 40:10
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:39:6: 39:7
- StorageLive(_11); // scope 1 at $DIR/simplify-arm.rs:40:8: 40:9
- _11 = _2; // scope 1 at $DIR/simplify-arm.rs:40:8: 40:9
- ((_0 as Ok).0: u8) = move _11; // scope 1 at $DIR/simplify-arm.rs:40:5: 40:10
- discriminant(_0) = 0; // scope 1 at $DIR/simplify-arm.rs:40:5: 40:10
- StorageDead(_11); // scope 1 at $DIR/simplify-arm.rs:40:9: 40:10
StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:41:1: 41:2
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:41:2: 41:2
}
bb2: {
unreachable; // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15
unreachable; // scope 0 at $DIR/simplify-arm.rs:36:19: 36:33
}
bb3: {
- StorageLive(_6); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
- _6 = ((_3 as Err).0: i32); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
- StorageLive(_8); // scope 3 at $DIR/simplify-arm.rs:24:14: 24:15
- StorageLive(_9); // scope 3 at $DIR/simplify-arm.rs:24:14: 24:15
- _9 = _6; // scope 3 at $DIR/simplify-arm.rs:24:14: 24:15
- _8 = move _9; // scope 7 at $DIR/simplify-arm.rs:24:14: 24:15
- StorageDead(_9); // scope 3 at $DIR/simplify-arm.rs:24:14: 24:15
- StorageLive(_12); // scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
- _12 = move _8; // scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
- ((_0 as Err).0: i32) = move _12; // scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
- discriminant(_0) = 1; // scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
- StorageDead(_12); // scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
- StorageDead(_8); // scope 3 at $DIR/simplify-arm.rs:24:14: 24:15
- StorageDead(_6); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
+ _0 = move _3; // scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:24:15: 24:16
StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2
- StorageLive(_6); // scope 0 at $DIR/simplify-arm.rs:37:13: 37:14
- _6 = ((_3 as Err).0: i32); // scope 0 at $DIR/simplify-arm.rs:37:13: 37:14
- StorageLive(_8); // scope 2 at $DIR/simplify-arm.rs:37:37: 37:50
- StorageLive(_9); // scope 2 at $DIR/simplify-arm.rs:37:48: 37:49
- _9 = _6; // scope 2 at $DIR/simplify-arm.rs:37:48: 37:49
- _8 = move _9; // scope 5 at $DIR/simplify-arm.rs:37:37: 37:50
- StorageDead(_9); // scope 2 at $DIR/simplify-arm.rs:37:49: 37:50
- ((_0 as Err).0: i32) = move _8; // scope 6 at $DIR/simplify-arm.rs:37:26: 37:51
- discriminant(_0) = 1; // scope 6 at $DIR/simplify-arm.rs:37:26: 37:51
- StorageDead(_8); // scope 2 at $DIR/simplify-arm.rs:37:50: 37:51
- StorageDead(_6); // scope 0 at $DIR/simplify-arm.rs:37:50: 37:51
+ _0 = move _3; // scope 6 at $DIR/simplify-arm.rs:37:26: 37:51
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:39:6: 39:7
StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:41:1: 41:2
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:41:2: 41:2
}
bb4: {
return; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2
return; // scope 0 at $DIR/simplify-arm.rs:41:2: 41:2
}
}

View file

@ -2,75 +2,70 @@
+ // MIR for `id_try` after SimplifyBranchSame
fn id_try(_1: Result<u8, i32>) -> Result<u8, i32> {
debug r => _1; // in scope 0 at $DIR/simplify-arm.rs:23:11: 23:12
let mut _0: std::result::Result<u8, i32>; // return place in scope 0 at $DIR/simplify-arm.rs:23:34: 23:49
let _2: u8; // in scope 0 at $DIR/simplify-arm.rs:24:9: 24:10
let mut _3: std::result::Result<u8, i32>; // in scope 0 at $DIR/simplify-arm.rs:24:13: 24:15
let mut _4: std::result::Result<u8, i32>; // in scope 0 at $DIR/simplify-arm.rs:24:13: 24:14
let mut _5: isize; // in scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
let _6: i32; // in scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
let mut _7: !; // in scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
let mut _8: i32; // in scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
let mut _9: i32; // in scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
let _10: u8; // in scope 0 at $DIR/simplify-arm.rs:24:13: 24:15
let mut _11: u8; // in scope 0 at $DIR/simplify-arm.rs:25:8: 25:9
debug r => _1; // in scope 0 at $DIR/simplify-arm.rs:35:11: 35:12
let mut _0: std::result::Result<u8, i32>; // return place in scope 0 at $DIR/simplify-arm.rs:35:34: 35:49
let _2: u8; // in scope 0 at $DIR/simplify-arm.rs:36:9: 36:10
let mut _3: std::result::Result<u8, i32>; // in scope 0 at $DIR/simplify-arm.rs:36:19: 36:33
let mut _4: std::result::Result<u8, i32>; // in scope 0 at $DIR/simplify-arm.rs:36:31: 36:32
let mut _5: isize; // in scope 0 at $DIR/simplify-arm.rs:37:9: 37:15
let _6: i32; // in scope 0 at $DIR/simplify-arm.rs:37:13: 37:14
let mut _7: !; // in scope 0 at $DIR/simplify-arm.rs:37:19: 37:51
let mut _8: i32; // in scope 0 at $DIR/simplify-arm.rs:37:37: 37:50
let mut _9: i32; // in scope 0 at $DIR/simplify-arm.rs:37:48: 37:49
let _10: u8; // in scope 0 at $DIR/simplify-arm.rs:38:12: 38:13
let mut _11: u8; // in scope 0 at $DIR/simplify-arm.rs:40:8: 40:9
scope 1 {
debug x => ((_0 as Ok).0: u8); // in scope 1 at $DIR/simplify-arm.rs:24:9: 24:10
debug x => ((_0 as Ok).0: u8); // in scope 1 at $DIR/simplify-arm.rs:36:9: 36:10
}
scope 2 {
debug err => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify-arm.rs:24:14: 24:15
scope 3 {
scope 7 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify-arm.rs:24:14: 24:15
debug t => ((_0 as Err).0: i32); // in scope 7 at $DIR/simplify-arm.rs:24:14: 24:15
}
scope 8 (inlined <Result<u8, i32> as Try>::from_error) { // at $DIR/simplify-arm.rs:24:13: 24:15
debug v => ((_0 as Err).0: i32); // in scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
let mut _12: i32; // in scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
}
debug e => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify-arm.rs:37:13: 37:14
scope 5 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify-arm.rs:37:37: 37:50
debug t => ((_0 as Err).0: i32); // in scope 5 at $DIR/simplify-arm.rs:37:37: 37:50
}
scope 6 (inlined from_error::<u8, i32>) { // at $DIR/simplify-arm.rs:37:26: 37:51
debug e => ((_0 as Err).0: i32); // in scope 6 at $DIR/simplify-arm.rs:37:26: 37:51
}
}
scope 4 {
debug val => ((_0 as Ok).0: u8); // in scope 4 at $DIR/simplify-arm.rs:24:13: 24:15
scope 5 {
}
scope 3 {
debug v => ((_0 as Ok).0: u8); // in scope 3 at $DIR/simplify-arm.rs:38:12: 38:13
}
scope 6 (inlined <Result<u8, i32> as Try>::into_result) { // at $DIR/simplify-arm.rs:24:13: 24:15
debug self => _4; // in scope 6 at $DIR/simplify-arm.rs:24:13: 24:15
scope 4 (inlined into_result::<u8, i32>) { // at $DIR/simplify-arm.rs:36:19: 36:33
debug r => _4; // in scope 4 at $DIR/simplify-arm.rs:36:19: 36:33
}
bb0: {
StorageLive(_2); // scope 0 at $DIR/simplify-arm.rs:24:9: 24:10
StorageLive(_3); // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15
StorageLive(_4); // scope 0 at $DIR/simplify-arm.rs:24:13: 24:14
_4 = _1; // scope 0 at $DIR/simplify-arm.rs:24:13: 24:14
_3 = move _4; // scope 6 at $DIR/simplify-arm.rs:24:13: 24:15
StorageDead(_4); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
_5 = discriminant(_3); // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
- switchInt(move _5) -> [0_isize: bb1, 1_isize: bb3, otherwise: bb2]; // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
+ goto -> bb1; // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15
StorageLive(_2); // scope 0 at $DIR/simplify-arm.rs:36:9: 36:10
StorageLive(_3); // scope 0 at $DIR/simplify-arm.rs:36:19: 36:33
StorageLive(_4); // scope 0 at $DIR/simplify-arm.rs:36:31: 36:32
_4 = _1; // scope 0 at $DIR/simplify-arm.rs:36:31: 36:32
_3 = move _4; // scope 4 at $DIR/simplify-arm.rs:36:19: 36:33
StorageDead(_4); // scope 0 at $DIR/simplify-arm.rs:36:32: 36:33
_5 = discriminant(_3); // scope 0 at $DIR/simplify-arm.rs:37:9: 37:15
- switchInt(move _5) -> [0_isize: bb1, 1_isize: bb3, otherwise: bb2]; // scope 0 at $DIR/simplify-arm.rs:37:9: 37:15
+ goto -> bb1; // scope 0 at $DIR/simplify-arm.rs:37:9: 37:15
}
bb1: {
_0 = move _3; // scope 1 at $DIR/simplify-arm.rs:25:5: 25:10
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:24:15: 24:16
StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2
- goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2
+ goto -> bb2; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2
_0 = move _3; // scope 1 at $DIR/simplify-arm.rs:40:5: 40:10
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:39:6: 39:7
StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:41:1: 41:2
- goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:41:2: 41:2
+ goto -> bb2; // scope 0 at $DIR/simplify-arm.rs:41:2: 41:2
}
bb2: {
- unreachable; // scope 0 at $DIR/simplify-arm.rs:24:13: 24:15
- unreachable; // scope 0 at $DIR/simplify-arm.rs:36:19: 36:33
- }
-
- bb3: {
- _0 = move _3; // scope 8 at $DIR/simplify-arm.rs:24:13: 24:15
- StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:24:15: 24:16
- StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2
- goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2
- _0 = move _3; // scope 6 at $DIR/simplify-arm.rs:37:26: 37:51
- StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:39:6: 39:7
- StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:41:1: 41:2
- goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:41:2: 41:2
- }
-
- bb4: {
return; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2
return; // scope 0 at $DIR/simplify-arm.rs:41:2: 41:2
}
}

View file

@ -4,8 +4,24 @@
// EMIT_MIR simplify_try.try_identity.SimplifyLocals.after.mir
// EMIT_MIR simplify_try.try_identity.DestinationPropagation.diff
fn into_result<T, E>(r: Result<T, E>) -> Result<T, E> {
r
}
fn from_error<T, E>(e: E) -> Result<T, E> {
Err(e)
}
// This was written to the `?` from `try_trait`,
// but `try_trait_v2` uses a different structure,
// so the relevant desugar is copied inline
// in order to keep the test testing the same thing.
fn try_identity(x: Result<u32, i32>) -> Result<u32, i32> {
let y = x?;
let y = match into_result(x) {
Err(e) => return from_error(From::from(e)),
Ok(v) => v,
};
Ok(y)
}

View file

@ -2,67 +2,62 @@
+ // MIR for `try_identity` after DestinationPropagation
fn try_identity(_1: Result<u32, i32>) -> Result<u32, i32> {
debug x => _1; // in scope 0 at $DIR/simplify_try.rs:7:17: 7:18
let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:7:41: 7:57
let _2: u32; // in scope 0 at $DIR/simplify_try.rs:8:9: 8:10
let mut _3: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:8:13: 8:15
let mut _4: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:8:13: 8:14
let mut _5: isize; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let _6: i32; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let mut _7: !; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let mut _8: i32; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let mut _9: i32; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let _10: u32; // in scope 0 at $DIR/simplify_try.rs:8:13: 8:15
let mut _11: u32; // in scope 0 at $DIR/simplify_try.rs:9:8: 9:9
debug x => _1; // in scope 0 at $DIR/simplify_try.rs:20:17: 20:18
let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:20:41: 20:57
let _2: u32; // in scope 0 at $DIR/simplify_try.rs:21:9: 21:10
let mut _3: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:21:19: 21:33
let mut _4: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:21:31: 21:32
let mut _5: isize; // in scope 0 at $DIR/simplify_try.rs:22:9: 22:15
let _6: i32; // in scope 0 at $DIR/simplify_try.rs:22:13: 22:14
let mut _7: !; // in scope 0 at $DIR/simplify_try.rs:22:19: 22:51
let mut _8: i32; // in scope 0 at $DIR/simplify_try.rs:22:37: 22:50
let mut _9: i32; // in scope 0 at $DIR/simplify_try.rs:22:48: 22:49
let _10: u32; // in scope 0 at $DIR/simplify_try.rs:23:12: 23:13
let mut _11: u32; // in scope 0 at $DIR/simplify_try.rs:25:8: 25:9
scope 1 {
debug y => ((_0 as Ok).0: u32); // in scope 1 at $DIR/simplify_try.rs:8:9: 8:10
debug y => ((_0 as Ok).0: u32); // in scope 1 at $DIR/simplify_try.rs:21:9: 21:10
}
scope 2 {
debug err => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify_try.rs:8:14: 8:15
scope 3 {
scope 7 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify_try.rs:8:14: 8:15
debug t => ((_0 as Err).0: i32); // in scope 7 at $DIR/simplify_try.rs:8:14: 8:15
}
scope 8 (inlined <Result<u32, i32> as Try>::from_error) { // at $DIR/simplify_try.rs:8:13: 8:15
debug v => ((_0 as Err).0: i32); // in scope 8 at $DIR/simplify_try.rs:8:13: 8:15
let mut _12: i32; // in scope 8 at $DIR/simplify_try.rs:8:13: 8:15
}
debug e => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify_try.rs:22:13: 22:14
scope 5 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify_try.rs:22:37: 22:50
debug t => ((_0 as Err).0: i32); // in scope 5 at $DIR/simplify_try.rs:22:37: 22:50
}
scope 6 (inlined from_error::<u32, i32>) { // at $DIR/simplify_try.rs:22:26: 22:51
debug e => ((_0 as Err).0: i32); // in scope 6 at $DIR/simplify_try.rs:22:26: 22:51
}
}
scope 4 {
debug val => ((_0 as Ok).0: u32); // in scope 4 at $DIR/simplify_try.rs:8:13: 8:15
scope 5 {
}
scope 3 {
debug v => ((_0 as Ok).0: u32); // in scope 3 at $DIR/simplify_try.rs:23:12: 23:13
}
scope 6 (inlined <Result<u32, i32> as Try>::into_result) { // at $DIR/simplify_try.rs:8:13: 8:15
- debug self => _4; // in scope 6 at $DIR/simplify_try.rs:8:13: 8:15
+ debug self => _0; // in scope 6 at $DIR/simplify_try.rs:8:13: 8:15
scope 4 (inlined into_result::<u32, i32>) { // at $DIR/simplify_try.rs:21:19: 21:33
- debug r => _4; // in scope 4 at $DIR/simplify_try.rs:21:19: 21:33
+ debug r => _0; // in scope 4 at $DIR/simplify_try.rs:21:19: 21:33
}
bb0: {
StorageLive(_2); // scope 0 at $DIR/simplify_try.rs:8:9: 8:10
- StorageLive(_3); // scope 0 at $DIR/simplify_try.rs:8:13: 8:15
- StorageLive(_4); // scope 0 at $DIR/simplify_try.rs:8:13: 8:14
- _4 = _1; // scope 0 at $DIR/simplify_try.rs:8:13: 8:14
- _3 = move _4; // scope 6 at $DIR/simplify_try.rs:8:13: 8:15
- StorageDead(_4); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
- _5 = discriminant(_3); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
+ nop; // scope 0 at $DIR/simplify_try.rs:8:13: 8:15
+ nop; // scope 0 at $DIR/simplify_try.rs:8:13: 8:14
+ _0 = _1; // scope 0 at $DIR/simplify_try.rs:8:13: 8:14
+ nop; // scope 6 at $DIR/simplify_try.rs:8:13: 8:15
+ nop; // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
+ _5 = discriminant(_0); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
goto -> bb1; // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
StorageLive(_2); // scope 0 at $DIR/simplify_try.rs:21:9: 21:10
- StorageLive(_3); // scope 0 at $DIR/simplify_try.rs:21:19: 21:33
- StorageLive(_4); // scope 0 at $DIR/simplify_try.rs:21:31: 21:32
- _4 = _1; // scope 0 at $DIR/simplify_try.rs:21:31: 21:32
- _3 = move _4; // scope 4 at $DIR/simplify_try.rs:21:19: 21:33
- StorageDead(_4); // scope 0 at $DIR/simplify_try.rs:21:32: 21:33
- _5 = discriminant(_3); // scope 0 at $DIR/simplify_try.rs:22:9: 22:15
+ nop; // scope 0 at $DIR/simplify_try.rs:21:19: 21:33
+ nop; // scope 0 at $DIR/simplify_try.rs:21:31: 21:32
+ _0 = _1; // scope 0 at $DIR/simplify_try.rs:21:31: 21:32
+ nop; // scope 4 at $DIR/simplify_try.rs:21:19: 21:33
+ nop; // scope 0 at $DIR/simplify_try.rs:21:32: 21:33
+ _5 = discriminant(_0); // scope 0 at $DIR/simplify_try.rs:22:9: 22:15
goto -> bb1; // scope 0 at $DIR/simplify_try.rs:22:9: 22:15
}
bb1: {
- _0 = move _3; // scope 1 at $DIR/simplify_try.rs:9:5: 9:10
- StorageDead(_3); // scope 0 at $DIR/simplify_try.rs:8:15: 8:16
+ nop; // scope 1 at $DIR/simplify_try.rs:9:5: 9:10
+ nop; // scope 0 at $DIR/simplify_try.rs:8:15: 8:16
StorageDead(_2); // scope 0 at $DIR/simplify_try.rs:10:1: 10:2
return; // scope 0 at $DIR/simplify_try.rs:10:2: 10:2
- _0 = move _3; // scope 1 at $DIR/simplify_try.rs:25:5: 25:10
- StorageDead(_3); // scope 0 at $DIR/simplify_try.rs:24:6: 24:7
+ nop; // scope 1 at $DIR/simplify_try.rs:25:5: 25:10
+ nop; // scope 0 at $DIR/simplify_try.rs:24:6: 24:7
StorageDead(_2); // scope 0 at $DIR/simplify_try.rs:26:1: 26:2
return; // scope 0 at $DIR/simplify_try.rs:26:2: 26:2
}
}

View file

@ -2,93 +2,85 @@
+ // MIR for `try_identity` after SimplifyArmIdentity
fn try_identity(_1: Result<u32, i32>) -> Result<u32, i32> {
debug x => _1; // in scope 0 at $DIR/simplify_try.rs:7:17: 7:18
let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:7:41: 7:57
let _2: u32; // in scope 0 at $DIR/simplify_try.rs:8:9: 8:10
let mut _3: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:8:13: 8:15
let mut _4: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:8:13: 8:14
let mut _5: isize; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let _6: i32; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let mut _7: !; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let mut _8: i32; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let mut _9: i32; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let _10: u32; // in scope 0 at $DIR/simplify_try.rs:8:13: 8:15
let mut _11: u32; // in scope 0 at $DIR/simplify_try.rs:9:8: 9:9
debug x => _1; // in scope 0 at $DIR/simplify_try.rs:20:17: 20:18
let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:20:41: 20:57
let _2: u32; // in scope 0 at $DIR/simplify_try.rs:21:9: 21:10
let mut _3: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:21:19: 21:33
let mut _4: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:21:31: 21:32
let mut _5: isize; // in scope 0 at $DIR/simplify_try.rs:22:9: 22:15
let _6: i32; // in scope 0 at $DIR/simplify_try.rs:22:13: 22:14
let mut _7: !; // in scope 0 at $DIR/simplify_try.rs:22:19: 22:51
let mut _8: i32; // in scope 0 at $DIR/simplify_try.rs:22:37: 22:50
let mut _9: i32; // in scope 0 at $DIR/simplify_try.rs:22:48: 22:49
let _10: u32; // in scope 0 at $DIR/simplify_try.rs:23:12: 23:13
let mut _11: u32; // in scope 0 at $DIR/simplify_try.rs:25:8: 25:9
scope 1 {
- debug y => _2; // in scope 1 at $DIR/simplify_try.rs:8:9: 8:10
+ debug y => ((_0 as Ok).0: u32); // in scope 1 at $DIR/simplify_try.rs:8:9: 8:10
- debug y => _2; // in scope 1 at $DIR/simplify_try.rs:21:9: 21:10
+ debug y => ((_0 as Ok).0: u32); // in scope 1 at $DIR/simplify_try.rs:21:9: 21:10
}
scope 2 {
- debug err => _6; // in scope 2 at $DIR/simplify_try.rs:8:14: 8:15
+ debug err => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify_try.rs:8:14: 8:15
scope 3 {
scope 7 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify_try.rs:8:14: 8:15
- debug t => _9; // in scope 7 at $DIR/simplify_try.rs:8:14: 8:15
+ debug t => ((_0 as Err).0: i32); // in scope 7 at $DIR/simplify_try.rs:8:14: 8:15
}
scope 8 (inlined <Result<u32, i32> as Try>::from_error) { // at $DIR/simplify_try.rs:8:13: 8:15
- debug v => _8; // in scope 8 at $DIR/simplify_try.rs:8:13: 8:15
+ debug v => ((_0 as Err).0: i32); // in scope 8 at $DIR/simplify_try.rs:8:13: 8:15
let mut _12: i32; // in scope 8 at $DIR/simplify_try.rs:8:13: 8:15
}
- debug e => _6; // in scope 2 at $DIR/simplify_try.rs:22:13: 22:14
+ debug e => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify_try.rs:22:13: 22:14
scope 5 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify_try.rs:22:37: 22:50
- debug t => _9; // in scope 5 at $DIR/simplify_try.rs:22:37: 22:50
+ debug t => ((_0 as Err).0: i32); // in scope 5 at $DIR/simplify_try.rs:22:37: 22:50
}
scope 6 (inlined from_error::<u32, i32>) { // at $DIR/simplify_try.rs:22:26: 22:51
- debug e => _8; // in scope 6 at $DIR/simplify_try.rs:22:26: 22:51
+ debug e => ((_0 as Err).0: i32); // in scope 6 at $DIR/simplify_try.rs:22:26: 22:51
}
}
scope 4 {
- debug val => _10; // in scope 4 at $DIR/simplify_try.rs:8:13: 8:15
+ debug val => ((_0 as Ok).0: u32); // in scope 4 at $DIR/simplify_try.rs:8:13: 8:15
scope 5 {
}
scope 3 {
- debug v => _10; // in scope 3 at $DIR/simplify_try.rs:23:12: 23:13
+ debug v => ((_0 as Ok).0: u32); // in scope 3 at $DIR/simplify_try.rs:23:12: 23:13
}
scope 6 (inlined <Result<u32, i32> as Try>::into_result) { // at $DIR/simplify_try.rs:8:13: 8:15
debug self => _4; // in scope 6 at $DIR/simplify_try.rs:8:13: 8:15
scope 4 (inlined into_result::<u32, i32>) { // at $DIR/simplify_try.rs:21:19: 21:33
debug r => _4; // in scope 4 at $DIR/simplify_try.rs:21:19: 21:33
}
bb0: {
StorageLive(_2); // scope 0 at $DIR/simplify_try.rs:8:9: 8:10
StorageLive(_3); // scope 0 at $DIR/simplify_try.rs:8:13: 8:15
StorageLive(_4); // scope 0 at $DIR/simplify_try.rs:8:13: 8:14
_4 = _1; // scope 0 at $DIR/simplify_try.rs:8:13: 8:14
_3 = move _4; // scope 6 at $DIR/simplify_try.rs:8:13: 8:15
StorageDead(_4); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
_5 = discriminant(_3); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
switchInt(move _5) -> [0_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
StorageLive(_2); // scope 0 at $DIR/simplify_try.rs:21:9: 21:10
StorageLive(_3); // scope 0 at $DIR/simplify_try.rs:21:19: 21:33
StorageLive(_4); // scope 0 at $DIR/simplify_try.rs:21:31: 21:32
_4 = _1; // scope 0 at $DIR/simplify_try.rs:21:31: 21:32
_3 = move _4; // scope 4 at $DIR/simplify_try.rs:21:19: 21:33
StorageDead(_4); // scope 0 at $DIR/simplify_try.rs:21:32: 21:33
_5 = discriminant(_3); // scope 0 at $DIR/simplify_try.rs:22:9: 22:15
switchInt(move _5) -> [0_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify_try.rs:22:9: 22:15
}
bb1: {
- StorageLive(_10); // scope 0 at $DIR/simplify_try.rs:8:13: 8:15
- _10 = ((_3 as Ok).0: u32); // scope 0 at $DIR/simplify_try.rs:8:13: 8:15
- _2 = _10; // scope 5 at $DIR/simplify_try.rs:8:13: 8:15
- StorageDead(_10); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
+ _0 = move _3; // scope 1 at $DIR/simplify_try.rs:9:5: 9:10
StorageDead(_3); // scope 0 at $DIR/simplify_try.rs:8:15: 8:16
- StorageLive(_11); // scope 1 at $DIR/simplify_try.rs:9:8: 9:9
- _11 = _2; // scope 1 at $DIR/simplify_try.rs:9:8: 9:9
- ((_0 as Ok).0: u32) = move _11; // scope 1 at $DIR/simplify_try.rs:9:5: 9:10
- discriminant(_0) = 0; // scope 1 at $DIR/simplify_try.rs:9:5: 9:10
- StorageDead(_11); // scope 1 at $DIR/simplify_try.rs:9:9: 9:10
StorageDead(_2); // scope 0 at $DIR/simplify_try.rs:10:1: 10:2
return; // scope 0 at $DIR/simplify_try.rs:10:2: 10:2
- StorageLive(_10); // scope 0 at $DIR/simplify_try.rs:23:12: 23:13
- _10 = ((_3 as Ok).0: u32); // scope 0 at $DIR/simplify_try.rs:23:12: 23:13
- _2 = _10; // scope 3 at $DIR/simplify_try.rs:23:18: 23:19
- StorageDead(_10); // scope 0 at $DIR/simplify_try.rs:23:18: 23:19
+ _0 = move _3; // scope 1 at $DIR/simplify_try.rs:25:5: 25:10
StorageDead(_3); // scope 0 at $DIR/simplify_try.rs:24:6: 24:7
- StorageLive(_11); // scope 1 at $DIR/simplify_try.rs:25:8: 25:9
- _11 = _2; // scope 1 at $DIR/simplify_try.rs:25:8: 25:9
- ((_0 as Ok).0: u32) = move _11; // scope 1 at $DIR/simplify_try.rs:25:5: 25:10
- discriminant(_0) = 0; // scope 1 at $DIR/simplify_try.rs:25:5: 25:10
- StorageDead(_11); // scope 1 at $DIR/simplify_try.rs:25:9: 25:10
StorageDead(_2); // scope 0 at $DIR/simplify_try.rs:26:1: 26:2
return; // scope 0 at $DIR/simplify_try.rs:26:2: 26:2
}
bb2: {
- StorageLive(_6); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
- _6 = ((_3 as Err).0: i32); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
- StorageLive(_8); // scope 3 at $DIR/simplify_try.rs:8:14: 8:15
- StorageLive(_9); // scope 3 at $DIR/simplify_try.rs:8:14: 8:15
- _9 = _6; // scope 3 at $DIR/simplify_try.rs:8:14: 8:15
- _8 = move _9; // scope 7 at $DIR/simplify_try.rs:8:14: 8:15
- StorageDead(_9); // scope 3 at $DIR/simplify_try.rs:8:14: 8:15
- StorageLive(_12); // scope 8 at $DIR/simplify_try.rs:8:13: 8:15
- _12 = move _8; // scope 8 at $DIR/simplify_try.rs:8:13: 8:15
- ((_0 as Err).0: i32) = move _12; // scope 8 at $DIR/simplify_try.rs:8:13: 8:15
- discriminant(_0) = 1; // scope 8 at $DIR/simplify_try.rs:8:13: 8:15
- StorageDead(_12); // scope 8 at $DIR/simplify_try.rs:8:13: 8:15
- StorageDead(_8); // scope 3 at $DIR/simplify_try.rs:8:14: 8:15
- StorageDead(_6); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
+ _0 = move _3; // scope 8 at $DIR/simplify_try.rs:8:13: 8:15
StorageDead(_3); // scope 0 at $DIR/simplify_try.rs:8:15: 8:16
StorageDead(_2); // scope 0 at $DIR/simplify_try.rs:10:1: 10:2
return; // scope 0 at $DIR/simplify_try.rs:10:2: 10:2
- StorageLive(_6); // scope 0 at $DIR/simplify_try.rs:22:13: 22:14
- _6 = ((_3 as Err).0: i32); // scope 0 at $DIR/simplify_try.rs:22:13: 22:14
- StorageLive(_8); // scope 2 at $DIR/simplify_try.rs:22:37: 22:50
- StorageLive(_9); // scope 2 at $DIR/simplify_try.rs:22:48: 22:49
- _9 = _6; // scope 2 at $DIR/simplify_try.rs:22:48: 22:49
- _8 = move _9; // scope 5 at $DIR/simplify_try.rs:22:37: 22:50
- StorageDead(_9); // scope 2 at $DIR/simplify_try.rs:22:49: 22:50
- ((_0 as Err).0: i32) = move _8; // scope 6 at $DIR/simplify_try.rs:22:26: 22:51
- discriminant(_0) = 1; // scope 6 at $DIR/simplify_try.rs:22:26: 22:51
- StorageDead(_8); // scope 2 at $DIR/simplify_try.rs:22:50: 22:51
- StorageDead(_6); // scope 0 at $DIR/simplify_try.rs:22:50: 22:51
+ _0 = move _3; // scope 6 at $DIR/simplify_try.rs:22:26: 22:51
StorageDead(_3); // scope 0 at $DIR/simplify_try.rs:24:6: 24:7
StorageDead(_2); // scope 0 at $DIR/simplify_try.rs:26:1: 26:2
return; // scope 0 at $DIR/simplify_try.rs:26:2: 26:2
}
}

View file

@ -1,57 +1,52 @@
// MIR for `try_identity` after SimplifyBranchSame
fn try_identity(_1: Result<u32, i32>) -> Result<u32, i32> {
debug x => _1; // in scope 0 at $DIR/simplify_try.rs:7:17: 7:18
let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:7:41: 7:57
let _2: u32; // in scope 0 at $DIR/simplify_try.rs:8:9: 8:10
let mut _3: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:8:13: 8:15
let mut _4: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:8:13: 8:14
let mut _5: isize; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let _6: i32; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let mut _7: !; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let mut _8: i32; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let mut _9: i32; // in scope 0 at $DIR/simplify_try.rs:8:14: 8:15
let _10: u32; // in scope 0 at $DIR/simplify_try.rs:8:13: 8:15
let mut _11: u32; // in scope 0 at $DIR/simplify_try.rs:9:8: 9:9
debug x => _1; // in scope 0 at $DIR/simplify_try.rs:20:17: 20:18
let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:20:41: 20:57
let _2: u32; // in scope 0 at $DIR/simplify_try.rs:21:9: 21:10
let mut _3: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:21:19: 21:33
let mut _4: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:21:31: 21:32
let mut _5: isize; // in scope 0 at $DIR/simplify_try.rs:22:9: 22:15
let _6: i32; // in scope 0 at $DIR/simplify_try.rs:22:13: 22:14
let mut _7: !; // in scope 0 at $DIR/simplify_try.rs:22:19: 22:51
let mut _8: i32; // in scope 0 at $DIR/simplify_try.rs:22:37: 22:50
let mut _9: i32; // in scope 0 at $DIR/simplify_try.rs:22:48: 22:49
let _10: u32; // in scope 0 at $DIR/simplify_try.rs:23:12: 23:13
let mut _11: u32; // in scope 0 at $DIR/simplify_try.rs:25:8: 25:9
scope 1 {
debug y => ((_0 as Ok).0: u32); // in scope 1 at $DIR/simplify_try.rs:8:9: 8:10
debug y => ((_0 as Ok).0: u32); // in scope 1 at $DIR/simplify_try.rs:21:9: 21:10
}
scope 2 {
debug err => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify_try.rs:8:14: 8:15
scope 3 {
scope 7 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify_try.rs:8:14: 8:15
debug t => ((_0 as Err).0: i32); // in scope 7 at $DIR/simplify_try.rs:8:14: 8:15
}
scope 8 (inlined <Result<u32, i32> as Try>::from_error) { // at $DIR/simplify_try.rs:8:13: 8:15
debug v => ((_0 as Err).0: i32); // in scope 8 at $DIR/simplify_try.rs:8:13: 8:15
let mut _12: i32; // in scope 8 at $DIR/simplify_try.rs:8:13: 8:15
}
debug e => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify_try.rs:22:13: 22:14
scope 5 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify_try.rs:22:37: 22:50
debug t => ((_0 as Err).0: i32); // in scope 5 at $DIR/simplify_try.rs:22:37: 22:50
}
scope 6 (inlined from_error::<u32, i32>) { // at $DIR/simplify_try.rs:22:26: 22:51
debug e => ((_0 as Err).0: i32); // in scope 6 at $DIR/simplify_try.rs:22:26: 22:51
}
}
scope 4 {
debug val => ((_0 as Ok).0: u32); // in scope 4 at $DIR/simplify_try.rs:8:13: 8:15
scope 5 {
}
scope 3 {
debug v => ((_0 as Ok).0: u32); // in scope 3 at $DIR/simplify_try.rs:23:12: 23:13
}
scope 6 (inlined <Result<u32, i32> as Try>::into_result) { // at $DIR/simplify_try.rs:8:13: 8:15
debug self => _4; // in scope 6 at $DIR/simplify_try.rs:8:13: 8:15
scope 4 (inlined into_result::<u32, i32>) { // at $DIR/simplify_try.rs:21:19: 21:33
debug r => _4; // in scope 4 at $DIR/simplify_try.rs:21:19: 21:33
}
bb0: {
StorageLive(_2); // scope 0 at $DIR/simplify_try.rs:8:9: 8:10
StorageLive(_3); // scope 0 at $DIR/simplify_try.rs:8:13: 8:15
StorageLive(_4); // scope 0 at $DIR/simplify_try.rs:8:13: 8:14
_4 = _1; // scope 0 at $DIR/simplify_try.rs:8:13: 8:14
_3 = move _4; // scope 6 at $DIR/simplify_try.rs:8:13: 8:15
StorageDead(_4); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
_5 = discriminant(_3); // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
goto -> bb1; // scope 0 at $DIR/simplify_try.rs:8:14: 8:15
StorageLive(_2); // scope 0 at $DIR/simplify_try.rs:21:9: 21:10
StorageLive(_3); // scope 0 at $DIR/simplify_try.rs:21:19: 21:33
StorageLive(_4); // scope 0 at $DIR/simplify_try.rs:21:31: 21:32
_4 = _1; // scope 0 at $DIR/simplify_try.rs:21:31: 21:32
_3 = move _4; // scope 4 at $DIR/simplify_try.rs:21:19: 21:33
StorageDead(_4); // scope 0 at $DIR/simplify_try.rs:21:32: 21:33
_5 = discriminant(_3); // scope 0 at $DIR/simplify_try.rs:22:9: 22:15
goto -> bb1; // scope 0 at $DIR/simplify_try.rs:22:9: 22:15
}
bb1: {
_0 = move _3; // scope 1 at $DIR/simplify_try.rs:9:5: 9:10
StorageDead(_3); // scope 0 at $DIR/simplify_try.rs:8:15: 8:16
StorageDead(_2); // scope 0 at $DIR/simplify_try.rs:10:1: 10:2
return; // scope 0 at $DIR/simplify_try.rs:10:2: 10:2
_0 = move _3; // scope 1 at $DIR/simplify_try.rs:25:5: 25:10
StorageDead(_3); // scope 0 at $DIR/simplify_try.rs:24:6: 24:7
StorageDead(_2); // scope 0 at $DIR/simplify_try.rs:26:1: 26:2
return; // scope 0 at $DIR/simplify_try.rs:26:2: 26:2
}
}

View file

@ -1,33 +1,29 @@
// MIR for `try_identity` after SimplifyLocals
fn try_identity(_1: Result<u32, i32>) -> Result<u32, i32> {
debug x => _1; // in scope 0 at $DIR/simplify_try.rs:7:17: 7:18
let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:7:41: 7:57
debug x => _1; // in scope 0 at $DIR/simplify_try.rs:20:17: 20:18
let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:20:41: 20:57
scope 1 {
debug y => ((_0 as Ok).0: u32); // in scope 1 at $DIR/simplify_try.rs:8:9: 8:10
debug y => ((_0 as Ok).0: u32); // in scope 1 at $DIR/simplify_try.rs:21:9: 21:10
}
scope 2 {
debug err => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify_try.rs:8:14: 8:15
scope 3 {
scope 7 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify_try.rs:8:14: 8:15
debug t => ((_0 as Err).0: i32); // in scope 7 at $DIR/simplify_try.rs:8:14: 8:15
}
scope 8 (inlined <Result<u32, i32> as Try>::from_error) { // at $DIR/simplify_try.rs:8:13: 8:15
debug v => ((_0 as Err).0: i32); // in scope 8 at $DIR/simplify_try.rs:8:13: 8:15
}
debug e => ((_0 as Err).0: i32); // in scope 2 at $DIR/simplify_try.rs:22:13: 22:14
scope 5 (inlined <i32 as From<i32>>::from) { // at $DIR/simplify_try.rs:22:37: 22:50
debug t => ((_0 as Err).0: i32); // in scope 5 at $DIR/simplify_try.rs:22:37: 22:50
}
scope 6 (inlined from_error::<u32, i32>) { // at $DIR/simplify_try.rs:22:26: 22:51
debug e => ((_0 as Err).0: i32); // in scope 6 at $DIR/simplify_try.rs:22:26: 22:51
}
}
scope 4 {
debug val => ((_0 as Ok).0: u32); // in scope 4 at $DIR/simplify_try.rs:8:13: 8:15
scope 5 {
}
scope 3 {
debug v => ((_0 as Ok).0: u32); // in scope 3 at $DIR/simplify_try.rs:23:12: 23:13
}
scope 6 (inlined <Result<u32, i32> as Try>::into_result) { // at $DIR/simplify_try.rs:8:13: 8:15
debug self => _0; // in scope 6 at $DIR/simplify_try.rs:8:13: 8:15
scope 4 (inlined into_result::<u32, i32>) { // at $DIR/simplify_try.rs:21:19: 21:33
debug r => _0; // in scope 4 at $DIR/simplify_try.rs:21:19: 21:33
}
bb0: {
_0 = _1; // scope 0 at $DIR/simplify_try.rs:8:13: 8:14
return; // scope 0 at $DIR/simplify_try.rs:10:2: 10:2
_0 = _1; // scope 0 at $DIR/simplify_try.rs:21:31: 21:32
return; // scope 0 at $DIR/simplify_try.rs:26:2: 26:2
}
}