On Tue, Feb 18, 2014 at 4:10 PM, Michael Gerdau <m...@qata.de> wrote:
> Hi list !

Hi Michael!

> I have some legacy modules originating in the dim past of perl 5.6.x
> which is to say there are likely quite a few quirks in the code.
>
> The new() constructor of both does bless them using a stmt
>     ST(0) = sv_2mortal(sv_bless(newRV_noinc((SV*)hv),stash));
> and stash is initialized by
>     if (sv_isobject(pkg))
>         stash = SvSTASH(SvRV(pkg));
>     else
>         stash = gv_stashsv(pkg, TRUE);
> with pkg being the first parameter passed to new().
>
> Both foo and bar also have a sub AUTOLOAD.
>
> Inside the sub AUTOLOAD of bar there is
>    $self->SUPER::fum(@_)
> and fum being a sub of foo.

Hey, that looks like some code I have written.. :)

> In 5.16.2 (and all prior versions I tried over the years) this works
> as expected by finally invoking foo->fum.
>
> In 5.18.1 (by means of stepping through it in the debugger) the line
>    $self->SUPER::fum(@_)
> inside bar->AUTOLOAD again invokes bar->AUTOLOAD where it hits once
> again the line
>    $self->SUPER::fum(@_)
> which again invokes ... and there is a recursive loop.

You are hitting this bug:

https://rt.perl.org/Public/Bug/Display.html?id=120694

It has been fixed in 5.18.2.

Cheers,
-Jan

Reply via email to