From: Mark Date: Thu, 28 Sep 2023 21:25:57 +0000 (-0600) Subject: do not deref AttrVar binding in redo_attr_var_binding (#2059) X-Git-Tag: remove~71 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=11cd42379bd4959e29e5eb47f405f21b5fc75039;p=scryer-prolog.git do not deref AttrVar binding in redo_attr_var_binding (#2059) --- diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index 897dab67..daa119fc 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -5659,7 +5659,9 @@ impl Machine { } #[inline(always)] pub(crate) fn redo_attr_var_binding(&mut self) { - let var = self.deref_register(1); + // registers[1] MUST NOT be dereferenced here. the original + // AttrVar binding site must be preserved. + let var = self.machine_st.registers[1]; let value = self.deref_register(2); debug_assert_eq!(HeapCellValueTag::AttrVar, var.get_tag());