This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix (*glob) = ()
authorDavid Mitchell <davem@iabyn.com>
Sun, 25 Dec 2016 12:14:10 +0000 (12:14 +0000)
committerDavid Mitchell <davem@iabyn.com>
Sun, 25 Dec 2016 18:02:53 +0000 (18:02 +0000)
RT #130385

The new sv_set_undef() function added by me with v5.25.7-12-ge03e82a
didn't handle undeffing a glob correctly, and gave an assertion failure.

Fix it to behave more exactly like (sv_setsv(sv, &PL_sv_undef),
which it is documented as being identical to.

sv.c
t/lib/warnings/sv

diff --git a/sv.c b/sv.c
index 0382e96..e3026f7 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -4834,8 +4834,8 @@ Perl_sv_set_undef(pTHX_ SV *sv)
     if (isGV_with_GP(sv))
         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
                        "Undefined value assigned to typeglob");
-
-    SvOK_off(sv);
+    else
+        SvOK_off(sv);
 }
 
 
index ee0fdc2..64f624c 100644 (file)
@@ -341,10 +341,13 @@ Invalid conversion in sprintf: "%+2L\003" at - line 19.
 # sv.c
 use warnings 'misc' ;
 *a = undef ;
+(*c) = ();
 no warnings 'misc' ;
 *b = undef ;
+(*d) = ();
 EXPECT
 Undefined value assigned to typeglob at - line 3.
+Undefined value assigned to typeglob at - line 4.
 ########
 # sv.c
 use warnings 'numeric' ;