Some leaf procedures and continuations do not have GC trap prefixes,
so don't require the block in question to have one.
On i386, this makes the trap handler successfully figure out where it
is in (FIX:QUOTIENT 1 0). FIX:QUOTIENT is a leaf procedure, unlike
FLO:/, although perhaps FIX:QUOTIENT ought to do checks and defer to
the microcode primitive like FLO:/.
if ((read_cc_entry_type ((&cet), entry))
|| ((cet.marker) != CET_EXPRESSION))
{
- entry += CC_ENTRY_GC_TRAP_SIZE;
- if ((read_cc_entry_type ((&cet), entry))
- || (! (((cet.marker) == CET_PROCEDURE)
- || ((cet.marker) == CET_CONTINUATION))))
- return (0);
+ insn_t * real_entry = (entry + CC_ENTRY_GC_TRAP_SIZE);
+ if ((! (read_cc_entry_type ((&cet), real_entry)))
+ && (((cet.marker) == CET_PROCEDURE)
+ || ((cet.marker) == CET_CONTINUATION)))
+ entry = real_entry;
}
}
{