Test update: Fallout from ReadForMatch statements + changes to codegen under NLL.
This commit is contained in:
parent
3bc5073dbb
commit
5eebd36c93
1 changed files with 141 additions and 128 deletions
|
@ -54,60 +54,65 @@ fn main() {
|
|||
// ...
|
||||
// _2 = std::option::Option<i32>::Some(const 42i32,);
|
||||
// _3 = discriminant(_2);
|
||||
// _7 = discriminant(_2);
|
||||
// switchInt(move _7) -> [0isize: bb6, 1isize: bb4, otherwise: bb8];
|
||||
// _14 = promoted[1];
|
||||
// _4 = &(*_14);
|
||||
// _9 = discriminant(_2);
|
||||
// switchInt(move _9) -> [0isize: bb5, 1isize: bb3, otherwise: bb7];
|
||||
// }
|
||||
// bb1: {
|
||||
// resume;
|
||||
// }
|
||||
// bb2: { // arm1
|
||||
// StorageLive(_9);
|
||||
// _9 = _4;
|
||||
// _1 = (const 1i32, move _9);
|
||||
// StorageDead(_9);
|
||||
// goto -> bb13;
|
||||
// }
|
||||
// bb3: { // binding3(empty) and arm3
|
||||
// _1 = (const 3i32, const 3i32);
|
||||
// goto -> bb13;
|
||||
// }
|
||||
// bb3: { // binding3(empty) and arm3
|
||||
// ReadForMatch(_4);
|
||||
// falseEdges -> [real: bb8, imaginary: bb4]; //pre_binding1
|
||||
// }
|
||||
// bb4: {
|
||||
// falseEdges -> [real: bb9, imaginary: bb5]; //pre_binding1
|
||||
// ReadForMatch(_4);
|
||||
// falseEdges -> [real: bb12, imaginary: bb5]; //pre_binding2
|
||||
// }
|
||||
// bb5: {
|
||||
// falseEdges -> [real: bb12, imaginary: bb6]; //pre_binding2
|
||||
// ReadForMatch(_4);
|
||||
// falseEdges -> [real: bb2, imaginary: bb6]; //pre_binding3
|
||||
// }
|
||||
// bb6: {
|
||||
// falseEdges -> [real: bb3, imaginary: bb7]; //pre_binding3
|
||||
// unreachable;
|
||||
// }
|
||||
// bb7: {
|
||||
// unreachable;
|
||||
// }
|
||||
// bb8: {
|
||||
// unreachable;
|
||||
// }
|
||||
// bb9: { // binding1 and guard
|
||||
// StorageLive(_5);
|
||||
// _11 = promoted[0];
|
||||
// _5 = &(((*_11) as Some).0: i32);
|
||||
// StorageLive(_8);
|
||||
// _8 = const guard() -> [return: bb10, unwind: bb1];
|
||||
// }
|
||||
// bb10: { // end of guard
|
||||
// StorageLive(_4);
|
||||
// _4 = ((_2 as Some).0: i32);
|
||||
// switchInt(move _8) -> [false: bb11, otherwise: bb2];
|
||||
// }
|
||||
// bb11: { // to pre_binding2
|
||||
// falseEdges -> [real: bb5, imaginary: bb5];
|
||||
// }
|
||||
// bb12: { // bindingNoLandingPads.before.mir2 and arm2
|
||||
// StorageLive(_6);
|
||||
// _6 = ((_2 as Some).0: i32);
|
||||
// bb8: { // binding1 and guard
|
||||
// StorageLive(_7);
|
||||
// _13 = promoted[0];
|
||||
// _7 = &(((*_13) as Some).0: i32);
|
||||
// StorageLive(_10);
|
||||
// _10 = _6;
|
||||
// _1 = (const 2i32, move _10);
|
||||
// StorageDead(_10);
|
||||
// _10 = const guard() -> [return: bb9, unwind: bb1];
|
||||
// }
|
||||
// bb9: {
|
||||
// switchInt(move _10) -> [false: bb10, otherwise: bb11];
|
||||
// }
|
||||
// bb10: { // to pre_binding2
|
||||
// falseEdges -> [real: bb4, imaginary: bb4];
|
||||
// }
|
||||
// bb11: { // bindingNoLandingPads.before.mir2 and arm2
|
||||
// StorageLive(_5);
|
||||
// _5 = ((_2 as Some).0: i32);
|
||||
// StorageLive(_11);
|
||||
// _11 = _5;
|
||||
// _1 = (const 1i32, move _11);
|
||||
// StorageDead(_11);
|
||||
// goto -> bb13;
|
||||
// }
|
||||
// bb12: {
|
||||
// StorageLive(_8);
|
||||
// _8 = ((_2 as Some).0: i32);
|
||||
// StorageLive(_12);
|
||||
// _12 = _8;
|
||||
// _1 = (const 2i32, move_12);
|
||||
// StorageDead(_12);
|
||||
// goto -> bb13;
|
||||
// }
|
||||
// bb13: {
|
||||
|
@ -121,59 +126,63 @@ fn main() {
|
|||
// ...
|
||||
// _2 = std::option::Option<i32>::Some(const 42i32,);
|
||||
// _3 = discriminant(_2);
|
||||
// _7 = discriminant(_2);
|
||||
// switchInt(move _7) -> [0isize: bb5, 1isize: bb4, otherwise: bb8];
|
||||
// _4 = &_2;
|
||||
// _9 = discriminant(_2);
|
||||
// switchInt(move _9) -> [0isize: bb4, 1isize: bb3, otherwise: bb7];
|
||||
// }
|
||||
// bb1: {
|
||||
// resume;
|
||||
// }
|
||||
// bb2: { // arm1
|
||||
// StorageLive(_9);
|
||||
// _9 = _4;
|
||||
// _1 = (const 1i32, move _9);
|
||||
// StorageDead(_9);
|
||||
// goto -> bb13;
|
||||
// }
|
||||
// bb3: { // binding3(empty) and arm3
|
||||
// bb2: { // arm2
|
||||
// _1 = (const 3i32, const 3i32);
|
||||
// goto -> bb13;
|
||||
// }
|
||||
// bb3: {
|
||||
// ReadForMatch(_4);
|
||||
// falseEdges -> [real: bb8, imaginary: bb4]; //pre_binding1
|
||||
// }
|
||||
// bb4: {
|
||||
// falseEdges -> [real: bb9, imaginary: bb5]; //pre_binding1
|
||||
// ReadForMatch(_4);
|
||||
// falseEdges -> [real: bb2, imaginary: bb5]; //pre_binding2
|
||||
// }
|
||||
// bb5: {
|
||||
// falseEdges -> [real: bb3, imaginary: bb6]; //pre_binding2
|
||||
// ReadForMatch(_4);
|
||||
// falseEdges -> [real: bb12, imaginary: bb6]; //pre_binding3
|
||||
// }
|
||||
// bb6: {
|
||||
// falseEdges -> [real: bb12, imaginary: bb7]; //pre_binding3
|
||||
// unreachable;
|
||||
// }
|
||||
// bb7: {
|
||||
// unreachable;
|
||||
// }
|
||||
// bb8: {
|
||||
// unreachable;
|
||||
// }
|
||||
// bb9: { // binding1 and guard
|
||||
// StorageLive(_5);
|
||||
// _5 = &((_2 as Some).0: i32);
|
||||
// StorageLive(_8);
|
||||
// _8 = const guard() -> [return: bb10, unwind: bb1];
|
||||
// }
|
||||
// bb10: { // end of guard
|
||||
// StorageLive(_4);
|
||||
// _4 = ((_2 as Some).0: i32);
|
||||
// switchInt(move _8) -> [false: bb11, otherwise: bb2];
|
||||
// }
|
||||
// bb11: { // to pre_binding2
|
||||
// falseEdges -> [real: bb6, imaginary: bb5];
|
||||
// }
|
||||
// bb12: { // binding2 and arm2
|
||||
// StorageLive(_6);
|
||||
// _6 = ((_2 as Some).0: i32);
|
||||
// bb8: { // binding1 and guard
|
||||
// StorageLive(_7);
|
||||
// _7 = &((_2 as Some).0: i32);
|
||||
// StorageLive(_10);
|
||||
// _10 = _6;
|
||||
// _1 = (const 2i32, move _10);
|
||||
// StorageDead(_10);
|
||||
// _10 = const guard() -> [return: bb9, unwind: bb1];
|
||||
// }
|
||||
// bb9: { // end of guard
|
||||
// switchInt(move _10) -> [false: bb10, otherwise: bb11];
|
||||
// }
|
||||
// bb10: { // to pre_binding3 (can skip 2 since this is `Some`)
|
||||
// falseEdges -> [real: bb5, imaginary: bb4];
|
||||
// }
|
||||
// bb11: { // arm1
|
||||
// StorageLive(_5);
|
||||
// _5 = ((_2 as Some).0: i32);
|
||||
// StorageLive(_11);
|
||||
// _11 = _5;
|
||||
// _1 = (const 1i32, move _11);
|
||||
// StorageDead(_11);
|
||||
// goto -> bb13;
|
||||
// }
|
||||
// bb12: { // binding3 and arm3
|
||||
// StorageLive(_8);
|
||||
// _8 = ((_2 as Some).0: i32);
|
||||
// StorageLive(_12);
|
||||
// _12 = _8;
|
||||
// _1 = (const 2i32, move _12);
|
||||
// StorageDead(_12);
|
||||
// goto -> bb13;
|
||||
// }
|
||||
// bb13: {
|
||||
|
@ -187,76 +196,80 @@ fn main() {
|
|||
// ...
|
||||
// _2 = std::option::Option<i32>::Some(const 1i32,);
|
||||
// _3 = discriminant(_2);
|
||||
// _10 = discriminant(_2);
|
||||
// switchInt(move _10) -> [1isize: bb4, otherwise: bb5];
|
||||
// _4 = &_2;
|
||||
// _13 = discriminant(_2);
|
||||
// switchInt(move _13) -> [1isize: bb2, otherwise: bb3];
|
||||
// }
|
||||
// bb1: {
|
||||
// resume;
|
||||
// }
|
||||
// bb2: { // arm1
|
||||
// bb2: {
|
||||
// ReadForMatch(_4);
|
||||
// falseEdges -> [real: bb7, imaginary: bb3]; //pre_binding1
|
||||
// }
|
||||
// bb3: {
|
||||
// ReadForMatch(_4);
|
||||
// falseEdges -> [real: bb11, imaginary: bb4]; //pre_binding2
|
||||
// }
|
||||
// bb4: {
|
||||
// ReadForMatch(_4);
|
||||
// falseEdges -> [real: bb12, imaginary: bb5]; //pre_binding3
|
||||
// }
|
||||
// bb5: {
|
||||
// ReadForMatch(_4);
|
||||
// falseEdges -> [real: bb16, imaginary: bb6]; //pre_binding4
|
||||
// }
|
||||
// bb6: {
|
||||
// unreachable;
|
||||
// }
|
||||
// bb7: { // binding1: Some(w) if guard()
|
||||
// StorageLive(_7);
|
||||
// _7 = &((_2 as Some).0: i32);
|
||||
// StorageLive(_14);
|
||||
// _14 = const guard() -> [return: bb8, unwind: bb1];
|
||||
// }
|
||||
// bb8: { //end of guard
|
||||
// switchInt(move _14) -> [false: bb9, otherwise: bb10];
|
||||
// }
|
||||
// bb9: { // to pre_binding2
|
||||
// falseEdges -> [real: bb3, imaginary: bb3];
|
||||
// }
|
||||
// bb10: { // set up bindings for arm1
|
||||
// StorageLive(_5);
|
||||
// _5 = ((_2 as Some).0: i32);
|
||||
// _1 = const 1i32;
|
||||
// goto -> bb17;
|
||||
// }
|
||||
// bb3: { // arm3
|
||||
// _1 = const 3i32;
|
||||
// goto -> bb17;
|
||||
// }
|
||||
//
|
||||
// bb4: {
|
||||
// falseEdges -> [real: bb9, imaginary: bb5]; //pre_binding1
|
||||
// }
|
||||
// bb5: {
|
||||
// falseEdges -> [real: bb12, imaginary: bb6]; //pre_binding2
|
||||
// }
|
||||
// bb6: {
|
||||
// falseEdges -> [real: bb13, imaginary: bb7]; //pre_binding3
|
||||
// }
|
||||
// bb7: {
|
||||
// falseEdges -> [real: bb16, imaginary: bb8]; //pre_binding4
|
||||
// }
|
||||
// bb8: {
|
||||
// unreachable;
|
||||
// }
|
||||
// bb9: { // binding1: Some(w) if guard()
|
||||
// StorageLive(_5);
|
||||
// _5 = &((_2 as Some).0: i32);
|
||||
// StorageLive(_11);
|
||||
// _11 = const guard() -> [return: bb10, unwind: bb1];
|
||||
// }
|
||||
// bb10: { //end of guard
|
||||
// StorageLive(_4);
|
||||
// _4 = ((_2 as Some).0: i32);
|
||||
// switchInt(move _11) -> [false: bb11, otherwise: bb2];
|
||||
// }
|
||||
// bb11: { // to pre_binding2
|
||||
// falseEdges -> [real: bb5, imaginary: bb5];
|
||||
// }
|
||||
// bb12: { // binding2 & arm2
|
||||
// StorageLive(_6);
|
||||
// _6 = _2;
|
||||
// bb11: { // binding2 & arm2
|
||||
// StorageLive(_8);
|
||||
// _8 = _2;
|
||||
// _1 = const 2i32;
|
||||
// goto -> bb17;
|
||||
// }
|
||||
// bb13: { // binding3: Some(y) if guard2(y)
|
||||
// StorageLive(_8);
|
||||
// _8 = &((_2 as Some).0: i32);
|
||||
// StorageLive(_13);
|
||||
// StorageLive(_14);
|
||||
// _14 = (*_8);
|
||||
// _13 = const guard2(move _14) -> [return: bb14, unwind: bb1];
|
||||
// bb12: { // binding3: Some(y) if guard2(y)
|
||||
// StorageLive(_11);
|
||||
// _11 = &((_2 as Some).0: i32);
|
||||
// StorageLive(_16);
|
||||
// StorageLive(_17);
|
||||
// _17 = (*_11);
|
||||
// _16 = const guard2(move _17) -> [return: bb13, unwind: bb1];
|
||||
// }
|
||||
// bb14: { // end of guard2
|
||||
// StorageDead(_14);
|
||||
// StorageLive(_7);
|
||||
// _7 = ((_2 as Some).0: i32);
|
||||
// switchInt(move _13) -> [false: bb15, otherwise: bb3];
|
||||
// bb13: { // end of guard2
|
||||
// StorageDead(_17);
|
||||
// switchInt(move _16) -> [false: bb14, otherwise: bb15];
|
||||
// }
|
||||
// bb15: { // to pre_binding4
|
||||
// falseEdges -> [real: bb7, imaginary: bb7];
|
||||
// bb14: { // to pre_binding4
|
||||
// falseEdges -> [real: bb5, imaginary: bb5];
|
||||
// }
|
||||
// bb15: { // set up bindings for arm3
|
||||
// StorageLive(_9);
|
||||
// _9 = ((_2 as Some).0: i32);
|
||||
// _1 = const 3i32;
|
||||
// goto -> bb17;
|
||||
// }
|
||||
// bb16: { // binding4 & arm4
|
||||
// StorageLive(_9);
|
||||
// _9 = _2;
|
||||
// StorageLive(_12);
|
||||
// _12 = _2;
|
||||
// _1 = const 4i32;
|
||||
// goto -> bb17;
|
||||
// }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue