From 29051a0674800881957479c423a1feb043391671 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sat, 22 Aug 2020 12:41:51 -0700 Subject: [PATCH] stage2: codegen: fix crash I forgot to do -Denable-qemu -Denable-wasmtime when testing yesterday, sorry about that. In reuseOperand, the code assumed a re-used register would be tracked in the register table but that is not always the case. --- src-self-hosted/codegen.zig | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src-self-hosted/codegen.zig b/src-self-hosted/codegen.zig index ca6d9d800bc85a4aa22ecbc2ebbdddd70bdafdcb..4ce2e041c05dc9f5d348397700b654605139267b 100644 --- a/src-self-hosted/codegen.zig +++ b/src-self-hosted/codegen.zig @@ -934,8 +934,9 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { // If it's in the registers table, need to associate the register with the // new instruction. const branch = &self.branch_stack.items[self.branch_stack.items.len - 1]; - const entry = branch.registers.getEntry(toCanonicalReg(reg)).?; - entry.value = .{ .inst = inst }; + if (branch.registers.getEntry(toCanonicalReg(reg))) |entry| { + entry.value = .{ .inst = inst }; + } log.debug("reusing {} => {*}", .{reg, inst}); }, .stack_offset => |off| { -- 2.54.0