On Mon, Feb 27, 2006 at 07:02:53PM +0100, Rafael Garcia-Suarez wrote:
> On 2/27/06, John E. Malmberg <[EMAIL PROTECTED]> wrote:
> > It looks like Perl is now detecting the error a little better.
> >
> > The results of blead 27323 on OpenVMS Alpha 8.2 are:
> >
> > EAGLE> mcr []ndbgperl -e '*a=$a=*b; $a=42'
> > Assertion ((sstr)->sv_flags & 0xff) == SVt_PVGV || ((sstr)->sv_flags &
> > 0xff) == SVt_PVLV failed: file "PERL_BUILD_ROOT:[000000]sv.c;1", line
> > 3214 at -e line 1.
> > %SYSTEM-F-ABORT, abort
> 
> It does so because you use a perl compiled with -DDEBUGGING, I think
> it still segfaults without that. But now we know were the segfault
> happens :)

And the immediate why:

(gdb) call Perl_sv_dump(my_perl, sstr)
SV = UNKNOWN(0xff) (0x82781dc) at 0x8278f5c
  REFCNT = 0
  FLAGS = ()

That's the source SV. And a type of 0xFF isn't in any of the excluded types
in the switch statement earlier:

    case SVt_PVAV:
    case SVt_PVHV:
    case SVt_PVCV:
    case SVt_PVIO:
        {
        const char * const type = sv_reftype(sstr,0);
        if (PL_op)
            Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
        else
            Perl_croak(aTHX_ "Bizarre copy of %s", type);
        }
        break;

so it's deemed to be acceptable to copy.

I'm going to test what happens if I replace those 4 cases by default.
Not that this will solve the bug, but it should produce a better error.

Nicholas Clark


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to