diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/mir-opt/inline/inline_generator.main.Inline.diff | 8 | ||||
| -rw-r--r-- | src/test/mir-opt/inline/issue-78442.rs | 20 | ||||
| -rw-r--r-- | src/test/mir-opt/inline/issue_78442.bar.Inline.diff | 67 | ||||
| -rw-r--r-- | src/test/mir-opt/inline/issue_78442.bar.RevealAll.diff | 55 |
4 files changed, 146 insertions, 4 deletions
diff --git a/src/test/mir-opt/inline/inline_generator.main.Inline.diff b/src/test/mir-opt/inline/inline_generator.main.Inline.diff index 9035b46f4c6..29243c9aa75 100644 --- a/src/test/mir-opt/inline/inline_generator.main.Inline.diff +++ b/src/test/mir-opt/inline/inline_generator.main.Inline.diff @@ -3,10 +3,10 @@ fn main() -> () { let mut _0: (); // return place in scope 0 at $DIR/inline-generator.rs:8:11: 8:11 - let _1: std::ops::GeneratorState<<impl std::ops::Generator<bool> as std::ops::Generator<bool>>::Yield, <impl std::ops::Generator<bool> as std::ops::Generator<bool>>::Return>; // in scope 0 at $DIR/inline-generator.rs:9:9: 9:11 - let mut _2: std::pin::Pin<&mut impl std::ops::Generator<bool>>; // in scope 0 at $DIR/inline-generator.rs:9:14: 9:32 - let mut _3: &mut impl std::ops::Generator<bool>; // in scope 0 at $DIR/inline-generator.rs:9:23: 9:31 - let mut _4: impl std::ops::Generator<bool>; // in scope 0 at $DIR/inline-generator.rs:9:28: 9:31 + let _1: std::ops::GeneratorState<i32, bool>; // in scope 0 at $DIR/inline-generator.rs:9:9: 9:11 + let mut _2: std::pin::Pin<&mut [generator@$DIR/inline-generator.rs:15:5: 15:41]>; // in scope 0 at $DIR/inline-generator.rs:9:14: 9:32 + let mut _3: &mut [generator@$DIR/inline-generator.rs:15:5: 15:41]; // in scope 0 at $DIR/inline-generator.rs:9:23: 9:31 + let mut _4: [generator@$DIR/inline-generator.rs:15:5: 15:41]; // in scope 0 at $DIR/inline-generator.rs:9:28: 9:31 + let mut _7: bool; // in scope 0 at $DIR/inline-generator.rs:9:14: 9:46 scope 1 { debug _r => _1; // in scope 1 at $DIR/inline-generator.rs:9:9: 9:11 diff --git a/src/test/mir-opt/inline/issue-78442.rs b/src/test/mir-opt/inline/issue-78442.rs new file mode 100644 index 00000000000..97613adaa45 --- /dev/null +++ b/src/test/mir-opt/inline/issue-78442.rs @@ -0,0 +1,20 @@ +// compile-flags: -Z mir-opt-level=3 -Z inline-mir + +#![crate_type = "lib"] + +// EMIT_MIR issue_78442.bar.RevealAll.diff +// EMIT_MIR issue_78442.bar.Inline.diff +pub fn bar<P>( + // Error won't happen if "bar" is not generic + _baz: P, +) { + hide_foo()(); +} + +fn hide_foo() -> impl Fn() { + // Error won't happen if "iterate" hasn't impl Trait or has generics + foo +} + +fn foo() { // Error won't happen if "foo" isn't used in "iterate" or has generics +} diff --git a/src/test/mir-opt/inline/issue_78442.bar.Inline.diff b/src/test/mir-opt/inline/issue_78442.bar.Inline.diff new file mode 100644 index 00000000000..4d9e022d825 --- /dev/null +++ b/src/test/mir-opt/inline/issue_78442.bar.Inline.diff @@ -0,0 +1,67 @@ +- // MIR for `bar` before Inline ++ // MIR for `bar` after Inline + + fn bar(_1: P) -> () { + debug _baz => _1; // in scope 0 at $DIR/issue-78442.rs:9:5: 9:9 + let mut _0: (); // return place in scope 0 at $DIR/issue-78442.rs:10:3: 10:3 + let _2: (); // in scope 0 at $DIR/issue-78442.rs:11:5: 11:17 + let mut _3: &fn() {foo}; // in scope 0 at $DIR/issue-78442.rs:11:5: 11:15 + let _4: fn() {foo}; // in scope 0 at $DIR/issue-78442.rs:11:5: 11:15 + let mut _5: (); // in scope 0 at $DIR/issue-78442.rs:11:5: 11:17 ++ scope 1 (inlined <fn() {foo} as Fn<()>>::call - shim(fn() {foo})) { // at $DIR/issue-78442.rs:11:5: 11:17 ++ } + + bb0: { + StorageLive(_2); // scope 0 at $DIR/issue-78442.rs:11:5: 11:17 + StorageLive(_3); // scope 0 at $DIR/issue-78442.rs:11:5: 11:15 + StorageLive(_4); // scope 0 at $DIR/issue-78442.rs:11:5: 11:15 +- _4 = hide_foo() -> [return: bb1, unwind: bb4]; // scope 0 at $DIR/issue-78442.rs:11:5: 11:15 ++ _4 = hide_foo() -> [return: bb1, unwind: bb3]; // scope 0 at $DIR/issue-78442.rs:11:5: 11:15 + // mir::Constant + // + span: $DIR/issue-78442.rs:11:5: 11:13 + // + literal: Const { ty: fn() -> impl std::ops::Fn<()> {hide_foo}, val: Value(Scalar(<ZST>)) } + } + + bb1: { + _3 = &_4; // scope 0 at $DIR/issue-78442.rs:11:5: 11:15 + StorageLive(_5); // scope 0 at $DIR/issue-78442.rs:11:5: 11:17 +- _2 = <impl Fn<()> as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue-78442.rs:11:5: 11:17 +- // mir::Constant +- // + span: $DIR/issue-78442.rs:11:5: 11:15 +- // + literal: Const { ty: for<'r> extern "rust-call" fn(&'r impl std::ops::Fn<()>, ()) -> <impl std::ops::Fn<()> as std::ops::FnOnce<()>>::Output {<impl std::ops::Fn<()> as std::ops::Fn<()>>::call}, val: Value(Scalar(<ZST>)) } ++ _2 = move (*_3)() -> [return: bb5, unwind: bb3]; // scope 1 at $DIR/issue-78442.rs:11:5: 11:17 + } + + bb2: { +- StorageDead(_5); // scope 0 at $DIR/issue-78442.rs:11:16: 11:17 +- StorageDead(_3); // scope 0 at $DIR/issue-78442.rs:11:16: 11:17 +- StorageDead(_4); // scope 0 at $DIR/issue-78442.rs:11:17: 11:18 +- StorageDead(_2); // scope 0 at $DIR/issue-78442.rs:11:17: 11:18 +- _0 = const (); // scope 0 at $DIR/issue-78442.rs:10:3: 12:2 +- drop(_1) -> [return: bb3, unwind: bb5]; // scope 0 at $DIR/issue-78442.rs:12:1: 12:2 ++ return; // scope 0 at $DIR/issue-78442.rs:12:2: 12:2 + } + +- bb3: { +- return; // scope 0 at $DIR/issue-78442.rs:12:2: 12:2 ++ bb3 (cleanup): { ++ drop(_1) -> bb4; // scope 0 at $DIR/issue-78442.rs:12:1: 12:2 + } + + bb4 (cleanup): { +- drop(_1) -> bb5; // scope 0 at $DIR/issue-78442.rs:12:1: 12:2 ++ resume; // scope 0 at $DIR/issue-78442.rs:7:1: 12:2 + } + +- bb5 (cleanup): { +- resume; // scope 0 at $DIR/issue-78442.rs:7:1: 12:2 ++ bb5: { ++ StorageDead(_5); // scope 0 at $DIR/issue-78442.rs:11:16: 11:17 ++ StorageDead(_3); // scope 0 at $DIR/issue-78442.rs:11:16: 11:17 ++ StorageDead(_4); // scope 0 at $DIR/issue-78442.rs:11:17: 11:18 ++ StorageDead(_2); // scope 0 at $DIR/issue-78442.rs:11:17: 11:18 ++ _0 = const (); // scope 0 at $DIR/issue-78442.rs:10:3: 12:2 ++ drop(_1) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue-78442.rs:12:1: 12:2 + } + } + diff --git a/src/test/mir-opt/inline/issue_78442.bar.RevealAll.diff b/src/test/mir-opt/inline/issue_78442.bar.RevealAll.diff new file mode 100644 index 00000000000..45b552cc634 --- /dev/null +++ b/src/test/mir-opt/inline/issue_78442.bar.RevealAll.diff @@ -0,0 +1,55 @@ +- // MIR for `bar` before RevealAll ++ // MIR for `bar` after RevealAll + + fn bar(_1: P) -> () { + debug _baz => _1; // in scope 0 at $DIR/issue-78442.rs:9:5: 9:9 + let mut _0: (); // return place in scope 0 at $DIR/issue-78442.rs:10:3: 10:3 + let _2: (); // in scope 0 at $DIR/issue-78442.rs:11:5: 11:17 +- let mut _3: &impl std::ops::Fn<()>; // in scope 0 at $DIR/issue-78442.rs:11:5: 11:15 +- let _4: impl std::ops::Fn<()>; // in scope 0 at $DIR/issue-78442.rs:11:5: 11:15 ++ let mut _3: &fn() {foo}; // in scope 0 at $DIR/issue-78442.rs:11:5: 11:15 ++ let _4: fn() {foo}; // in scope 0 at $DIR/issue-78442.rs:11:5: 11:15 + let mut _5: (); // in scope 0 at $DIR/issue-78442.rs:11:5: 11:17 + + bb0: { + StorageLive(_2); // scope 0 at $DIR/issue-78442.rs:11:5: 11:17 + StorageLive(_3); // scope 0 at $DIR/issue-78442.rs:11:5: 11:15 + StorageLive(_4); // scope 0 at $DIR/issue-78442.rs:11:5: 11:15 + _4 = hide_foo() -> [return: bb1, unwind: bb4]; // scope 0 at $DIR/issue-78442.rs:11:5: 11:15 + // mir::Constant + // + span: $DIR/issue-78442.rs:11:5: 11:13 + // + literal: Const { ty: fn() -> impl std::ops::Fn<()> {hide_foo}, val: Value(Scalar(<ZST>)) } + } + + bb1: { + _3 = &_4; // scope 0 at $DIR/issue-78442.rs:11:5: 11:15 + StorageLive(_5); // scope 0 at $DIR/issue-78442.rs:11:5: 11:17 + nop; // scope 0 at $DIR/issue-78442.rs:11:5: 11:17 + _2 = <impl Fn<()> as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue-78442.rs:11:5: 11:17 + // mir::Constant + // + span: $DIR/issue-78442.rs:11:5: 11:15 + // + literal: Const { ty: for<'r> extern "rust-call" fn(&'r impl std::ops::Fn<()>, ()) -> <impl std::ops::Fn<()> as std::ops::FnOnce<()>>::Output {<impl std::ops::Fn<()> as std::ops::Fn<()>>::call}, val: Value(Scalar(<ZST>)) } + } + + bb2: { + StorageDead(_5); // scope 0 at $DIR/issue-78442.rs:11:16: 11:17 + StorageDead(_3); // scope 0 at $DIR/issue-78442.rs:11:16: 11:17 + StorageDead(_4); // scope 0 at $DIR/issue-78442.rs:11:17: 11:18 + StorageDead(_2); // scope 0 at $DIR/issue-78442.rs:11:17: 11:18 + _0 = const (); // scope 0 at $DIR/issue-78442.rs:10:3: 12:2 + drop(_1) -> [return: bb3, unwind: bb5]; // scope 0 at $DIR/issue-78442.rs:12:1: 12:2 + } + + bb3: { + return; // scope 0 at $DIR/issue-78442.rs:12:2: 12:2 + } + + bb4 (cleanup): { + drop(_1) -> bb5; // scope 0 at $DIR/issue-78442.rs:12:1: 12:2 + } + + bb5 (cleanup): { + resume; // scope 0 at $DIR/issue-78442.rs:7:1: 12:2 + } + } + |
