warnings.h does some evil(*) pointer arithmetic on (SV *)0, so a
authorNicholas Clark <nick@ccl4.org>
Sat, 4 Feb 2006 11:10:52 +0000 (11:10 +0000)
committerNicholas Clark <nick@ccl4.org>
Sat, 4 Feb 2006 11:10:52 +0000 (11:10 +0000)
simple replace of Nullsv with NULL turns out to be a bad idea.
* Technically undefined behaviour, I believe.

p4raw-id: //depot/perl@27078

warnings.h
warnings.pl

index 1157cb2..7ef3c04 100644 (file)
@@ -18,8 +18,8 @@
 #define G_WARN_ALL_MASK                (G_WARN_ALL_ON|G_WARN_ALL_OFF)
 
 #define pWARN_STD              NULL
-#define pWARN_ALL              (NULL+1)        /* use warnings 'all' */
-#define pWARN_NONE             (NULL+2)        /* no  warnings 'all' */
+#define pWARN_ALL              (((SV*)0)+1)    /* use warnings 'all' */
+#define pWARN_NONE             (((SV*)0)+2)    /* no  warnings 'all' */
 
 #define specialWARN(x)         ((x) == pWARN_STD || (x) == pWARN_ALL ||        \
                                 (x) == pWARN_NONE)
index e8971d8..1265972 100644 (file)
@@ -277,8 +277,8 @@ print WARN <<'EOM' ;
 #define G_WARN_ALL_MASK                (G_WARN_ALL_ON|G_WARN_ALL_OFF)
 
 #define pWARN_STD              NULL
-#define pWARN_ALL              (NULL+1)        /* use warnings 'all' */
-#define pWARN_NONE             (NULL+2)        /* no  warnings 'all' */
+#define pWARN_ALL              (((SV*)0)+1)    /* use warnings 'all' */
+#define pWARN_NONE             (((SV*)0)+2)    /* no  warnings 'all' */
 
 #define specialWARN(x)         ((x) == pWARN_STD || (x) == pWARN_ALL ||        \
                                 (x) == pWARN_NONE)