Subject: bug#13074: VM Segfaults with Bad `Call' Instruction

From: Noah Lavine <[email-masked]>
Date: Wed, 5 Dec 2012 09:54:20 -0500

That makes sense. I hit this error in debugging a CPS->GLIL compiler (which
I hope will become Guile's compiler, but that's another story). However,
once the debugging is done, I suppose it won't make a difference.

What do you think about enabling it only in the debug VM, or something like
that? Then if there's some way for me to run my code in debug mode, I can
get the better output without slowing down most things.

Noah

On Wed, Dec 5, 2012 at 9:10 AM, Ludovic Courtès <[email-masked]> wrote:

> Hi Noah,
>
> Noah Lavine <[email-masked]> skribis:
>
> > diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c
> > index 7153ab5..dff2ab2 100644
> > --- a/libguile/vm-i-system.c
> > +++ b/libguile/vm-i-system.c
> > @@ -793,7 +793,9 @@ VM_DEFINE_INSTRUCTION (55, call, "call", 1, -1, 1)
> >
> >    VM_HANDLE_INTERRUPTS;
> >
> > -  if (SCM_UNLIKELY (!SCM_PROGRAM_P (program)))
> > +  if (SCM_UNLIKELY (program == NULL))
> > +    goto vm_error_bad_instruction;
> > +  else if (SCM_UNLIKELY (!SCM_PROGRAM_P (program)))
> >      {
> >        if (SCM_STRUCTP (program) && SCM_STRUCT_APPLICABLE_P (program))
> >          {
>
> I’d rather not apply it, because it adds overhead for every call for a
> situation that cannot happen when using Guile’s compiler, IIUC.
>
> WDYT?
>
> Thanks,
> Ludo’.
>