summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--op.c2
-rw-r--r--pad.h8
-rw-r--r--pp_hot.c3
3 files changed, 4 insertions, 9 deletions
diff --git a/op.c b/op.c
index 3e44be81f6..c2f5406348 100644
--- a/op.c
+++ b/op.c
@@ -13907,7 +13907,7 @@ Perl_rpeep(pTHX_ OP *o)
if ( intro
&& (8*sizeof(base) >
8*sizeof(UV)-OPpPADRANGE_COUNTSHIFT-SAVE_TIGHT_SHIFT
- ? base
+ ? (Size_t)base
: (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT))
) >
(UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT))
diff --git a/pad.h b/pad.h
index 7ed10333f2..56d88abc8d 100644
--- a/pad.h
+++ b/pad.h
@@ -18,13 +18,7 @@
/* offsets within a pad */
-#if PTRSIZE == 4
-typedef U32TYPE PADOFFSET;
-#else
-# if PTRSIZE == 8
-typedef U64TYPE PADOFFSET;
-# endif
-#endif
+typedef SSize_t PADOFFSET; /* signed so that -1 is a valid value */
#define NOT_IN_PAD ((PADOFFSET) -1)
/* B.xs expects the first members of these two structs to line up
diff --git a/pp_hot.c b/pp_hot.c
index 9da9ab089a..35cc4dac76 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -382,7 +382,8 @@ PP(pp_padrange)
| (count << SAVE_TIGHT_SHIFT)
| SAVEt_CLEARPADRANGE);
STATIC_ASSERT_STMT(OPpPADRANGE_COUNTMASK + 1 == (1 << OPpPADRANGE_COUNTSHIFT));
- assert((payload >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)) == base);
+ assert((payload >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT))
+ == (Size_t)base);
{
dSS_ADD;
SS_ADD_UV(payload);