Subject: bug#2403: 23.0.90; emacs bootstrap under AIX hangs at lisp/international/characters.el

From: Stefan Monnier <[email-masked]>
Date: Thu, 26 Feb 2009 15:47:41 -0500

> I digged a little bit deeper to this problem. temacs is in an endless
> loop in the following for loop in the alloca.c file:

> --- alloca.c:5101 ---
> #if (GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS \
>      || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS)
>   mark_stack ();
> #else
>   {
>     register struct gcpro *tail;
> =>  for (tail = gcprolist; tail; tail = tail->next)
>       for (i = 0; i < tail->nvars; i++)
>         mark_object (tail->var[i]);
>   }
> #endif
> ---------------------
> If I examine the values in gdb then I see that the second element of
> gcprolist points to itself in the next element. That's why emacs loops.

> Any idea how to fix that?

No idea.  This should never happen, obviously.  The gcprolist (and its
elements) should only ever be touched by the macros GCPRO<n> and
UNGCPRO, so the only thing that comes to mind is that someone does
GCPRO1 twice in the same block.
You may want to add some

   eassert(gcprolist != &gcpro<n>);

to the GCPRO macros which may catch the bug.  Alternatively, if you look
at the backtrace, the problematic uses of GCPRO<n> should be nearby.

Of course, maybe the problem really is one of the stack being clobbered.

        Stefan