This is a live mirror of the Perl 5 development currently hosted at
Avoid double stringification in pp_complement
authorFather Chrysostomos <>
Tue, 20 Aug 2013 07:17:15 +0000 (00:17 -0700)
committerFather Chrysostomos <>
Tue, 20 Aug 2013 19:50:00 +0000 (12:50 -0700)
Commit 91bba347 made targets exempt from uninit warnings.  The com-
mit message only says it has something to do with fixing warnings on
bitwise ops.

Commit a1afd1046 worked around that by doing an extra stringifica-
tion before assigning to the target, to produce an uninit warning
on purpose.

As far as I can tell, the only purpose of 91bba347 was to avoid the
warning for ~undef.  (I haven’t actually tried building the commit
before that to confirm.)

In any case, the uninit warning has been long tested for and is now
expected behaviour.

Since I am about to remove the uninit warning exemption for targets,
stop relying on that.

This speed ups the code slightly, as we avoid a double string-


diff --git a/pp.c b/pp.c
index b61192d..8e5ba2b 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -2315,9 +2315,8 @@ PP(pp_complement)
        I32 anum;
        STRLEN len;
-       (void)SvPV_nomg_const(sv,len); /* force check for uninit var */
-       sv_setsv_nomg(TARG, sv);
-       tmps = (U8*)SvPV_force_nomg(TARG, len);
+       sv_copypv_nomg(TARG, sv);
+       tmps = (U8*)SvPV_nomg(TARG, len);
        anum = len;
        if (SvUTF8(TARG)) {
          /* Calculate exact length, let's not estimate. */