Avoid side effects in argument to SCM_I_INUM.
authorMark H Weaver <mhw@netris.org>
Wed, 12 Mar 2014 00:12:32 +0000 (20:12 -0400)
committerMark H Weaver <mhw@netris.org>
Wed, 12 Mar 2014 01:37:58 +0000 (21:37 -0400)
* libguile/vm-i-system.c (halt): Avoid side effects in argument to
  SCM_I_INUM.

libguile/vm-i-system.c

index e54a99b..5057fb0 100644 (file)
@@ -32,8 +32,11 @@ VM_DEFINE_INSTRUCTION (0, nop, "nop", 0, 0, 0)
 VM_DEFINE_INSTRUCTION (1, halt, "halt", 0, 0, 0)
 {
   SCM ret;
+  SCM nvalues_scm;
 
-  nvalues = SCM_I_INUM (*sp--);
+  nvalues_scm = *sp--;  /* SCM_I_INUM may evaluate its argument
+                           more than once. */
+  nvalues = SCM_I_INUM (nvalues_scm);
   NULLSTACK (1);
 
   if (nvalues == 1)