diff options
author | Father Chrysostomos <sprout@cpan.org> | 2011-06-01 14:11:37 -0700 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2011-06-01 14:38:52 -0700 |
commit | 1c70fb82f95ad11a9d4a425652926cdbd9db23f4 (patch) | |
tree | b07ea83ed961d9b7bf2fd34d0c97e3f4765820f4 | |
parent | fba8e77b3f4dc252953255811ead49d6391b30f3 (diff) | |
download | perl-1c70fb82f95ad11a9d4a425652926cdbd9db23f4.tar.gz |
Warn when list-assigning to TEMP
-rw-r--r-- | ext/XS-APItest/t/lvalue.t | 6 | ||||
-rw-r--r-- | pp_hot.c | 8 |
2 files changed, 13 insertions, 1 deletions
diff --git a/ext/XS-APItest/t/lvalue.t b/ext/XS-APItest/t/lvalue.t index 718507a402..d348ea6bbc 100644 --- a/ext/XS-APItest/t/lvalue.t +++ b/ext/XS-APItest/t/lvalue.t @@ -3,7 +3,7 @@ use warnings; use strict; -use Test::More tests => 3; +use Test::More tests => 4; use XS::APItest 'lv_temp_object'; @@ -16,6 +16,10 @@ use XS::APItest 'lv_temp_object'; lv_temp_object() = 75; like $w, qr/Useless assignment to a temporary at/, 'warning when assigning to temp returned from XS lv sub'; + undef $w; + (lv_temp_object()) = 75; + like $w, qr/Useless assignment to a temporary at/, + 'warning when list-assigning to temp returned from XS lv sub'; $w = undef; { @@ -1112,6 +1112,14 @@ PP(pp_aassign) break; } if (relem <= lastrelem) { + if ( + SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 && + (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC) + ) + Perl_warner(aTHX_ + packWARN(WARN_MISC), + "Useless assignment to a temporary" + ); sv_setsv(sv, *relem); *(relem++) = sv; } |