[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]

[PATCH] Silence some C++ warnings with PERL_POISON



sv.c throws a few C++ cast warnings when building with PERL_POISON. I'm 
not sure that patch is really useful since the testsuite currently fails 
when poisoning is enabled, but here it is anyway.
Vincent.
--- sv.c	2008-06-28 23:11:23.000000000 +0200
+++ sv.c	2008-07-03 11:28:34.000000000 +0200
@@ -181,6 +181,7 @@
 
 #ifdef PERL_POISON
 #  define SvARENA_CHAIN(sv)	((sv)->sv_u.svu_rv)
+#  define SvARENA_CHAIN_set(sv,p)	(SvARENA_CHAIN(sv) = (SV *) (p))
 /* Whilst I'd love to do this, it seems that things like to check on
    unreferenced scalars
 #  define POSION_SV_HEAD(sv)	PoisonNew(sv, 1, struct STRUCT_SV)
@@ -189,6 +190,7 @@
 				PoisonNew(&SvREFCNT(sv), 1, U32)
 #else
 #  define SvARENA_CHAIN(sv)	SvANY(sv)
+#  define SvARENA_CHAIN_set(sv,p)	(SvARENA_CHAIN(sv) = (void *) (p))
 #  define POSION_SV_HEAD(sv)
 #endif
 
@@ -196,7 +198,7 @@
     STMT_START {					\
 	FREE_SV_DEBUG_FILE(p);				\
 	POSION_SV_HEAD(p);				\
-	SvARENA_CHAIN(p) = (void *)PL_sv_root;		\
+	SvARENA_CHAIN_set(p, PL_sv_root);		\
 	SvFLAGS(p) = SVTYPEMASK;			\
 	PL_sv_root = (p);				\
 	--PL_sv_count;					\
@@ -357,7 +359,7 @@
     svend = &sva[SvREFCNT(sva) - 1];
     sv = sva + 1;
     while (sv < svend) {
-	SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
+	SvARENA_CHAIN_set(sv, sv + 1);
 #ifdef DEBUGGING
 	SvREFCNT(sv) = 0;
 #endif
@@ -366,7 +368,7 @@
 	SvFLAGS(sv) = SVTYPEMASK;
 	sv++;
     }
-    SvARENA_CHAIN(sv) = 0;
+    SvARENA_CHAIN_set(sv, 0);
 #ifdef DEBUGGING
     SvREFCNT(sv) = 0;
 #endif

[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]