Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nemo157/ecd934261d28e59c013a1499c37ce00d to your computer and use it in GitHub Desktop.
Save Nemo157/ecd934261d28e59c013a1499c37ce00d to your computer and use it in GitHub Desktop.
// MIR for `main::{{closure}}`
// source = MirSource { def_id: DefId(0/1:9 ~ generators[317d]::main[0]::{{closure}}[0]), promoted: None }
// pass_name = generator_resume
// disambiguator = 0
// generator_layout = GeneratorLayout { fields: [LocalDecl { mutability: Not, is_user_variable: Some(Set(Var(VarBindingForm { binding_mode: BindByValue(MutImmutable), opt_ty_info: None, opt_match_place: Some((None, src/test/debuginfo/generators.rs:37:17: 37:18)), pat_span: src/test/debuginfo/generators.rs:37:13: 37:14 }))), internal: false, is_block_tail: None, ty: i32, user_ty: UserTypeProjections { contents: [] }, name: Some(d), source_info: SourceInfo { span: src/test/debuginfo/generators.rs:37:13: 37:14, scope: scope[2] }, visibility_scope: scope[1] }] }
fn main::{{closure}}(_1: std::pin::Pin<&mut [generator@src/test/debuginfo/generators.rs:36:17: 41:6 a:&mut i32 {i32, ()}]>) -> std::ops::GeneratorState<(), ()>{
let mut _0: std::ops::GeneratorState<(), ()>; // return place
scope 1 {
}
scope 2 {
}
let mut _2: ();
let mut _3: ();
let mut _4: ();
let mut _5: ();
let mut _6: i32;
let mut _7: ();
bb0: {
switchInt(((*(_1.0: &mut [generator@src/test/debuginfo/generators.rs:36:17: 41:6 a:&mut i32 {i32, ()}])).1: u32)) -> [0u32: bb1, 1u32: bb10, 2u32: bb11, 3u32: bb9, otherwise: bb12]; // bb0[0]: scope 0 at src/test/debuginfo/generators.rs:36:17: 41:6
}
bb1: {
nop; // bb1[0]: scope 0 at src/test/debuginfo/generators.rs:37:13: 37:14
((*(_1.0: &mut [generator@src/test/debuginfo/generators.rs:36:17: 41:6 a:&mut i32 {i32, ()}])).2: i32) = const 6i32; // bb1[1]: scope 0 at src/test/debuginfo/generators.rs:37:17: 37:18
// ty::Const
// + ty: i32
// + val: Scalar(Bits { size: 4, bits: 6 })
// mir::Constant
// + span: src/test/debuginfo/generators.rs:37:17: 37:18
// + ty: i32
// + literal: Const { ty: i32, val: Scalar(Bits { size: 4, bits: 6 }) }
StorageLive(_4); // bb1[2]: scope 1 at src/test/debuginfo/generators.rs:38:9: 38:14
_4 = (); // bb1[3]: scope 1 at src/test/debuginfo/generators.rs:38:9: 38:14
_0 = std::ops::GeneratorState<(), ()>::Yielded(move _4,); // bb1[4]: scope 1 at src/test/debuginfo/generators.rs:38:9: 38:14
((*(_1.0: &mut [generator@src/test/debuginfo/generators.rs:36:17: 41:6 a:&mut i32 {i32, ()}])).1: u32) = const 3u32; // bb1[5]: scope 1 at src/test/debuginfo/generators.rs:38:9: 38:14
// ty::Const
// + ty: u32
// + val: Scalar(Bits { size: 4, bits: 3 })
// mir::Constant
// + span: src/test/debuginfo/generators.rs:38:9: 38:14
// + ty: u32
// + literal: Const { ty: u32, val: Scalar(Bits { size: 4, bits: 3 }) }
return; // bb1[6]: scope 1 at src/test/debuginfo/generators.rs:38:9: 38:14
}
bb2: { // cleanup
((*(_1.0: &mut [generator@src/test/debuginfo/generators.rs:36:17: 41:6 a:&mut i32 {i32, ()}])).1: u32) = const 1u32; // bb2[0]: scope 0 at src/test/debuginfo/generators.rs:36:17: 41:6
// ty::Const
// + ty: u32
// + val: Scalar(Bits { size: 4, bits: 1 })
// mir::Constant
// + span: src/test/debuginfo/generators.rs:36:17: 41:6
// + ty: u32
// + literal: Const { ty: u32, val: Scalar(Bits { size: 4, bits: 1 }) }
resume; // bb2[1]: scope 0 at src/test/debuginfo/generators.rs:36:17: 41:6
}
bb3: {
_3 = (); // bb3[0]: scope 1 at src/test/debuginfo/generators.rs:38:9: 38:14
StorageDead(_4); // bb3[1]: scope 1 at src/test/debuginfo/generators.rs:38:13: 38:14
_5 = const _zzz() -> [return: bb4, unwind: bb5]; // bb3[2]: scope 1 at src/test/debuginfo/generators.rs:39:9: 39:15
// ty::Const
// + ty: fn() {_zzz}
// + val: Scalar(Bits { size: 0, bits: 0 })
// mir::Constant
// + span: src/test/debuginfo/generators.rs:39:9: 39:13
// + ty: fn() {_zzz}
// + literal: Const { ty: fn() {_zzz}, val: Scalar(Bits { size: 0, bits: 0 }) }
}
bb4: {
StorageLive(_6); // bb4[0]: scope 1 at src/test/debuginfo/generators.rs:40:13: 40:14
_6 = ((*(_1.0: &mut [generator@src/test/debuginfo/generators.rs:36:17: 41:6 a:&mut i32 {i32, ()}])).2: i32); // bb4[1]: scope 1 at src/test/debuginfo/generators.rs:40:13: 40:14
(*((*(_1.0: &mut [generator@src/test/debuginfo/generators.rs:36:17: 41:6 a:&mut i32 {i32, ()}])).0: &mut i32)) = move _6; // bb4[2]: scope 1 at src/test/debuginfo/generators.rs:40:9: 40:14
StorageDead(_6); // bb4[3]: scope 1 at src/test/debuginfo/generators.rs:40:13: 40:14
_7 = (); // bb4[4]: scope 0 at src/test/debuginfo/generators.rs:36:20: 41:6
nop; // bb4[5]: scope 0 at src/test/debuginfo/generators.rs:41:5: 41:6
goto -> bb7; // bb4[6]: scope 0 at src/test/debuginfo/generators.rs:41:5: 41:6
}
bb5: { // cleanup
goto -> bb8; // bb5[0]: scope 0 at src/test/debuginfo/generators.rs:41:5: 41:6
}
bb6: {
_0 = std::ops::GeneratorState<(), ()>::Complete(move _7,); // bb6[0]: scope 0 at src/test/debuginfo/generators.rs:41:6: 41:6
((*(_1.0: &mut [generator@src/test/debuginfo/generators.rs:36:17: 41:6 a:&mut i32 {i32, ()}])).1: u32) = const 1u32; // bb6[1]: scope 0 at src/test/debuginfo/generators.rs:41:6: 41:6
// ty::Const
// + ty: u32
// + val: Scalar(Bits { size: 4, bits: 1 })
// mir::Constant
// + span: src/test/debuginfo/generators.rs:41:6: 41:6
// + ty: u32
// + literal: Const { ty: u32, val: Scalar(Bits { size: 4, bits: 1 }) }
return; // bb6[2]: scope 0 at src/test/debuginfo/generators.rs:41:6: 41:6
}
bb7: {
goto -> bb6; // bb7[0]: scope 0 at src/test/debuginfo/generators.rs:41:5: 41:6
}
bb8: { // cleanup
goto -> bb2; // bb8[0]: scope 0 at src/test/debuginfo/generators.rs:41:5: 41:6
}
bb9: {
StorageLive(_4); // bb9[0]: scope 0 at src/test/debuginfo/generators.rs:36:17: 41:6
goto -> bb3; // bb9[1]: scope 0 at src/test/debuginfo/generators.rs:36:17: 41:6
}
bb10: {
assert(const false, "generator resumed after completion") -> bb10; // bb10[0]: scope 0 at src/test/debuginfo/generators.rs:36:17: 41:6
// ty::Const
// + ty: bool
// + val: Scalar(Bits { size: 1, bits: 0 })
// mir::Constant
// + span: src/test/debuginfo/generators.rs:36:17: 41:6
// + ty: bool
// + literal: Const { ty: bool, val: Scalar(Bits { size: 1, bits: 0 }) }
}
bb11: {
assert(const false, "generator resumed after panicking") -> bb11; // bb11[0]: scope 0 at src/test/debuginfo/generators.rs:36:17: 41:6
// ty::Const
// + ty: bool
// + val: Scalar(Bits { size: 1, bits: 0 })
// mir::Constant
// + span: src/test/debuginfo/generators.rs:36:17: 41:6
// + ty: bool
// + literal: Const { ty: bool, val: Scalar(Bits { size: 1, bits: 0 }) }
}
bb12: {
unreachable; // bb12[0]: scope 0 at src/test/debuginfo/generators.rs:36:17: 41:6
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment