summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRick Delaney <rick@consumercontact.com>2007-10-30 13:19:40 -0700
committerSteve Peters <steve@fisharerojo.org>2008-02-13 18:39:50 +0000
commit781e3f050073176aa21ffc243184a1cb57f4ec92 (patch)
tree17bc74c72eb39bef0f518ff182db7c0e0f0549f0
parentcae86ea86570588a52f7ce8a0a01b6eb824103df (diff)
downloadperl-781e3f050073176aa21ffc243184a1cb57f4ec92.tar.gz
[perl #47047] Use of inherited AUTOLOAD for non-method is deprecated
From: Rick Delaney (via RT) <perlbug-followup@perl.org> Message-ID: <rt-3.6.HEAD-24634-1193800780-55.47047-75-0@perl.org> p4raw-id: //depot/perl@33302
-rw-r--r--pp_hot.c10
-rw-r--r--t/lib/warnings/gv2
2 files changed, 10 insertions, 2 deletions
diff --git a/pp_hot.c b/pp_hot.c
index cd1a885f67..61324bfc80 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -2735,9 +2735,14 @@ PP(pp_entersub)
}
/* should call AUTOLOAD now? */
else {
-try_autoload:
+try_autoload:
+ {
+ const bool is_method = cLISTOP->op_last &&
+ (cLISTOP->op_last->op_type == OP_METHOD_NAMED ||
+ cLISTOP->op_last->op_type == OP_METHOD);
+
if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
- FALSE)))
+ is_method)))
{
cv = GvCV(autogv);
}
@@ -2747,6 +2752,7 @@ try_autoload:
gv_efullname3(sub_name, gv, NULL);
DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
}
+ }
}
if (!cv)
DIE(aTHX_ "Not a CODE reference");
diff --git a/t/lib/warnings/gv b/t/lib/warnings/gv
index 42565f2325..6086655383 100644
--- a/t/lib/warnings/gv
+++ b/t/lib/warnings/gv
@@ -39,6 +39,8 @@ sub Other::AUTOLOAD { 1 } sub Other::fred {}
@ISA = qw(Other) ;
use warnings 'deprecated' ;
fred() ;
+my $x = \&barney;
+(bless[])->barney;
EXPECT
Use of inherited AUTOLOAD for non-method main::fred() is deprecated at - line 5.
########