This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Remove ‘Runaway prototype’ warning
authorFather Chrysostomos <sprout@cpan.org>
Thu, 24 May 2012 04:51:45 +0000 (21:51 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Wed, 30 May 2012 06:55:21 +0000 (23:55 -0700)
commitacfcf464b177f89fb6b02411464fb0b6e87e2472
treea62dbd7b2fca603af70e353e5604def287019ee6
parent14d04a33467fd25c9767918f61a2bfaec64b0cfa
Remove ‘Runaway prototype’ warning

This has been here since commit 8472ac73d, which was merged into blead
in commit 55d729e4e15, if I understand the history correctly.

This warning is undocumented, and triggerable only by stash
manipulation.

It appears to be an internal check, similar to a ‘panic’ error, but
its wording doesn’t suggest anything of the sort.

A ‘sub foo;’ declaration doesn’t actually create the sub yet, but
simply puts -1 in the stash element.  ‘sub foo($);’ puts '$' in the
stash element.

If newATTRSUB sees something there it doesn’t recognise, it unhelp-
fully carps ‘Runaway prototype’, but it is pretty random:

This is OK:

$ perl -e 'BEGIN{$::{foo}=undef} sub foo;'

But this is not:

$ perl -e 'BEGIN{$::{foo}=-1; $::{foo}=undef} sub foo;'
Runaway prototype at -e line 1.

Also, it only happens when the sub has no body, not for ‘sub foo {}’:

$ perl -e 'BEGIN{$::{foo}=56} sub foo{}'
$ perl -e 'BEGIN{$::{foo}=56} sub foo;'
Runaway prototype at -e line 1.

This warning is random, incomprehensible, and not at all helpful, so
we should just remove it.
op.c
t/lib/warnings/op
t/porting/diag.t