[perl #117743] don't warn on $@ = undef; die;
authorTony Cook <tony@develop-help.com>
Thu, 25 Apr 2013 23:56:58 +0000 (09:56 +1000)
committerTony Cook <tony@develop-help.com>
Fri, 26 Apr 2013 04:54:22 +0000 (14:54 +1000)
and fix the test that's meant to detect this bug.

pp_sys.c
t/op/die.t

index 8bf9fa7..04ccddb 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -493,6 +493,7 @@ PP(pp_die)
     }
     else {
        SV * const errsv = ERRSV;
+       SvGETMAGIC(errsv);
        if (SvROK(errsv)) {
            exsv = errsv;
            if (sv_isobject(exsv)) {
@@ -513,7 +514,7 @@ PP(pp_die)
                }
            }
        }
-       else if (SvPV_const(errsv, len), len) {
+       else if (SvPOK(errsv) && SvCUR(errsv)) {
            exsv = sv_mortalcopy(errsv);
            sv_catpvs(exsv, "\t...propagated");
        }
index b0ab8bb..8faef6a 100644 (file)
@@ -88,6 +88,7 @@ like($@, 'propagated', '... and appends a phrase');
 # [perl #36470] got uninit warning if $@ was undef
 
 {
+    use warnings "uninitialized";
     my $ok = 1;
     local $SIG{__DIE__};
     local $SIG{__WARN__} = sub { $ok = 0 };