From a28c8934f3b7a29cdaab5d32e351dcb05db6bbff Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 2 Feb 2019 12:45:50 -0700 Subject: [PATCH] record perm vars only while resident stack frame is still up --- src/prolog/machine/mod.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/prolog/machine/mod.rs b/src/prolog/machine/mod.rs index a13cd773..c4ada3f1 100644 --- a/src/prolog/machine/mod.rs +++ b/src/prolog/machine/mod.rs @@ -592,13 +592,14 @@ impl MachineState { { for (var, var_data) in alloc_locs { match var_data { - &VarData::Perm(p) if p > 0 => { - let e = self.e; - let r = var_data.as_reg_type().reg_num(); - let addr = self.and_stack[e][r].clone(); + &VarData::Perm(p) if p > 0 => + if !heap_locs.contains_key(var) { + let e = self.e; + let r = var_data.as_reg_type().reg_num(); // crashes here. + let addr = self.and_stack[e][r].clone(); - heap_locs.insert(var.clone(), addr); - }, + heap_locs.insert(var.clone(), addr); + }, &VarData::Temp(cn, _, _) if cn == chunk_num => { let r = var_data.as_reg_type(); -- 2.54.0