From ee0832ceab256e5d1ed74d0767fa3bd420bc5bd6 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Fri, 23 Nov 2012 23:44:49 -0800 Subject: [PATCH] Warn by default for constant my sub redefinition I apparently never had this working and never tested it either. I was checking whether the new sub was a constant, rather than the one it was clobbering. --- op.c | 2 +- t/lib/warnings/op | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/op.c b/op.c index 0e287e1..871982c 100644 --- a/op.c +++ b/op.c @@ -7056,7 +7056,7 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) else { /* redundant check that avoids creating the extra SV most of the time: */ - if (const_sv || ckWARN(WARN_REDEFINE)) { + if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) { const line_t oldline = CopLINE(PL_curcop); SV *noamp = sv_2mortal(newSVpvn_utf8( PadnamePV(name)+1,PadnameLEN(name)-1, diff --git a/t/lib/warnings/op b/t/lib/warnings/op index 52b35b6..35cfb17 100644 --- a/t/lib/warnings/op +++ b/t/lib/warnings/op @@ -778,6 +778,25 @@ EXPECT Constant subroutine main::fred redefined at - line 3. ######## # op.c +use feature "lexical_subs", "state"; +my sub fred () { 1 } +sub fred { 2 }; +my sub george { 1 } +sub george () { 2 } # should *not* produce redef warnings by default +state sub phred () { 1 } +sub phred { 2 }; +state sub jorge { 1 } +sub jorge () { 2 } # should *not* produce redef warnings by default +EXPECT +The lexical_subs feature is experimental at - line 2. +Prototype mismatch: sub fred () vs none at - line 4. +Constant subroutine fred redefined at - line 4. +Prototype mismatch: sub george: none vs () at - line 6. +Prototype mismatch: sub phred () vs none at - line 8. +Constant subroutine phred redefined at - line 8. +Prototype mismatch: sub jorge: none vs () at - line 10. +######## +# op.c no warnings 'redefine' ; sub fred () { 1 } sub fred () { 2 } -- 1.8.3.1