Skip to content

Instantly share code, notes, and snippets.

@eholk
Created April 21, 2022 20:09
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 eholk/b116d5050f0275d619c024ee2c102e41 to your computer and use it in GitHub Desktop.
Save eholk/b116d5050f0275d619c024ee2c102e41 to your computer and use it in GitHub Desktop.
// MIR for `foo::{closure#0}` before StateTransform
fn foo::{closure#0}(_1: [static generator@src/test/ui/generator/addassign-yield.rs:19:14: 27:6], _2: ()) -> ()
yields ()
{
let mut _0: (); // return place in scope 0 at src/test/ui/generator/addassign-yield.rs:19:24: 19:24
let _3: &mut i32; // in scope 0 at src/test/ui/generator/addassign-yield.rs:20:13: 20:14
let mut _4: i32; // in scope 0 at src/test/ui/generator/addassign-yield.rs:20:22: 20:23
let mut _5: i32; // in scope 0 at src/test/ui/generator/addassign-yield.rs:24:14: 26:10
let mut _6: std::string::String; // in scope 0 at src/test/ui/generator/addassign-yield.rs:24:20: 24:33
let mut _7: &mut i32; // in scope 0 at src/test/ui/generator/addassign-yield.rs:21:10: 24:10
let _8: (); // in scope 0 at src/test/ui/generator/addassign-yield.rs:22:13: 22:18
let mut _9: (); // in scope 0 at src/test/ui/generator/addassign-yield.rs:22:13: 22:18
let mut _10: (i32, bool); // in scope 0 at src/test/ui/generator/addassign-yield.rs:21:9: 26:10
scope 1 {
debug x => _3; // in scope 1 at src/test/ui/generator/addassign-yield.rs:20:13: 20:14
}
bb0: {
StorageLive(_3); // scope 0 at src/test/ui/generator/addassign-yield.rs:20:13: 20:14
StorageLive(_4); // scope 0 at src/test/ui/generator/addassign-yield.rs:20:22: 20:23
_4 = const 0_i32; // scope 0 at src/test/ui/generator/addassign-yield.rs:20:22: 20:23
_3 = &mut _4; // scope 0 at src/test/ui/generator/addassign-yield.rs:20:17: 20:23
StorageLive(_5); // scope 1 at src/test/ui/generator/addassign-yield.rs:24:14: 26:10
StorageLive(_6); // scope 1 at src/test/ui/generator/addassign-yield.rs:24:20: 24:33
_6 = String::new() -> bb1; // scope 1 at src/test/ui/generator/addassign-yield.rs:24:20: 24:33
// mir::Constant
// + span: src/test/ui/generator/addassign-yield.rs:24:20: 24:31
// + literal: Const { ty: fn() -> String {String::new}, val: Value(Scalar(<ZST>)) }
}
bb1: {
_5 = const 0_i32; // scope 1 at src/test/ui/generator/addassign-yield.rs:25:18: 25:19
StorageLive(_7); // scope 1 at src/test/ui/generator/addassign-yield.rs:21:10: 24:10
StorageLive(_8); // scope 1 at src/test/ui/generator/addassign-yield.rs:22:13: 22:18
StorageLive(_9); // scope 1 at src/test/ui/generator/addassign-yield.rs:22:13: 22:18
Deinit(_9); // scope 1 at src/test/ui/generator/addassign-yield.rs:22:13: 22:18
_8 = yield(move _9) -> [resume: bb2, drop: bb5]; // scope 1 at src/test/ui/generator/addassign-yield.rs:22:13: 22:18
}
bb2: {
StorageDead(_9); // scope 1 at src/test/ui/generator/addassign-yield.rs:22:17: 22:18
StorageDead(_8); // scope 1 at src/test/ui/generator/addassign-yield.rs:22:18: 22:19
_7 = move _3; // scope 1 at src/test/ui/generator/addassign-yield.rs:23:13: 23:14
_10 = CheckedAdd((*_7), _5); // scope 1 at src/test/ui/generator/addassign-yield.rs:21:9: 26:10
assert(!move (_10.1: bool), "attempt to compute `{} + {}`, which would overflow", (*_7), move _5) -> [success: bb3, unwind: bb7]; // scope 1 at src/test/ui/generator/addassign-yield.rs:21:9: 26:10
}
bb3: {
(*_7) = move (_10.0: i32); // scope 1 at src/test/ui/generator/addassign-yield.rs:21:9: 26:10
StorageDead(_5); // scope 1 at src/test/ui/generator/addassign-yield.rs:26:9: 26:10
StorageDead(_7); // scope 1 at src/test/ui/generator/addassign-yield.rs:26:10: 26:11
drop(_6) -> [return: bb4, unwind: bb8]; // scope 1 at src/test/ui/generator/addassign-yield.rs:26:10: 26:11
}
bb4: {
StorageDead(_6); // scope 1 at src/test/ui/generator/addassign-yield.rs:26:10: 26:11
_0 = const (); // scope 0 at src/test/ui/generator/addassign-yield.rs:19:24: 27:6
StorageDead(_4); // scope 0 at src/test/ui/generator/addassign-yield.rs:27:5: 27:6
StorageDead(_3); // scope 0 at src/test/ui/generator/addassign-yield.rs:27:5: 27:6
return; // scope 0 at src/test/ui/generator/addassign-yield.rs:27:6: 27:6
}
bb5: {
StorageDead(_9); // scope 1 at src/test/ui/generator/addassign-yield.rs:22:17: 22:18
StorageDead(_8); // scope 1 at src/test/ui/generator/addassign-yield.rs:22:18: 22:19
StorageDead(_5); // scope 1 at src/test/ui/generator/addassign-yield.rs:26:9: 26:10
StorageDead(_7); // scope 1 at src/test/ui/generator/addassign-yield.rs:26:10: 26:11
drop(_6) -> [return: bb6, unwind: bb8]; // scope 1 at src/test/ui/generator/addassign-yield.rs:26:10: 26:11
}
bb6: {
StorageDead(_6); // scope 1 at src/test/ui/generator/addassign-yield.rs:26:10: 26:11
StorageDead(_4); // scope 0 at src/test/ui/generator/addassign-yield.rs:27:5: 27:6
StorageDead(_3); // scope 0 at src/test/ui/generator/addassign-yield.rs:27:5: 27:6
generator_drop; // scope 0 at src/test/ui/generator/addassign-yield.rs:19:14: 27:6
}
bb7 (cleanup): {
StorageDead(_5); // scope 1 at src/test/ui/generator/addassign-yield.rs:26:9: 26:10
StorageDead(_7); // scope 1 at src/test/ui/generator/addassign-yield.rs:26:10: 26:11
drop(_6) -> bb8; // scope 1 at src/test/ui/generator/addassign-yield.rs:26:10: 26:11
}
bb8 (cleanup): {
resume; // scope 0 at src/test/ui/generator/addassign-yield.rs:19:14: 27:6
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment