This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix for [perl #9423] vec assignments generate 2 warnings
authorBrian Fraser <fraserbn@gmail.com>
Sat, 26 May 2012 20:35:26 +0000 (17:35 -0300)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 26 May 2012 21:46:22 +0000 (14:46 -0700)
Before this commit, this:

    vec(my $v,0,1) = 1;

would've produced four warnings about uninitialized values;
however, the ticket argued that these were spurious.

This commit removes the warning in the case of lvalue vec, since it is
similar to |=, but leaves it in place for rvalue vec.

doop.c
t/lib/warnings/9uninit

diff --git a/doop.c b/doop.c
index 1bd16b5..b2b6546 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -764,9 +764,15 @@ Perl_do_vecget(pTHX_ SV *sv, SSize_t offset, int size)
 {
     dVAR;
     STRLEN srclen, len, uoffset, bitoffs = 0;
-    const unsigned char *s = (const unsigned char *) SvPV_const(sv, srclen);
+    const unsigned char *s = (const unsigned char *) SvPV_flags_const(sv, srclen,
+                             SV_GMAGIC | ((PL_op->op_flags & OPf_MOD || LVRET)
+                                          ? SV_UNDEF_RETURNS_NULL : 0));
     UV retnum = 0;
 
+    if (!s) {
+      s = (const unsigned char *)"";
+    }
+    
     PERL_ARGS_ASSERT_DO_VECGET;
 
     if (offset < 0)
@@ -921,7 +927,8 @@ Perl_do_vecset(pTHX_ SV *sv)
 
     if (!targ)
        return;
-    s = (unsigned char*)SvPV_force(targ, targlen);
+    s = (unsigned char*)SvPV_force_flags(targ, targlen,
+                                         SV_GMAGIC | SV_UNDEF_RETURNS_NULL);
     if (SvUTF8(targ)) {
        /* This is handled by the SvPOK_only below...
        if (!Perl_sv_utf8_downgrade(aTHX_ targ, TRUE))
index 37e24e7..177a781 100644 (file)
@@ -1035,7 +1035,6 @@ Use of uninitialized value $g1 in vec at - line 11.
 Use of uninitialized value $m1 in vec at - line 11.
 Use of uninitialized value $m2 in vec at - line 12.
 Use of uninitialized value $g1 in vec at - line 12.
-Use of uninitialized value $m1 in vec at - line 12.
 Use of uninitialized value $m1 in index at - line 14.
 Use of uninitialized value $m2 in index at - line 14.
 Use of uninitialized value $g1 in index at - line 15.