ckDEAD: PL_curcop->cop_warnings only if PL_curcop
authorDavid Mitchell <davem@iabyn.com>
Mon, 23 Jan 2017 13:27:07 +0000 (13:27 +0000)
committerDavid Mitchell <davem@iabyn.com>
Mon, 23 Jan 2017 13:52:36 +0000 (13:52 +0000)
RT #130621

In ckDEAD(), don't check the value of PL_curcop->cop_warnings unless
PL_curcop is non-null.

In the ticket above, the reason that PL_curcop is null is the less
than optimal way that evals free their optree: ideally the optree should
be attached to the eval CV and freed when the CV is; instead a separate
SAVEFREEOP() is done. But that fix is for another time; regardless,
ckDEAD() should have a PL_curcop != NULL guard anyway like isLEXWARN_on()
etc already do.

regen/warnings.pl
warnings.h

index 83bf8bc..5721c17 100644 (file)
@@ -462,7 +462,8 @@ is by default enabled even if not within the scope of S<C<use warnings>>.
 #define unpackWARN4(x)         (((x) >>24) & 0xFF)
 
 #define ckDEAD(x)                                                      \
-          ( ! specialWARN(PL_curcop->cop_warnings) &&                  \
+          (PL_curcop &&                                                \
+            !specialWARN(PL_curcop->cop_warnings) &&                   \
            ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) ||          \
              isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) ||    \
              isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) ||    \
index 6d67520..0166837 100644 (file)
@@ -221,7 +221,8 @@ is by default enabled even if not within the scope of S<C<use warnings>>.
 #define unpackWARN4(x)         (((x) >>24) & 0xFF)
 
 #define ckDEAD(x)                                                      \
-          ( ! specialWARN(PL_curcop->cop_warnings) &&                  \
+          (PL_curcop &&                                                \
+            !specialWARN(PL_curcop->cop_warnings) &&                   \
            ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) ||          \
              isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) ||    \
              isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) ||    \