From 7c094af34e01e7e5cd0af668107cfff49811f624 Mon Sep 17 00:00:00 2001 From: Jan Kassens Date: Mon, 7 Nov 2022 16:38:58 -0500 Subject: [PATCH] [HIR] fix missing read reference to switch test value Unless I'm mistaken, the switch operand is missing here. --- compiler/forget/src/HIR/InferReferenceEffects.ts | 1 + .../src/__tests__/fixtures/hir/reverse-postorder.expect.md | 2 +- compiler/forget/src/__tests__/fixtures/hir/ssa-switch.expect.md | 2 +- .../__tests__/fixtures/hir/switch-non-final-default.expect.md | 2 +- compiler/forget/src/__tests__/fixtures/hir/switch.expect.md | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/compiler/forget/src/HIR/InferReferenceEffects.ts b/compiler/forget/src/HIR/InferReferenceEffects.ts index 1101c310d1..6d41668995 100644 --- a/compiler/forget/src/HIR/InferReferenceEffects.ts +++ b/compiler/forget/src/HIR/InferReferenceEffects.ts @@ -641,6 +641,7 @@ function inferBlock(env: Environment, block: BasicBlock) { break; } case "switch": { + env.reference(block.terminal.test, Effect.Read); for (const case_ of block.terminal.cases) { if (case_.test !== null) { env.reference(case_.test, Effect.Read); diff --git a/compiler/forget/src/__tests__/fixtures/hir/reverse-postorder.expect.md b/compiler/forget/src/__tests__/fixtures/hir/reverse-postorder.expect.md index d39df1c928..d086ca9225 100644 --- a/compiler/forget/src/__tests__/fixtures/hir/reverse-postorder.expect.md +++ b/compiler/forget/src/__tests__/fixtures/hir/reverse-postorder.expect.md @@ -43,7 +43,7 @@ bb2: [2] Const mutate $8 = 2 [3] Const mutate $9 = 1 [4] Const mutate $10 = 0 - Switch ( props$6.test) + Switch (read props$6.test) Case read $10: bb8 Case read $9: bb6 Case read $8: bb4 diff --git a/compiler/forget/src/__tests__/fixtures/hir/ssa-switch.expect.md b/compiler/forget/src/__tests__/fixtures/hir/ssa-switch.expect.md index 1d67a73019..f82fe7ce36 100644 --- a/compiler/forget/src/__tests__/fixtures/hir/ssa-switch.expect.md +++ b/compiler/forget/src/__tests__/fixtures/hir/ssa-switch.expect.md @@ -33,7 +33,7 @@ bb0: [3] Const mutate $12 = Binary read x$10 === read $11 [4] Const mutate $13 = 1 [5] Const mutate $14 = Binary read x$10 === read $13 - Switch ( x$10) + Switch (read x$10) Case read $14: bb5 Case read $12: bb3 Default: bb2 diff --git a/compiler/forget/src/__tests__/fixtures/hir/switch-non-final-default.expect.md b/compiler/forget/src/__tests__/fixtures/hir/switch-non-final-default.expect.md index 77f4be0e2a..29d5eb777d 100644 --- a/compiler/forget/src/__tests__/fixtures/hir/switch-non-final-default.expect.md +++ b/compiler/forget/src/__tests__/fixtures/hir/switch-non-final-default.expect.md @@ -37,7 +37,7 @@ bb0: [3] Const mutate $12 = false [4] Const mutate $13 = true [5] Const mutate $14 = 1 - Switch ( props$9.p0) + Switch (read props$9.p0) Case read $14: bb1 Case read $13: bb6 Default: bb1 diff --git a/compiler/forget/src/__tests__/fixtures/hir/switch.expect.md b/compiler/forget/src/__tests__/fixtures/hir/switch.expect.md index 359543d96e..22521499b8 100644 --- a/compiler/forget/src/__tests__/fixtures/hir/switch.expect.md +++ b/compiler/forget/src/__tests__/fixtures/hir/switch.expect.md @@ -32,7 +32,7 @@ bb0: [2] Let mutate y$10 = undefined [3] Const mutate $11 = false [4] Const mutate $12 = true - Switch ( props$8.p0) + Switch (read props$8.p0) Case read $12: bb4 Case read $11: bb2 Default: bb1