Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PATCH perl5.005_61] compiler warnings with -Duse64bits #488

Closed
p5pRT opened this issue Sep 7, 1999 · 8 comments
Closed

[PATCH perl5.005_61] compiler warnings with -Duse64bits #488

p5pRT opened this issue Sep 7, 1999 · 8 comments

Comments

@p5pRT
Copy link

p5pRT commented Sep 7, 1999

Migrated from rt.perl.org#1330 (status was 'resolved')

Searchable as RT1330$

@p5pRT
Copy link
Author

p5pRT commented Sep 7, 1999

From rmb1@cise.npl.co.uk

When compiling perl5.005_61 with -Duse64bits on solaris2.7 and
gcc2.95.1 I get lots of warnings because UVSIZE > PTRSIZE (and
a few because UVSIZE > LONGSIZE).

These are fixed with the patch below, which gives no warnings
with or without -Duse64bits. The patch introduces PTRV which
is the integer type of the same size as a PTR, and PTR_CAST
which casts a PTR/UV/IV to PTRV before further casting as UV/IV
or PTR. If UVSIZE == PTRSIZE, then PTR_CAST is empty.

Robin

--- perl.h 1999/08/23 14​:40​:29 1.1
+++ perl.h 1999/09/07 10​:27​:45
@​@​ -1023,7 +1023,7 @​@​
# define UV_MAX PERL_UQUAD_MAX
# define UV_MIN PERL_UQUAD_MIN
# endif
-# define IVSIZF 8
+# define IVSIZE 8
# define UVSIZE 8
# define IV_IS_QUAD
# define UV_IS_QUAD
@​@​ -1052,7 +1052,19 @​@​
# define IVSIZE LONGSIZE
#endif
#define IV_DIG (BIT_DIGITS(IVSIZE * 8) + 1)
-#define UV_DIG (BIT_DIGITS(IVSIZE * 8) + 1)
+#define UV_DIG (BIT_DIGITS(UVSIZE * 8) + 1)
+
+#if (IVSIZE > PTRSIZE) || (UVSIZE > PTRSIZE)
+# if PTRSIZE == LONGSIZE
+# define PTRV unsigned long
+# else
+# define PTRV unsigned
+# endif
+# define PTR_CAST (PTRV)
+#else
+# define PTRV UV
+# define PTR_CAST
+#endif

#ifdef USE_LONG_DOUBLE
# if defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE)
--- sv.c 1999/09/01 16​:24​:24 1.1
+++ sv.c 1999/09/07 09​:40​:43
@​@​ -618,8 +618,8 @​@​
  pv = (char*)SvRV(sv);
  cur = 0;
  len = 0;
- iv = (IV)pv;
- nv = (NV)(unsigned long)pv;
+ iv = (IV)PTR_CAST pv;
+ nv = (NV)(PTRV)pv;
  del_XRV(SvANY(sv));
  magic = 0;
  stash = 0;
@​@​ -1083,7 +1083,7 @​@​
  SV* tmpstr;
  if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv, numer)))
  return SvIV(tmpstr);
- return (IV)SvRV(sv);
+ return (IV)PTR_CAST SvRV(sv);
  }
  if (SvREADONLY(sv) && !SvOK(sv)) {
  dTHR;
@​@​ -1119,7 +1119,7 @​@​
#ifdef IV_IS_QUAD
  DEBUG_c(PerlIO_printf(Perl_debug_log,
  "0x%" PERL_PRIx64 " 2iv(%" PERL_PRIu64 " => %" PERL_PRId64 ") (as unsigned)\n",
- (UV)sv,
+ (UV)PTR_CAST sv,
  (UV)SvUVX(sv), (IV)SvUVX(sv)));
#else
  DEBUG_c(PerlIO_printf(Perl_debug_log,
@​@​ -1228,7 +1228,7 @​@​
  SV* tmpstr;
  if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv, numer)))
  return SvUV(tmpstr);
- return (UV)SvRV(sv);
+ return (UV)PTR_CAST SvRV(sv);
  }
  if (SvREADONLY(sv) && !SvOK(sv)) {
  dTHR;
@​@​ -1399,7 +1399,7 @​@​
  SV* tmpstr;
  if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)))
  return SvNV(tmpstr);
- return (NV)(unsigned long)SvRV(sv);
+ return (NV)(PTRV)SvRV(sv);
  }
  if (SvREADONLY(sv) && !SvOK(sv)) {
  dTHR;
@​@​ -1783,7 +1783,7 @​@​
  else
  sv_setpv(tsv, s);
#ifdef IV_IS_QUAD
- Perl_sv_catpvf(aTHX_ tsv, "(0x%" PERL_PRIx64")", (UV)sv);
+ Perl_sv_catpvf(aTHX_ tsv, "(0x%" PERL_PRIx64")", (UV)PTR_CAST sv);
#else
  Perl_sv_catpvf(aTHX_ tsv, "(0x%lx)", (unsigned long)sv);
#endif
@​@​ -3694,7 +3694,7 @​@​
  IV i;
  if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
  return;
- i = (IV)SvRV(sv);
+ i = (IV)PTR_CAST SvRV(sv);
  sv_unref(sv);
  sv_setiv(sv, i);
  }
@​@​ -3794,7 +3794,7 @​@​
  IV i;
  if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
  return;
- i = (IV)SvRV(sv);
+ i = (IV)PTR_CAST SvRV(sv);
  sv_unref(sv);
  sv_setiv(sv, i);
  }
@​@​ -4398,7 +4398,7 @​@​
  SvSETMAGIC(rv);
  }
  else
- sv_setiv(newSVrv(rv,classname), (IV)pv);
+ sv_setiv(newSVrv(rv,classname), (IV)PTR_CAST pv);
  return rv;
}

@​@​ -4901,9 +4901,9 @​@​

  case 'p'​:
  if (args)
- uv = (UV)va_arg(*args, void*);
+ uv = (UV)PTR_CAST va_arg(*args, void*);
  else
- uv = (svix < svmax) ? (UV)svargs[svix++] : 0;
+ uv = (svix < svmax) ? (UV)PTR_CAST svargs[svix++] : 0;
  base = 16;
  goto integer;

--- ext/B/B.xs 1999/09/06 13​:58​:24 1.1
+++ ext/B/B.xs 1999/09/07 09​:23​:55
@​@​ -202,7 +202,7 @​@​
  }
  if (!type) {
  type = svclassnames[SvTYPE(sv)];
- iv = (IV)sv;
+ iv = (IV)PTR_CAST sv;
  }
  sv_setiv(newSVrv(arg, type), iv);
  return arg;
@​@​ -211,7 +211,7 @​@​
static SV *
make_mg_object(pTHX_ SV *arg, MAGIC *mg)
{
- sv_setiv(newSVrv(arg, "B​::MAGIC"), (IV)mg);
+ sv_setiv(newSVrv(arg, "B​::MAGIC"), (IV)PTR_CAST mg);
  return arg;
}

@​@​ -317,7 +317,7 @​@​
  if (!SvROK(opsv))
  croak("opsv is not a reference");
  opsv = sv_mortalcopy(opsv);
- o = (OP*)SvIV((SV*)SvRV(opsv));
+ o = (OP*)PTR_CAST SvIV((SV*)SvRV(opsv));
  if (walkoptree_debug) {
  PUSHMARK(sp);
  XPUSHs(opsv);
@​@​ -332,7 +332,7 @​@​
  OP *kid;
  for (kid = ((UNOP*)o)->op_first; kid; kid = kid->op_sibling) {
  /* Use the same opsv. Rely on methods not to mess it up. */
- sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), (IV)kid);
+ sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), (IV)PTR_CAST kid);
  walkoptree(aTHX_ opsv, method);
  }
  }
@​@​ -437,7 +437,7 @​@​
  OUTPUT​:
  RETVAL

-#define address(sv) (IV)sv
+#define address(sv) (IV)PTR_CAST sv

IV
address(sv)
@​@​ -647,10 +647,10 @​@​
  if (o->op_type == OP_PUSHRE) {
  sv_setiv(newSVrv(ST(0), root ?
  svclassnames[SvTYPE((SV*)root)] : "B​::SV"),
- (IV)root);
+ (IV)PTR_CAST root);
  }
  else {
- sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), (IV)root);
+ sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), (IV)PTR_CAST root);
  }

B​::OP
@​@​ -814,7 +814,11 @​@​
  * reach this code anyway (unless sizeof(IV) > 8 but then
  * everything else breaks too so I'm not fussed at the moment).
  */
- wp[0] = htonl(((U32)iv) >> (sizeof(IV)*4));
+#ifdef UV_IS_QUAD
+ wp[0] = htonl(((UV)iv) >> (sizeof(UV)*4));
+#else
+ wp[0] = htonl(((U32)iv) >> (sizeof(UV)*4));
+#endif
  wp[1] = htonl(iv & 0xffffffff);
  ST(0) = sv_2mortal(newSVpvn((char *)wp, 8));
  } else {
@​@​ -1149,7 +1153,7 @​@​
CvXSUB(cv)
  B​::CV cv
  CODE​:
- ST(0) = sv_2mortal(newSViv((IV)CvXSUB(cv)));
+ ST(0) = sv_2mortal(newSViv((IV)PTR_CAST CvXSUB(cv)));

void
--- ext/B/typemap 1999/09/06 14​:29​:42 1.1
+++ ext/B/typemap 1999/09/07 09​:24​:11
@​@​ -35,7 +35,7 @​@​
T_OP_OBJ
  if (SvROK($arg)) {
  IV tmp = SvIV((SV*)SvRV($arg));
- $var = ($type) tmp;
+ $var = ($type)PTR_CAST tmp;
  }
  else
  croak(\"$var is not a reference\")
@​@​ -43,7 +43,7 @​@​
T_SV_OBJ
  if (SvROK($arg)) {
  IV tmp = SvIV((SV*)SvRV($arg));
- $var = ($type) tmp;
+ $var = ($type)PTR_CAST tmp;
  }
  else
  croak(\"$var is not a reference\")
@​@​ -51,18 +51,18 @​@​
T_MG_OBJ
  if (SvROK($arg)) {
  IV tmp = SvIV((SV*)SvRV($arg));
- $var = ($type) tmp;
+ $var = ($type)PTR_CAST tmp;
  }
  else
  croak(\"$var is not a reference\")

OUTPUT
T_OP_OBJ
- sv_setiv(newSVrv($arg, cc_opclassname(aTHX_ (OP*)$var)), (IV)$var);
+ sv_setiv(newSVrv($arg, cc_opclassname(aTHX_ (OP*)$var)), (IV)PTR_CAST $var);

T_SV_OBJ
  make_sv_object(aTHX_ ($arg), (SV*)($var));

T_MG_OBJ
- sv_setiv(newSVrv($arg, "B​::MAGIC"), (IV)$var);
+ sv_setiv(newSVrv($arg, "B​::MAGIC"), (IV)PTR_CAST $var);
--- ext/ByteLoader/bytecode.h 1999/09/06 17​:01​:19 1.1
+++ ext/ByteLoader/bytecode.h 1999/09/07 09​:24​:28
@​@​ -43,7 +43,7 @​@​
  BGET_U32(hi); \
  BGET_U32(lo); \
  if (sizeof(IV) == 8) \
- arg = (IV) (hi << (sizeof(IV)*4) | lo); \
+ arg = ((IV)hi << (sizeof(IV)*4) | (IV)lo); \
  else if (((I32)hi == -1 && (I32)lo < 0) \
  || ((I32)hi == 0 && (I32)lo >= 0)) { \
  arg = (I32)lo; \
--- ext/DynaLoader/dl_dlopen.xs 1999/09/03 15​:24​:26 1.1
+++ ext/DynaLoader/dl_dlopen.xs 1999/09/07 09​:24​:35
@​@​ -166,7 +166,7 @​@​
  if (RETVAL == NULL)
  SaveError(aTHX_ "%s",dlerror()) ;
  else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), (IV)PTR_CAST RETVAL);

void *
@​@​ -187,7 +187,7 @​@​
  if (RETVAL == NULL)
  SaveError(aTHX_ "%s",dlerror()) ;
  else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), (IV)PTR_CAST RETVAL);

void
--- ext/ODBM_File/ODBM_File.xs 1999/09/06 12​:05​:45 1.1
+++ ext/ODBM_File/ODBM_File.xs 1999/09/07 09​:24​:48
@​@​ -111,7 +111,7 @​@​
  Zero(RETVAL, 1, ODBM_File_type) ;
  RETVAL->dbp = dbp ;
  ST(0) = sv_mortalcopy(&PL_sv_undef);
- sv_setptrobj(ST(0), RETVAL, dbtype);
+ sv_setptrobj(ST(0), PTR_CAST RETVAL, dbtype);
  }

void
--- ext/POSIX/POSIX.xs 1999/09/06 11​:20​:16 1.1
+++ ext/POSIX/POSIX.xs 1999/09/07 09​:24​:57
@​@​ -3246,7 +3246,7 @​@​
  }
  else {
  New(0, sigset, 1, sigset_t);
- sv_setptrobj(*svp, sigset, "POSIX​::SigSet");
+ sv_setptrobj(*svp, PTR_CAST sigset, "POSIX​::SigSet");
  }
  *sigset = oact.sa_mask;

@​@​ -3274,7 +3274,7 @​@​
  }
  else if (sv_derived_from(ST(2), "POSIX​::SigSet")) {
  IV tmp = SvIV((SV*)SvRV(ST(2)));
- oldsigset = (POSIX__SigSet) tmp;
+ oldsigset = (POSIX__SigSet)PTR_CAST tmp;
  }
  else {
  New(0, oldsigset, 1, sigset_t);
@​@​ -3455,10 +3455,12 @​@​
  char *unparsed;
  PPCODE​:
  num = strtol(str, &unparsed, base);
- if (num >= IV_MIN && num <= IV_MAX)
- PUSHs(sv_2mortal(newSViv((IV)num)));
- else
+#if IVSIZE <= LONGSIZE
+ if (num < IV_MIN || num > IV_MAX)
  PUSHs(sv_2mortal(newSVnv((double)num)));
+ else
+#endif
+ PUSHs(sv_2mortal(newSViv((IV)num)));
  if (GIMME == G_ARRAY) {
  EXTEND(SP, 1);
  if (unparsed)
--- ext/Devel/DProf/DProf.xs 1999/09/06 14​:53​:00 1.1
+++ ext/Devel/DProf/DProf.xs 1999/09/07 09​:25​:05
@​@​ -292,7 +292,7 @​@​
  static U32 lastid;
  CV *cv;

- cv = (CV*)SvIVX(Sub);
+ cv = (CV*)PTR_CAST SvIVX(Sub);
  svp = hv_fetch(cv_hash, (char*)&cv, sizeof(CV*), TRUE);
  if (!SvOK(*svp)) {
  GV *gv = CvGV(cv);
@​@​ -568,7 +568,7 @​@​
  PUSHMARK( ORIGMARK );

#ifdef G_NODEBUG
- perl_call_sv( (SV*)SvIV(Sub), GIMME | G_NODEBUG);
+ perl_call_sv( (SV*)PTR_CAST SvIV(Sub), GIMME | G_NODEBUG);
#else
  curstash = debstash; /* To disable debugging of perl_call_sv */
#ifdef PERLDBf_NONAME
--- malloc.c 1999/09/03 10​:13​:38 1.1
+++ malloc.c 1999/09/07 09​:25​:34
@​@​ -516,9 +516,9 @​@​
# define MAX_PACKED (MAX_PACKED_POW2 * BUCKETS_PER_POW2 + BUCKET_POW2_SHIFT)
# define MAX_POW2_ALGO ((1<<(MAX_PACKED_POW2 + 1)) - M_OVERHEAD)
# define TWOK_MASK ((1<<LOG_OF_MIN_ARENA) - 1)
-# define TWOK_MASKED(x) ((u_bigint)(x) & ~TWOK_MASK)
-# define TWOK_SHIFT(x) ((u_bigint)(x) & TWOK_MASK)
-# define OV_INDEXp(block) ((u_char*)(TWOK_MASKED(block)))
+# define TWOK_MASKED(x) ((u_bigint)PTR_CAST(x) & ~TWOK_MASK)
+# define TWOK_SHIFT(x) ((u_bigint)PTR_CAST(x) & TWOK_MASK)
+# define OV_INDEXp(block) ((u_char*)PTR_CAST(TWOK_MASKED(block)))
# define OV_INDEX(block) (*OV_INDEXp(block))
# define OV_MAGIC(block,bucket) (*(OV_INDEXp(block) + \
  (TWOK_SHIFT(block)>> \
@​@​ -781,7 +781,7 @​@​
  /* Got it, now detach SvPV​: */
  pv = SvPV(sv, n_a);
  /* Check alignment​: */
- if (((UV)(pv - sizeof(union overhead))) & (NEEDED_ALIGNMENT - 1)) {
+ if (((UV)PTR_CAST (pv - sizeof(union overhead))) & (NEEDED_ALIGNMENT - 1)) {
  PerlIO_puts(PerlIO_stderr(),"Bad alignment of $^M!\n");
  return (char *)-1; /* die die die */
  }
@​@​ -924,7 +924,7 @​@​

  /* remove from linked list */
#if defined(RCHECK)
- if (((UV)p) & (MEM_ALIGNBYTES - 1))
+ if (((UV)PTR_CAST p) & (MEM_ALIGNBYTES - 1))
  PerlIO_printf(PerlIO_stderr(), "Corrupt malloc ptr 0x%lx at 0x%lx\n",
  (unsigned long)*((int*)p),(unsigned long)p);
#endif
@​@​ -1121,8 +1121,8 @​@​
# ifndef I286 /* The sbrk(0) call on the I286 always returns the next segment */
  /* WANTED_ALIGNMENT may be more than NEEDED_ALIGNMENT, but this may
  improve performance of memory access. */
- if ((UV)cp & (WANTED_ALIGNMENT - 1)) { /* Not aligned. */
- slack = WANTED_ALIGNMENT - ((UV)cp & (WANTED_ALIGNMENT - 1));
+ if ((UV)PTR_CAST cp & (WANTED_ALIGNMENT - 1)) { /* Not aligned. */
+ slack = WANTED_ALIGNMENT - ((UV)PTR_CAST cp & (WANTED_ALIGNMENT - 1));
  add += slack;
  }
# endif
@​@​ -1183,16 +1183,16 @​@​
  */

# if NEEDED_ALIGNMENT > MEM_ALIGNBYTES
- if ((UV)ovp & (NEEDED_ALIGNMENT - 1))
+ if ((UV)PTR_CAST ovp & (NEEDED_ALIGNMENT - 1))
  fatalcroak("Misalignment of sbrk()\n");
  else
# endif
#ifndef I286 /* Again, this should always be ok on an 80286 */
- if ((UV)ovp & (MEM_ALIGNBYTES - 1)) {
+ if ((UV)PTR_CAST ovp & (MEM_ALIGNBYTES - 1)) {
  DEBUG_m(PerlIO_printf(Perl_debug_log,
  "fixing sbrk()​: %d bytes off machine alignement\n",
- (int)((UV)ovp & (MEM_ALIGNBYTES - 1))));
- ovp = (union overhead *)(((UV)ovp + MEM_ALIGNBYTES) &
+ (int)((UV)PTR_CAST ovp & (MEM_ALIGNBYTES - 1))));
+ ovp = (union overhead *)PTR_CAST (((UV)PTR_CAST ovp + MEM_ALIGNBYTES) &
  (MEM_ALIGNBYTES - 1));
  (*nblksp)--;
# if defined(DEBUGGING_MSTATS)
--- lib/ExtUtils/typemap 1999/09/03 15​:41​:51 1.1
+++ lib/ExtUtils/typemap 1999/09/07 10​:05​:29
@​@​ -1,4 +1,4 @​@​
-# $Header​: /home/rmb1/misc/perl/build/perl5.005_60/../RCS/perl5.005_61/lib/ExtUtils/typemap,v 1.1 1999/09/03 15​:41​:51 rmb1 Exp $
+# $Header​: /home/rmb1/misc/perl/build/perl5.005_60/lib/ExtUtils/../../../RCS/perl5.005_61/lib/ExtUtils/typemap,v 1.2 1999/09/07 10​:05​:21 rmb1 Exp $
# basic C types
int T_IV
unsigned T_UV
@​@​ -107,11 +107,11 @​@​
T_PV
  $var = ($type)SvPV($arg,PL_na)
T_PTR
- $var = ($type)SvIV($arg)
+ $var = ($type)PTR_CAST SvIV($arg)
T_PTRREF
  if (SvROK($arg)) {
  IV tmp = SvIV((SV*)SvRV($arg));
- $var = ($type) tmp;
+ $var = ($type)PTR_CAST tmp;
  }
  else
  croak(\"$var is not a reference\")
@​@​ -132,7 +132,7 @​@​
T_PTROBJ
  if (sv_derived_from($arg, \"${ntype}\")) {
  IV tmp = SvIV((SV*)SvRV($arg));
- $var = ($type) tmp;
+ $var = ($type)PTR_CAST tmp;
  }
  else
  croak(\"$var is not of type ${ntype}\")
@​@​ -147,14 +147,14 @​@​
T_REFREF
  if (SvROK($arg)) {
  IV tmp = SvIV((SV*)SvRV($arg));
- $var = *($type) tmp;
+ $var = *($type)PTR_CAST tmp;
  }
  else
  croak(\"$var is not a reference\")
T_REFOBJ
  if (sv_isa($arg, \"${ntype}\")) {
  IV tmp = SvIV((SV*)SvRV($arg));
- $var = *($type) tmp;
+ $var = *($type)PTR_CAST tmp;
  }
  else
  croak(\"$var is not of type ${ntype}\")
--- dump.c 1999/09/03 10​:17​:15 1.1
+++ dump.c 1999/09/07 09​:26​:14
@​@​ -762,7 +762,7 @​@​
#ifdef IV_IS_QUAD
  Perl_sv_setpvf(aTHX_ d,
  "(0x%" PERL_PRIx64") at 0x%" PERL_PRIx64 "\n%*s REFCNT = %" PERL_PRId64 "\n%*s FLAGS = (",
- (UV)SvANY(sv), (UV)sv,
+ (UV)PTR_CAST SvANY(sv), (UV)PTR_CAST sv,
  PL_dumpindent*level, "", (IV)SvREFCNT(sv),
  PL_dumpindent*level, "");
#else
@​@​ -927,7 +927,7 @​@​
  }
  if (SvROK(sv)) {
#ifdef IV_IS_QUAD
- Perl_dump_indent(aTHX_ level, file, " RV = 0x%" PERL_PRIx64 "\n", (IV)SvRV(sv));
+ Perl_dump_indent(aTHX_ level, file, " RV = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST SvRV(sv));
#else
  Perl_dump_indent(aTHX_ level, file, " RV = 0x%lx\n", (long)SvRV(sv));
#endif
@​@​ -940,7 +940,7 @​@​
  if (type <= SVt_PVLV) {
  if (SvPVX(sv)) {
#ifdef IV_IS_QUAD
- Perl_dump_indent(aTHX_ level, file," PV = 0x%" PERL_PRIx64 " ", (IV)SvPVX(sv));
+ Perl_dump_indent(aTHX_ level, file," PV = 0x%" PERL_PRIx64 " ", (IV)PTR_CAST SvPVX(sv));
#else
  Perl_dump_indent(aTHX_ level, file," PV = 0x%lx ", (long)SvPVX(sv));
#endif
@​@​ -970,7 +970,7 @​@​
#ifdef IV_IS_QUAD
  Perl_dump_indent(aTHX_ level, file, " TARGOFF = %" PERL_PRId64 "\n", (IV)LvTARGOFF(sv));
  Perl_dump_indent(aTHX_ level, file, " TARGLEN = %" PERL_PRId64 "\n", (IV)LvTARGLEN(sv));
- Perl_dump_indent(aTHX_ level, file, " TARG = 0x%" PERL_PRIx64 "\n", (IV)LvTARG(sv));
+ Perl_dump_indent(aTHX_ level, file, " TARG = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST LvTARG(sv));
#else
  Perl_dump_indent(aTHX_ level, file, " TARGOFF = %ld\n", (long)LvTARGOFF(sv));
  Perl_dump_indent(aTHX_ level, file, " TARGLEN = %ld\n", (long)LvTARGLEN(sv));
@​@​ -981,14 +981,14 @​@​
  break;
  case SVt_PVAV​:
#ifdef IV_IS_QUAD
- Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%" PERL_PRIx64 , (IV)AvARRAY(sv));
+ Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%" PERL_PRIx64 , (IV)PTR_CAST AvARRAY(sv));
#else
  Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%lx", (long)AvARRAY(sv));
#endif
  if (AvARRAY(sv) != AvALLOC(sv)) {
  PerlIO_printf(file, " (offset=%d)\n", (AvARRAY(sv) - AvALLOC(sv)));
#ifdef IV_IS_QUAD
- Perl_dump_indent(aTHX_ level, file, " ALLOC = 0x%" PERL_PRIx64 "\n", (IV)AvALLOC(sv));
+ Perl_dump_indent(aTHX_ level, file, " ALLOC = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST AvALLOC(sv));
#else
  Perl_dump_indent(aTHX_ level, file, " ALLOC = 0x%lx\n", (long)AvALLOC(sv));
#endif
@​@​ -998,7 +998,7 @​@​
#ifdef IV_IS_QUAD
  Perl_dump_indent(aTHX_ level, file, " FILL = %" PERL_PRId64 "\n", (IV)AvFILLp(sv));
  Perl_dump_indent(aTHX_ level, file, " MAX = %" PERL_PRId64 "\n", (IV)AvMAX(sv));
- Perl_dump_indent(aTHX_ level, file, " ARYLEN = 0x%" PERL_PRIx64 "\n", (IV)AvARYLEN(sv));
+ Perl_dump_indent(aTHX_ level, file, " ARYLEN = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST AvARYLEN(sv));
#else
  Perl_dump_indent(aTHX_ level, file, " FILL = %ld\n", (long)AvFILLp(sv));
  Perl_dump_indent(aTHX_ level, file, " MAX = %ld\n", (long)AvMAX(sv));
@​@​ -1027,7 +1027,7 @​@​
  break;
  case SVt_PVHV​:
#ifdef IV_IS_QUAD
- Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%" PERL_PRIx64,(IV)HvARRAY(sv));
+ Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%" PERL_PRIx64,(IV)PTR_CAST HvARRAY(sv));
#else
  Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%lx",(long)HvARRAY(sv));
#endif
@​@​ -1080,7 +1080,7 @​@​
  Perl_dump_indent(aTHX_ level, file, " FILL = %" PERL_PRId64 "\n", (IV)HvFILL(sv));
  Perl_dump_indent(aTHX_ level, file, " MAX = %" PERL_PRId64 "\n", (IV)HvMAX(sv));
  Perl_dump_indent(aTHX_ level, file, " RITER = %" PERL_PRId64 "\n", (IV)HvRITER(sv));
- Perl_dump_indent(aTHX_ level, file, " EITER = 0x%" PERL_PRIx64 "\n",(IV) HvEITER(sv));
+ Perl_dump_indent(aTHX_ level, file, " EITER = 0x%" PERL_PRIx64 "\n",(IV)PTR_CAST HvEITER(sv));
#else
  Perl_dump_indent(aTHX_ level, file, " KEYS = %ld\n", (long)HvKEYS(sv));
  Perl_dump_indent(aTHX_ level, file, " FILL = %ld\n", (long)HvFILL(sv));
@​@​ -1090,7 +1090,7 @​@​
#endif
  if (HvPMROOT(sv))
#ifdef IV_IS_QUAD
- Perl_dump_indent(aTHX_ level, file, " PMROOT = 0x%" PERL_PRIx64 "\n",(IV)HvPMROOT(sv));
+ Perl_dump_indent(aTHX_ level, file, " PMROOT = 0x%" PERL_PRIx64 "\n",(IV)PTR_CAST HvPMROOT(sv));
#else
  Perl_dump_indent(aTHX_ level, file, " PMROOT = 0x%lx\n",(long)HvPMROOT(sv));
#endif
@​@​ -1137,7 +1137,7 @​@​
  if (CvROOT(sv) && dumpops)
  do_op_dump(level+1, file, CvROOT(sv));
#ifdef IV_IS_QUAD
- Perl_dump_indent(aTHX_ level, file, " XSUB = 0x%" PERL_PRIx64 "\n", (IV)CvXSUB(sv));
+ Perl_dump_indent(aTHX_ level, file, " XSUB = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST CvXSUB(sv));
  Perl_dump_indent(aTHX_ level, file, " XSUBANY = %" PERL_PRId64 "\n", (IV)CvXSUBANY(sv).any_i32);
#else
  Perl_dump_indent(aTHX_ level, file, " XSUB = 0x%lx\n", (long)CvXSUB(sv));
@​@​ -1171,7 +1171,7 @​@​
  Perl_dump_indent(aTHX_ level, file, " LINES = %ld\n", (long)FmLINES(sv));
#endif
#ifdef IV_IS_QUAD
- Perl_dump_indent(aTHX_ level, file, " PADLIST = 0x%" PERL_PRIx64 "\n", (IV)CvPADLIST(sv));
+ Perl_dump_indent(aTHX_ level, file, " PADLIST = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST CvPADLIST(sv));
#else
  Perl_dump_indent(aTHX_ level, file, " PADLIST = 0x%lx\n", (long)CvPADLIST(sv));
#endif
@​@​ -1211,7 +1211,7 @​@​
  CV *outside = CvOUTSIDE(sv);
#ifdef IV_IS_QUAD
  Perl_dump_indent(aTHX_ level, file, " OUTSIDE = 0x%" PERL_PRIx64 " (%s)\n",
- (IV)outside,
+ (IV)PTR_CAST outside,
  (!outside ? "null"
  : CvANON(outside) ? "ANON"
  : (outside == PL_main_cv) ? "MAIN"
@​@​ -1239,14 +1239,14 @​@​
#endif
  do_hv_dump (level, file, " GvSTASH", GvSTASH(sv));
#ifdef IV_IS_QUAD
- Perl_dump_indent(aTHX_ level, file, " GP = 0x%" PERL_PRIx64 "\n", (IV)GvGP(sv));
- Perl_dump_indent(aTHX_ level, file, " SV = 0x%" PERL_PRIx64 "\n", (IV)GvSV(sv));
+ Perl_dump_indent(aTHX_ level, file, " GP = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST GvGP(sv));
+ Perl_dump_indent(aTHX_ level, file, " SV = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST GvSV(sv));
  Perl_dump_indent(aTHX_ level, file, " REFCNT = %" PERL_PRId64 "\n", (IV)GvREFCNT(sv));
- Perl_dump_indent(aTHX_ level, file, " IO = 0x%" PERL_PRIx64 "\n", (IV)GvIOp(sv));
- Perl_dump_indent(aTHX_ level, file, " FORM = 0x%" PERL_PRIx64 " \n", (IV)GvFORM(sv));
- Perl_dump_indent(aTHX_ level, file, " AV = 0x%" PERL_PRIx64 "\n", (IV)GvAV(sv));
- Perl_dump_indent(aTHX_ level, file, " HV = 0x%" PERL_PRIx64 "\n", (IV)GvHV(sv));
- Perl_dump_indent(aTHX_ level, file, " CV = 0x%" PERL_PRIx64 "\n", (IV)GvCV(sv));
+ Perl_dump_indent(aTHX_ level, file, " IO = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST GvIOp(sv));
+ Perl_dump_indent(aTHX_ level, file, " FORM = 0x%" PERL_PRIx64 " \n", (IV)PTR_CAST GvFORM(sv));
+ Perl_dump_indent(aTHX_ level, file, " AV = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST GvAV(sv));
+ Perl_dump_indent(aTHX_ level, file, " HV = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST GvHV(sv));
+ Perl_dump_indent(aTHX_ level, file, " CV = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST GvCV(sv));
  Perl_dump_indent(aTHX_ level, file, " CVGEN = 0x%" PERL_PRIx64 "\n", (IV)GvCVGEN(sv));
  Perl_dump_indent(aTHX_ level, file, " LASTEXPR = %" PERL_PRId64 "\n", (IV)GvLASTEXPR(sv));
  Perl_dump_indent(aTHX_ level, file, " LINE = %" PERL_PRId64 "\n", (IV)GvLINE(sv));
@​@​ -1269,9 +1269,9 @​@​
  break;
  case SVt_PVIO​:
#ifdef IV_IS_QUAD
- Perl_dump_indent(aTHX_ level, file, " IFP = 0x%" PERL_PRIx64 "\n", (IV)IoIFP(sv));
- Perl_dump_indent(aTHX_ level, file, " OFP = 0x%" PERL_PRIx64 "\n", (IV)IoOFP(sv));
- Perl_dump_indent(aTHX_ level, file, " DIRP = 0x%" PERL_PRIx64 "\n", (IV)IoDIRP(sv));
+ Perl_dump_indent(aTHX_ level, file, " IFP = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST IoIFP(sv));
+ Perl_dump_indent(aTHX_ level, file, " OFP = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST IoOFP(sv));
+ Perl_dump_indent(aTHX_ level, file, " DIRP = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST IoDIRP(sv));
  Perl_dump_indent(aTHX_ level, file, " LINES = %" PERL_PRId64 "\n", (IV)IoLINES(sv));
  Perl_dump_indent(aTHX_ level, file, " PAGE = %" PERL_PRId64 "\n", (IV)IoPAGE(sv));
  Perl_dump_indent(aTHX_ level, file, " PAGE_LEN = %" PERL_PRId64 "\n", (IV)IoPAGE_LEN(sv));
--- pp.c 1999/09/03 10​:19​:13 1.1
+++ pp.c 1999/09/07 09​:26​:19
@​@​ -1776,9 +1776,9 @​@​
# endif
#endif
  u += SEED_C3 * (U32)getpid();
- u += SEED_C4 * (U32)(UV)PL_stack_sp;
+ u += SEED_C4 * (U32)(UV)PTR_CAST PL_stack_sp;
#ifndef PLAN9 /* XXX Plan9 assembler chokes on this; fix needed */
- u += SEED_C5 * (U32)(UV)&when;
+ u += SEED_C5 * (U32)(UV)PTR_CAST &when;
#endif
  return u;
}
--- doio.c 1999/09/03 10​:18​:44 1.1
+++ doio.c 1999/09/07 09​:37​:04
@​@​ -1696,7 +1696,7 @​@​
  else
  {
  IV i = SvIV(astr);
- a = (char *)i; /* ouch */
+ a = (char *)PTR_CAST i; /* ouch */
  }
  SETERRNO(0,0);
  switch (optype)
--- pp_ctl.c 1999/09/03 10​:19​:36 1.1
+++ pp_ctl.c 1999/09/07 09​:37​:32
@​@​ -229,12 +229,12 @​@​
  *rsp = (void*)p;
  }

- *p++ = (UV)(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
+ *p++ = (UV)PTR_CAST (RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
  RX_MATCH_COPIED_off(rx);

  *p++ = rx->nparens;

- *p++ = (UV)rx->subbeg;
+ *p++ = (UV)PTR_CAST rx->subbeg;
  *p++ = (UV)rx->sublen;
  for (i = 0; i <= rx->nparens; ++i) {
  *p++ = (UV)rx->startp[i];
@​@​ -255,7 +255,7 @​@​

  rx->nparens = *p++;

- rx->subbeg = (char*)(*p++);
+ rx->subbeg = (char*)PTR_CAST (*p++);
  rx->sublen = (I32)(*p++);
  for (i = 0; i <= rx->nparens; ++i) {
  rx->startp[i] = (I32)(*p++);
@​@​ -269,7 +269,7 @​@​
  UV *p = (UV*)*rsp;

  if (p) {
- Safefree((char*)(*p));
+ Safefree((char*)PTR_CAST (*p));
  Safefree(p);
  *rsp = Null(void*);
  }
@​@​ -2205,7 +2205,7 @​@​
  CV *gotocv;
 
  if (PERLDB_SUB_NN) {
- SvIVX(sv) = (IV)cv; /* Already upgraded, saved */
+ SvIVX(sv) = (IV)PTR_CAST cv; /* Already upgraded, saved */
  } else {
  save_item(sv);
  gv_efullname3(sv, CvGV(cv), Nullch);
--- pp_sys.c 1999/09/03 10​:19​:56 1.1
+++ pp_sys.c 1999/09/07 09​:37​:40
@​@​ -1894,7 +1894,7 @​@​
  }
  else {
  retval = SvIV(argsv);
- s = (char*)retval; /* ouch */
+ s = (char*)PTR_CAST retval; /* ouch */
  }

  TAINT_PROPER(optype == OP_IOCTL ? "ioctl" : "fcntl");
--- pp_hot.c 1999/09/03 13​:56​:29 1.1
+++ pp_hot.c 1999/09/07 09​:38​:01
@​@​ -1588,7 +1588,7 @​@​
  }
  LvTARG(lv) = SvREFCNT_inc(av);
  LvTARGOFF(lv) = cx->blk_loop.iterix;
- LvTARGLEN(lv) = (UV) -1;
+ LvTARGLEN(lv) = (STRLEN)UV_MAX;
  sv = (SV*)lv;
  }

@​@​ -1977,7 +1977,7 @​@​
  SvUPGRADE(dbsv, SVt_PVIV);
  SvIOK_on(dbsv);
  SAVEIV(SvIVX(dbsv));
- SvIVX(dbsv) = (IV)cv; /* Do it the quickest way */
+ SvIVX(dbsv) = (IV)PTR_CAST cv; /* Do it the quickest way */
  }

  if (CvXSUB(cv))

Perl Info


Site configuration information for perl 5.00561:

Configured by rmb1 at Tue Sep  7 12:05:56 BST 1999.

Summary of my perl5 (revision 5.0 version 5 subversion 61) configuration:
  Platform:
    osname=solaris, osvers=2.7, archname=sun4-solaris
    uname='sunos tempest 5.7 generic_106541-04 sun4u sparc sunw,ultra-5_10 '
    config_args='-Dcc=gcc -Doptimize=-O -g -Duse64bits -des'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useperlio=undef d_sfio=undef
    use64bits=define usemultiplicity=undef
  Compiler:
    cc='gcc', optimize='-O -g', gccversion=2.95.1 19990816 (release)
    cppflags='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_LONG_LONG -DDEBUGGING -I/usr/local/include -I/opt/gnu/include'
    ccflags ='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_LONG_LONG -DDEBUGGING -I/usr/local/include -I/opt/gnu/include'
    stdchar='char', d_stdstdio=define, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    alignbytes=8, usemymalloc=y, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags ='  -L/usr/local/lib -L/opt/gnu/lib'
    libpth=/usr/local/lib /opt/gnu/lib /lib /usr/lib /usr/ccs/lib
    libs=-lsocket -lnsl -ldl -lm -lc -lcrypt -lsec
    libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
    cccdlflags='-fPIC', lddlflags='-G -L/usr/local/lib -L/opt/gnu/lib'

Locally applied patches:
    


@INC for perl 5.00561:
    lib
    /home/rmb1/appl/lib/perl5/site_perl/5.005/sun4-solaris
    /home/rmb1/appl/lib/perl5/site_perl/5.005
    /usr/local/lib/perl5/5.00561/sun4-solaris
    /usr/local/lib/perl5/5.00561
    /usr/local/lib/site_perl/5.00561/sun4-solaris
    /usr/local/lib/site_perl
    .


Environment for perl 5.00561:
    HOME=/home/rmb1
    LANG=C
    LANGUAGE (unset)
    LD_LIBRARY_PATH=/usr/lib
    LOGDIR (unset)
    PATH=/home/rmb1/appl/script:/opt/gnu/script:/opt/gnu/bin:/usr/appl/script:/usr/local/appl/bin:/usr/tempest/bin:/usr/local/bin:/usr/local/Admigration/exec:/usr/local/hotjava/bin:/usr/openwin/bin:/usr/dt/bin:/usr/ccs/bin:/usr/bin
    PERL5LIB=/home/rmb1/appl/lib/perl5/site_perl/5.005
    PERL_BADLANG (unset)
    SHELL=/bin/csh

@p5pRT
Copy link
Author

p5pRT commented Sep 7, 1999

From @jhi

Robin Barker writes​:

This is a bug report for perl from rmb1@​tempest.cise.npl.co.uk,
generated with the help of perlbug 1.27 running under perl 5.00561.

-----------------------------------------------------------------
[Please enter your report here]

When compiling perl5.005_61 with -Duse64bits on solaris2.7 and
gcc2.95.1 I get lots of warnings because UVSIZE > PTRSIZE (and
a few because UVSIZE > LONGSIZE).

These are fixed with the patch below, which gives no warnings
with or without -Duse64bits. The patch introduces PTRV which
is the integer type of the same size as a PTR, and PTR_CAST
which casts a PTR/UV/IV to PTRV before further casting as UV/IV
or PTR. If UVSIZE == PTRSIZE, then PTR_CAST is empty.

Wow, thanks! I've been trying to avo^Wgather strength to do this
patch for several weeks now.

--
$jhi++; # http​://www.iki.fi/jhi/
  # There is this special biologist word we use for 'stable'.
  # It is 'dead'. -- Jack Cohen

@p5pRT
Copy link
Author

p5pRT commented Sep 7, 1999

From @gsar

On Tue, 07 Sep 1999 12​:30​:18 BST, Robin Barker wrote​:

When compiling perl5.005_61 with -Duse64bits on solaris2.7 and
gcc2.95.1 I get lots of warnings because UVSIZE > PTRSIZE (and
a few because UVSIZE > LONGSIZE).

These are fixed with the patch below, which gives no warnings
with or without -Duse64bits. The patch introduces PTRV which
is the integer type of the same size as a PTR, and PTR_CAST
which casts a PTR/UV/IV to PTRV before further casting as UV/IV
or PTR. If UVSIZE == PTRSIZE, then PTR_CAST is empty.

Robin

--- perl.h 1999/08/23 14​:40​:29 1.1
+++ perl.h 1999/09/07 10​:27​:45
+#if (IVSIZE > PTRSIZE) || (UVSIZE > PTRSIZE)
+# if PTRSIZE == LONGSIZE
+# define PTRV unsigned long
+# else
+# define PTRV unsigned
+# endif
+# define PTR_CAST (PTRV)
+#else
+# define PTRV UV
+# define PTR_CAST
+#endif

I think it may be better to have​:

  #if (IVSIZE > PTRSIZE) || (UVSIZE > PTRSIZE)
  # if PTRSIZE == LONGSIZE
  # define PTRV unsigned long
  # else
  # define PTRV unsigned
  # endif
  # define PTR2ANY(any,d) (any)(PTRV)(d)
  #else
  # define PTRV UV
  # define PTR2ANY(any,d) (any)(d)
  #endif
  #define PTR2IV(d) PTR2ANY(IV,d)
  #define PTR2UV(d) PTR2ANY(UV,d)

and use PTR2*() everywhere.

Sarathy
gsar@​activestate.com

@p5pRT
Copy link
Author

p5pRT commented Sep 8, 1999

From [Unknown Contact. See original ticket]

--- perl.h 1999/08/23 14​:40​:29 1.1
+++ perl.h 1999/09/07 10​:27​:45
+#if (IVSIZE > PTRSIZE) || (UVSIZE > PTRSIZE)
+# if PTRSIZE == LONGSIZE
+# define PTRV unsigned long
+# else
+# define PTRV unsigned
+# endif
+# define PTR_CAST (PTRV)
+#else
+# define PTRV UV
+# define PTR_CAST
+#endif

I think it may be better to have​:

#if (IVSIZE > PTRSIZE) || (UVSIZE > PTRSIZE)
# if PTRSIZE == LONGSIZE
# define PTRV unsigned long
# else
# define PTRV unsigned
# endif
# define PTR2ANY(any,d) (any)(PTRV)(d)
#else
# define PTRV UV
# define PTR2ANY(any,d) (any)(d)
#endif
#define PTR2IV(d) PTR2ANY(IV,d)
#define PTR2UV(d) PTR2ANY(UV,d)

and use PTR2*() everywhere.

This is fine, but the name PTR2ANY is not general enough​:
sometimes my PTR_CAST is used to downsize a UV/IV before
casting to a pointer type.

e.g. doio.c​:
  {
  IV i = SvIV(astr);
  a = (char *)PTR_CAST i; /* ouch */
  }

Using PTR2*(), this becomes​:
  a = PTR2ANY(char *, i);

which should really be
  a = ANY2PTR(char *, i);

It is also easier when making these updates to add PTR_CAST after an
existing cast, than remove one ')' and replace it at the end of the
castee.

Robin

@p5pRT
Copy link
Author

p5pRT commented Sep 8, 1999

From @gsar

On Wed, 08 Sep 1999 10​:56​:59 BST, Robin Barker wrote​:

This is fine, but the name PTR2ANY is not general enough​:
sometimes my PTR_CAST is used to downsize a UV/IV before
casting to a pointer type.

e.g. doio.c​:
{
IV i = SvIV(astr);
a = (char *)PTR_CAST i; /* ouch */
}

Using PTR2*(), this becomes​:
a = PTR2ANY(char *, i);

which should really be
a = ANY2PTR(char *, i);

OK, sounds like ANY2PTR() is a better name for it.

It is also easier when making these updates to add PTR_CAST after an
existing cast, than remove one ')' and replace it at the end of the
castee.

Since this is potentially something that could get used extensively,
I want it to "look" as intuitive as possible. The way it is in
the patch, it is not immediately obvious to someone casually
browsing the source why/where PTR_CAST may be needed.

Sarathy
gsar@​activestate.com

@p5pRT
Copy link
Author

p5pRT commented Sep 9, 1999

From [Unknown Contact. See original ticket]

From gsar@​activestate.com Wed Sep 8 17​:48​:55 1999

OK, sounds like ANY2PTR() is a better name for it.

It is also easier when making these updates to add PTR_CAST after an
existing cast, than remove one ')' and replace it at the end of the
castee.

Since this is potentially something that could get used extensively,
I want it to "look" as intuitive as possible. The way it is in
the patch, it is not immediately obvious to someone casually
browsing the source why/where PTR_CAST may be needed.

Point taken, I agree.

There are also cases where an explicit (PTRV) is needed, in
converting a pointer to an NV. I propose to use the following.

Index​: perl.h

1056a1057,1083

/*
* The macros INT2PTR and NUM2PTR are (despite their names)
* bi-directional​: they will convert int/float to or from pointers.
* However the conversion to int/float are named explicitly​:
* PTR2IV, PTR2UV, PTR2NV.
*
* For int conversions we do not need two casts if pointers are
* the same size as IV and UV. Otherwise we need an explicit
* cast (PTRV) to avoid compiler warnings.
*/

#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
# define PTRV UV
# define INT2PTR(any,d) (any)(d)
#else
# if PTRSIZE == LONGSIZE
# define PTRV unsigned long
# else
# define PTRV unsigned
# endif
# define INT2PTR(any,d) (any)(PTRV)(d)
#endif
#define NUM2PTR(any,d) (any)(PTRV)(d)
#define PTR2IV(p) INT2PTR(IV,p)
#define PTR2UV(p) INT2PTR(UV,p)
#define PTR2NV(p) NUM2PTR(NV,p)

Should I go with this?

Robin

@p5pRT
Copy link
Author

p5pRT commented Sep 9, 1999

From @gsar

On Thu, 09 Sep 1999 15​:51​:04 BST, Robin Barker wrote​:

===================================================================
1056a1057,1083

/*
* The macros INT2PTR and NUM2PTR are (despite their names)
* bi-directional​: they will convert int/float to or from pointers.
* However the conversion to int/float are named explicitly​:
* PTR2IV, PTR2UV, PTR2NV.
*
* For int conversions we do not need two casts if pointers are
* the same size as IV and UV. Otherwise we need an explicit
* cast (PTRV) to avoid compiler warnings.
*/

#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
# define PTRV UV
# define INT2PTR(any,d) (any)(d)
#else
# if PTRSIZE == LONGSIZE
# define PTRV unsigned long
# else
# define PTRV unsigned
# endif
# define INT2PTR(any,d) (any)(PTRV)(d)
#endif
#define NUM2PTR(any,d) (any)(PTRV)(d)
#define PTR2IV(p) INT2PTR(IV,p)
#define PTR2UV(p) INT2PTR(UV,p)
#define PTR2NV(p) NUM2PTR(NV,p)

Should I go with this?

Looks good, thanks.

Sarathy
gsar@​activestate.com

@p5pRT
Copy link
Author

p5pRT commented Sep 13, 1999

From [Unknown Contact. See original ticket]

Looks good, thanks.

Sarathy
gsar@​activestate.com

Patch appended.

There is still a problem with ./Configure -Duse64bits -Doptimize='-O -g'​:
which fails t/pragma/warning.t in t/pragma/warn/op with a spurious
'Scalars leaked​: 4294967296'

This should be prevented by $ENV{PERL_DESTRUCT_LEVEL} = 0 ...
in t/pragma/warn/op. I shall check this out against 5.005_62.

Robin

Index​: perl5.005_61/doio.c

Inline Patch
diff -u perl5.005_61/doio.c:1.1 perl5.005_61/doio.c:1.4
--- perl5.005_61/doio.c:1.1	Fri Sep  3 11:18:44 1999
+++ perl5.005_61/doio.c	Mon Sep 13 10:45:59 1999
@@ -1696,7 +1696,7 @@
     else
     {
 	IV i = SvIV(astr);
-	a = (char *)i;		/* ouch */
+	a = INT2PTR(char *,i);		/* ouch */
     }
     SETERRNO(0,0);
     switch (optype)
Index: perl5.005_61/dump.c
Inline Patch
diff -u perl5.005_61/dump.c:1.1 perl5.005_61/dump.c:1.4
--- perl5.005_61/dump.c:1.1	Fri Sep  3 11:17:15 1999
+++ perl5.005_61/dump.c	Mon Sep 13 10:45:59 1999
@@ -762,7 +762,7 @@
 #ifdef IV_IS_QUAD
     Perl_sv_setpvf(aTHX_ d,
 		   "(0x%" PERL_PRIx64") at 0x%" PERL_PRIx64 "\n%*s  REFCNT = %" PERL_PRId64 "\n%*s  FLAGS = (",
-		   (UV)SvANY(sv), (UV)sv,
+		   PTR2UV(SvANY(sv)), PTR2UV(sv),
 		   PL_dumpindent*level, "", (IV)SvREFCNT(sv),
 		   PL_dumpindent*level, "");
 #else
@@ -927,7 +927,7 @@
     }
     if (SvROK(sv)) {
 #ifdef IV_IS_QUAD
-	Perl_dump_indent(aTHX_ level, file, "  RV = 0x%" PERL_PRIx64 "\n", (IV)SvRV(sv));
+	Perl_dump_indent(aTHX_ level, file, "  RV = 0x%" PERL_PRIx64 "\n", PTR2IV(SvRV(sv)));
 #else
 	Perl_dump_indent(aTHX_ level, file, "  RV = 0x%lx\n", (long)SvRV(sv));
 #endif
@@ -940,7 +940,7 @@
     if (type <= SVt_PVLV) {
 	if (SvPVX(sv)) {
 #ifdef IV_IS_QUAD
-	    Perl_dump_indent(aTHX_ level, file,"  PV = 0x%" PERL_PRIx64 " ", (IV)SvPVX(sv));
+	    Perl_dump_indent(aTHX_ level, file,"  PV = 0x%" PERL_PRIx64 " ", PTR2IV(SvPVX(sv)));
 #else
 	    Perl_dump_indent(aTHX_ level, file,"  PV = 0x%lx ", (long)SvPVX(sv));
 #endif
@@ -970,7 +970,7 @@
 #ifdef IV_IS_QUAD
 	Perl_dump_indent(aTHX_ level, file, "  TARGOFF = %" PERL_PRId64 "\n", (IV)LvTARGOFF(sv));
 	Perl_dump_indent(aTHX_ level, file, "  TARGLEN = %" PERL_PRId64 "\n", (IV)LvTARGLEN(sv));
-	Perl_dump_indent(aTHX_ level, file, "  TARG = 0x%" PERL_PRIx64 "\n", (IV)LvTARG(sv));
+	Perl_dump_indent(aTHX_ level, file, "  TARG = 0x%" PERL_PRIx64 "\n", PTR2IV(LvTARG(sv)));
 #else
 	Perl_dump_indent(aTHX_ level, file, "  TARGOFF = %ld\n", (long)LvTARGOFF(sv));
 	Perl_dump_indent(aTHX_ level, file, "  TARGLEN = %ld\n", (long)LvTARGLEN(sv));
@@ -981,14 +981,14 @@
 	break;
     case SVt_PVAV:
 #ifdef IV_IS_QUAD
-	Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%" PERL_PRIx64 , (IV)AvARRAY(sv));
+	Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%" PERL_PRIx64 , PTR2IV(AvARRAY(sv)));
 #else
 	Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%lx", (long)AvARRAY(sv));
 #endif
 	if (AvARRAY(sv) != AvALLOC(sv)) {
 	    PerlIO_printf(file, " (offset=%d)\n", (AvARRAY(sv) - AvALLOC(sv)));
 #ifdef IV_IS_QUAD
-	    Perl_dump_indent(aTHX_ level, file, "  ALLOC = 0x%" PERL_PRIx64 "\n", (IV)AvALLOC(sv));
+	    Perl_dump_indent(aTHX_ level, file, "  ALLOC = 0x%" PERL_PRIx64 "\n", PTR2IV(AvALLOC(sv)));
 #else
 	    Perl_dump_indent(aTHX_ level, file, "  ALLOC = 0x%lx\n", (long)AvALLOC(sv));
 #endif
@@ -998,7 +998,7 @@
 #ifdef IV_IS_QUAD
 	Perl_dump_indent(aTHX_ level, file, "  FILL = %" PERL_PRId64 "\n", (IV)AvFILLp(sv));
 	Perl_dump_indent(aTHX_ level, file, "  MAX = %" PERL_PRId64 "\n", (IV)AvMAX(sv));
-	Perl_dump_indent(aTHX_ level, file, "  ARYLEN = 0x%" PERL_PRIx64 "\n", (IV)AvARYLEN(sv));
+	Perl_dump_indent(aTHX_ level, file, "  ARYLEN = 0x%" PERL_PRIx64 "\n", PTR2IV(AvARYLEN(sv)));
 #else
 	Perl_dump_indent(aTHX_ level, file, "  FILL = %ld\n", (long)AvFILLp(sv));
 	Perl_dump_indent(aTHX_ level, file, "  MAX = %ld\n", (long)AvMAX(sv));
@@ -1027,7 +1027,7 @@
 	break;
     case SVt_PVHV:
 #ifdef IV_IS_QUAD
-	Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%" PERL_PRIx64,(IV)HvARRAY(sv));
+	Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%" PERL_PRIx64,PTR2IV(HvARRAY(sv)));
 #else
 	Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%lx",(long)HvARRAY(sv));
 #endif
@@ -1080,7 +1080,7 @@
 	Perl_dump_indent(aTHX_ level, file, "  FILL = %" PERL_PRId64 "\n", (IV)HvFILL(sv));
 	Perl_dump_indent(aTHX_ level, file, "  MAX = %" PERL_PRId64 "\n", (IV)HvMAX(sv));
 	Perl_dump_indent(aTHX_ level, file, "  RITER = %" PERL_PRId64 "\n", (IV)HvRITER(sv));
-	Perl_dump_indent(aTHX_ level, file, "  EITER = 0x%" PERL_PRIx64 "\n",(IV) HvEITER(sv));
+	Perl_dump_indent(aTHX_ level, file, "  EITER = 0x%" PERL_PRIx64 "\n",PTR2IV(HvEITER(sv)));
 #else
 	Perl_dump_indent(aTHX_ level, file, "  KEYS = %ld\n", (long)HvKEYS(sv));
 	Perl_dump_indent(aTHX_ level, file, "  FILL = %ld\n", (long)HvFILL(sv));
@@ -1090,7 +1090,7 @@
 #endif
 	if (HvPMROOT(sv))
 #ifdef IV_IS_QUAD
-	    Perl_dump_indent(aTHX_ level, file, "  PMROOT = 0x%" PERL_PRIx64 "\n",(IV)HvPMROOT(sv));
+	    Perl_dump_indent(aTHX_ level, file, "  PMROOT = 0x%" PERL_PRIx64 "\n",PTR2IV(HvPMROOT(sv)));
 #else
 	    Perl_dump_indent(aTHX_ level, file, "  PMROOT = 0x%lx\n",(long)HvPMROOT(sv));
 #endif
@@ -1137,7 +1137,7 @@
         if (CvROOT(sv) && dumpops)
 	    do_op_dump(level+1, file, CvROOT(sv));
 #ifdef IV_IS_QUAD
-	Perl_dump_indent(aTHX_ level, file, "  XSUB = 0x%" PERL_PRIx64 "\n", (IV)CvXSUB(sv));
+	Perl_dump_indent(aTHX_ level, file, "  XSUB = 0x%" PERL_PRIx64 "\n", PTR2IV(CvXSUB(sv)));
 	Perl_dump_indent(aTHX_ level, file, "  XSUBANY = %" PERL_PRId64 "\n", (IV)CvXSUBANY(sv).any_i32);
 #else
 	Perl_dump_indent(aTHX_ level, file, "  XSUB = 0x%lx\n", (long)CvXSUB(sv));
@@ -1171,7 +1171,7 @@
 	    Perl_dump_indent(aTHX_ level, file, "  LINES = %ld\n", (long)FmLINES(sv));
 #endif
 #ifdef IV_IS_QUAD
-	Perl_dump_indent(aTHX_ level, file, "  PADLIST = 0x%" PERL_PRIx64 "\n", (IV)CvPADLIST(sv));
+	Perl_dump_indent(aTHX_ level, file, "  PADLIST = 0x%" PERL_PRIx64 "\n", PTR2IV(CvPADLIST(sv)));
 #else
 	Perl_dump_indent(aTHX_ level, file, "  PADLIST = 0x%lx\n", (long)CvPADLIST(sv));
 #endif
@@ -1211,7 +1211,7 @@
 	    CV *outside = CvOUTSIDE(sv);
 #ifdef IV_IS_QUAD
 	    Perl_dump_indent(aTHX_ level, file, "  OUTSIDE = 0x%" PERL_PRIx64 " (%s)\n", 
-			(IV)outside, 
+			PTR2IV(outside), 
 			(!outside ? "null"
 			 : CvANON(outside) ? "ANON"
 			 : (outside == PL_main_cv) ? "MAIN"
@@ -1239,14 +1239,14 @@
 #endif
 	do_hv_dump (level, file, "  GvSTASH", GvSTASH(sv));
 #ifdef IV_IS_QUAD
-	Perl_dump_indent(aTHX_ level, file, "  GP = 0x%" PERL_PRIx64 "\n", (IV)GvGP(sv));
-	Perl_dump_indent(aTHX_ level, file, "    SV = 0x%" PERL_PRIx64 "\n", (IV)GvSV(sv));
+	Perl_dump_indent(aTHX_ level, file, "  GP = 0x%" PERL_PRIx64 "\n", PTR2IV(GvGP(sv)));
+	Perl_dump_indent(aTHX_ level, file, "    SV = 0x%" PERL_PRIx64 "\n", PTR2IV(GvSV(sv)));
 	Perl_dump_indent(aTHX_ level, file, "    REFCNT = %" PERL_PRId64 "\n", (IV)GvREFCNT(sv));
-	Perl_dump_indent(aTHX_ level, file, "    IO = 0x%" PERL_PRIx64 "\n", (IV)GvIOp(sv));
-	Perl_dump_indent(aTHX_ level, file, "    FORM = 0x%" PERL_PRIx64 "  \n", (IV)GvFORM(sv));
-	Perl_dump_indent(aTHX_ level, file, "    AV = 0x%" PERL_PRIx64 "\n", (IV)GvAV(sv));
-	Perl_dump_indent(aTHX_ level, file, "    HV = 0x%" PERL_PRIx64 "\n", (IV)GvHV(sv));
-	Perl_dump_indent(aTHX_ level, file, "    CV = 0x%" PERL_PRIx64 "\n", (IV)GvCV(sv));
+	Perl_dump_indent(aTHX_ level, file, "    IO = 0x%" PERL_PRIx64 "\n", PTR2IV(GvIOp(sv)));
+	Perl_dump_indent(aTHX_ level, file, "    FORM = 0x%" PERL_PRIx64 "  \n", PTR2IV(GvFORM(sv)));
+	Perl_dump_indent(aTHX_ level, file, "    AV = 0x%" PERL_PRIx64 "\n", PTR2IV(GvAV(sv)));
+	Perl_dump_indent(aTHX_ level, file, "    HV = 0x%" PERL_PRIx64 "\n", PTR2IV(GvHV(sv)));
+	Perl_dump_indent(aTHX_ level, file, "    CV = 0x%" PERL_PRIx64 "\n", PTR2IV(GvCV(sv)));
 	Perl_dump_indent(aTHX_ level, file, "    CVGEN = 0x%" PERL_PRIx64 "\n", (IV)GvCVGEN(sv));
 	Perl_dump_indent(aTHX_ level, file, "    LASTEXPR = %" PERL_PRId64 "\n", (IV)GvLASTEXPR(sv));
 	Perl_dump_indent(aTHX_ level, file, "    LINE = %" PERL_PRId64 "\n", (IV)GvLINE(sv));
@@ -1269,9 +1269,9 @@
 	break;
     case SVt_PVIO:
 #ifdef IV_IS_QUAD
-	Perl_dump_indent(aTHX_ level, file, "  IFP = 0x%" PERL_PRIx64 "\n", (IV)IoIFP(sv));
-	Perl_dump_indent(aTHX_ level, file, "  OFP = 0x%" PERL_PRIx64 "\n", (IV)IoOFP(sv));
-	Perl_dump_indent(aTHX_ level, file, "  DIRP = 0x%" PERL_PRIx64 "\n", (IV)IoDIRP(sv));
+	Perl_dump_indent(aTHX_ level, file, "  IFP = 0x%" PERL_PRIx64 "\n", PTR2IV(IoIFP(sv)));
+	Perl_dump_indent(aTHX_ level, file, "  OFP = 0x%" PERL_PRIx64 "\n", PTR2IV(IoOFP(sv)));
+	Perl_dump_indent(aTHX_ level, file, "  DIRP = 0x%" PERL_PRIx64 "\n", PTR2IV(IoDIRP(sv)));
 	Perl_dump_indent(aTHX_ level, file, "  LINES = %" PERL_PRId64 "\n", (IV)IoLINES(sv));
 	Perl_dump_indent(aTHX_ level, file, "  PAGE = %" PERL_PRId64 "\n", (IV)IoPAGE(sv));
 	Perl_dump_indent(aTHX_ level, file, "  PAGE_LEN = %" PERL_PRId64 "\n", (IV)IoPAGE_LEN(sv));
Index: perl5.005_61/malloc.c
Inline Patch
diff -u perl5.005_61/malloc.c:1.1 perl5.005_61/malloc.c:1.6
--- perl5.005_61/malloc.c:1.1	Fri Sep  3 11:13:38 1999
+++ perl5.005_61/malloc.c	Mon Sep 13 11:12:36 1999
@@ -384,13 +384,11 @@
 
 #define u_char unsigned char
 #define u_int unsigned int
-
-#ifdef HAS_QUAD
-#  define u_bigint UV			/* Needs to eat *void. */
-#else  /* needed? */
-#  define u_bigint unsigned long	/* Needs to eat *void. */
-#endif
-
+/* 
+ * I removed the definition of u_bigint which appeared to be u_bigint = UV
+ * u_bigint was only used in TWOK_MASKED and TWOK_SHIFT 
+ * where I have used PTR2UV.  RMB
+ */
 #define u_short unsigned short
 
 /* 286 and atarist like big chunks, which gives too much overhead. */
@@ -516,9 +514,9 @@
 #  define MAX_PACKED (MAX_PACKED_POW2 * BUCKETS_PER_POW2 + BUCKET_POW2_SHIFT)
 #  define MAX_POW2_ALGO ((1<<(MAX_PACKED_POW2 + 1)) - M_OVERHEAD)
 #  define TWOK_MASK ((1<<LOG_OF_MIN_ARENA) - 1)
-#  define TWOK_MASKED(x) ((u_bigint)(x) & ~TWOK_MASK)
-#  define TWOK_SHIFT(x) ((u_bigint)(x) & TWOK_MASK)
-#  define OV_INDEXp(block) ((u_char*)(TWOK_MASKED(block)))
+#  define TWOK_MASKED(x) (PTR2UV(x) & ~TWOK_MASK)
+#  define TWOK_SHIFT(x) (PTR2UV(x) & TWOK_MASK)
+#  define OV_INDEXp(block) (INT2PTR(u_char*,TWOK_MASKED(block)))
 #  define OV_INDEX(block) (*OV_INDEXp(block))
 #  define OV_MAGIC(block,bucket) (*(OV_INDEXp(block) +			\
 				    (TWOK_SHIFT(block)>>		\
@@ -781,7 +779,7 @@
 	/* Got it, now detach SvPV: */
 	pv = SvPV(sv, n_a);
 	/* Check alignment: */
-	if (((UV)(pv - sizeof(union overhead))) & (NEEDED_ALIGNMENT - 1)) {
+	if ((PTR2UV(pv) - sizeof(union overhead)) & (NEEDED_ALIGNMENT - 1)) {
 	    PerlIO_puts(PerlIO_stderr(),"Bad alignment of $^M!\n");
 	    return (char *)-1;		/* die die die */
 	}
@@ -924,7 +922,7 @@
 
 	/* remove from linked list */
 #if defined(RCHECK)
-	if (((UV)p) & (MEM_ALIGNBYTES - 1))
+	if ((PTR2UV(p)) & (MEM_ALIGNBYTES - 1))
 	    PerlIO_printf(PerlIO_stderr(), "Corrupt malloc ptr 0x%lx at 0x%lx\n",
 		(unsigned long)*((int*)p),(unsigned long)p);
 #endif
@@ -1121,8 +1119,8 @@
 #  ifndef I286 	/* The sbrk(0) call on the I286 always returns the next segment */
 	/* WANTED_ALIGNMENT may be more than NEEDED_ALIGNMENT, but this may
 	   improve performance of memory access. */
-	if ((UV)cp & (WANTED_ALIGNMENT - 1)) { /* Not aligned. */
-	    slack = WANTED_ALIGNMENT - ((UV)cp & (WANTED_ALIGNMENT - 1));
+	if (PTR2UV(cp) & (WANTED_ALIGNMENT - 1)) { /* Not aligned. */
+	    slack = WANTED_ALIGNMENT - (PTR2UV(cp) & (WANTED_ALIGNMENT - 1));
 	    add += slack;
 	}
 #  endif
@@ -1183,16 +1181,16 @@
 	 */
 
 #  if NEEDED_ALIGNMENT > MEM_ALIGNBYTES
-	if ((UV)ovp & (NEEDED_ALIGNMENT - 1))
+	if (PTR2UV(ovp) & (NEEDED_ALIGNMENT - 1))
 	    fatalcroak("Misalignment of sbrk()\n");
 	else
 #  endif
 #ifndef I286	/* Again, this should always be ok on an 80286 */
-	if ((UV)ovp & (MEM_ALIGNBYTES - 1)) {
+	if (PTR2UV(ovp) & (MEM_ALIGNBYTES - 1)) {
 	    DEBUG_m(PerlIO_printf(Perl_debug_log, 
 				  "fixing sbrk(): %d bytes off machine alignement\n",
-				  (int)((UV)ovp & (MEM_ALIGNBYTES - 1))));
-	    ovp = (union overhead *)(((UV)ovp + MEM_ALIGNBYTES) &
+				  (int)(PTR2UV(ovp) & (MEM_ALIGNBYTES - 1))));
+	    ovp = INT2PTR(union overhead *,(PTR2UV(ovp) + MEM_ALIGNBYTES) &
 				     (MEM_ALIGNBYTES - 1));
 	    (*nblksp)--;
 # if defined(DEBUGGING_MSTATS)
Index: perl5.005_61/perl.h
Inline Patch
diff -u perl5.005_61/perl.h:1.1 perl5.005_61/perl.h:1.4
--- perl5.005_61/perl.h:1.1	Mon Aug 23 15:40:29 1999
+++ perl5.005_61/perl.h	Thu Sep  9 14:47:31 1999
@@ -1023,7 +1023,7 @@
 #    define UV_MAX PERL_UQUAD_MAX
 #    define UV_MIN PERL_UQUAD_MIN
 #  endif
-#  define IVSIZF 8
+#  define IVSIZE 8
 #  define UVSIZE 8
 #  define IV_IS_QUAD
 #  define UV_IS_QUAD
@@ -1052,7 +1052,34 @@
 #  define IVSIZE LONGSIZE
 #endif
 #define IV_DIG (BIT_DIGITS(IVSIZE * 8) + 1)
-#define UV_DIG (BIT_DIGITS(IVSIZE * 8) + 1)
+#define UV_DIG (BIT_DIGITS(UVSIZE * 8) + 1)
+
+/*   
+ *  The macros INT2PTR and NUM2PTR are (despite their names)
+ *  bi-directional: they will convert int/float to or from pointers.
+ *  However the conversion to int/float are named explicitly:
+ *  PTR2IV, PTR2UV, PTR2NV.
+ *
+ *  For int conversions we do not need two casts if pointers are
+ *  the same size as IV and UV.   Otherwise we need an explicit
+ *  cast (PTRV) to avoid compiler warnings.
+ */
+
+#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
+#  define PTRV			UV
+#  define INT2PTR(any,d)	(any)(d)
+#else
+#  if PTRSIZE == LONGSIZE 
+#    define PTRV		unsigned long
+#  else
+#    define PTRV		unsigned
+#  endif
+#  define INT2PTR(any,d)	(any)(PTRV)(d)
+#endif
+#define NUM2PTR(any,d)	(any)(PTRV)(d)
+#define PTR2IV(p)	INT2PTR(IV,p)
+#define PTR2UV(p)	INT2PTR(UV,p)
+#define PTR2NV(p)	NUM2PTR(NV,p)
 
 #ifdef USE_LONG_DOUBLE
 #  if defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE)
Index: perl5.005_61/pp.c
Inline Patch
diff -u perl5.005_61/pp.c:1.1 perl5.005_61/pp.c:1.4
--- perl5.005_61/pp.c:1.1	Fri Sep  3 11:19:13 1999
+++ perl5.005_61/pp.c	Mon Sep 13 10:45:59 1999
@@ -1776,9 +1776,9 @@
 #  endif
 #endif
     u += SEED_C3 * (U32)getpid();
-    u += SEED_C4 * (U32)(UV)PL_stack_sp;
+    u += SEED_C4 * (U32)PTR2UV(PL_stack_sp);
 #ifndef PLAN9           /* XXX Plan9 assembler chokes on this; fix needed  */
-    u += SEED_C5 * (U32)(UV)&when;
+    u += SEED_C5 * (U32)PTR2UV(&when);
 #endif
     return u;
 }
Index: perl5.005_61/pp_ctl.c
Inline Patch
diff -u perl5.005_61/pp_ctl.c:1.1 perl5.005_61/pp_ctl.c:1.4
--- perl5.005_61/pp_ctl.c:1.1	Fri Sep  3 11:19:36 1999
+++ perl5.005_61/pp_ctl.c	Mon Sep 13 10:46:00 1999
@@ -229,12 +229,12 @@
 	*rsp = (void*)p;
     }
 
-    *p++ = (UV)(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
+    *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
     RX_MATCH_COPIED_off(rx);
 
     *p++ = rx->nparens;
 
-    *p++ = (UV)rx->subbeg;
+    *p++ = PTR2UV(rx->subbeg);
     *p++ = (UV)rx->sublen;
     for (i = 0; i <= rx->nparens; ++i) {
 	*p++ = (UV)rx->startp[i];
@@ -255,7 +255,7 @@
 
     rx->nparens = *p++;
 
-    rx->subbeg = (char*)(*p++);
+    rx->subbeg = INT2PTR(char*,*p++);
     rx->sublen = (I32)(*p++);
     for (i = 0; i <= rx->nparens; ++i) {
 	rx->startp[i] = (I32)(*p++);
@@ -269,7 +269,7 @@
     UV *p = (UV*)*rsp;
 
     if (p) {
-	Safefree((char*)(*p));
+	Safefree(INT2PTR(char*,*p));
 	Safefree(p);
 	*rsp = Null(void*);
     }
@@ -2205,7 +2205,7 @@
 		    CV *gotocv;
 		    
 		    if (PERLDB_SUB_NN) {
-			SvIVX(sv) = (IV)cv; /* Already upgraded, saved */
+			SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
 		    } else {
 			save_item(sv);
 			gv_efullname3(sv, CvGV(cv), Nullch);
Index: perl5.005_61/pp_hot.c
Inline Patch
diff -u perl5.005_61/pp_hot.c:1.1 perl5.005_61/pp_hot.c:1.4
--- perl5.005_61/pp_hot.c:1.1	Fri Sep  3 14:56:29 1999
+++ perl5.005_61/pp_hot.c	Mon Sep 13 10:46:00 1999
@@ -1588,7 +1588,7 @@
 	}
 	LvTARG(lv) = SvREFCNT_inc(av);
 	LvTARGOFF(lv) = cx->blk_loop.iterix;
-	LvTARGLEN(lv) = (UV) -1;
+	LvTARGLEN(lv) = (STRLEN)UV_MAX;
 	sv = (SV*)lv;
     }
 
@@ -1977,7 +1977,7 @@
 	SvUPGRADE(dbsv, SVt_PVIV);
 	SvIOK_on(dbsv);
 	SAVEIV(SvIVX(dbsv));
-	SvIVX(dbsv) = (IV)cv;		/* Do it the quickest way  */
+	SvIVX(dbsv) = PTR2IV(cv);	/* Do it the quickest way  */
     }
 
     if (CvXSUB(cv))
Index: perl5.005_61/pp_sys.c
Inline Patch
diff -u perl5.005_61/pp_sys.c:1.1 perl5.005_61/pp_sys.c:1.4
--- perl5.005_61/pp_sys.c:1.1	Fri Sep  3 11:19:56 1999
+++ perl5.005_61/pp_sys.c	Mon Sep 13 10:46:00 1999
@@ -1894,7 +1894,7 @@
     }
     else {
 	retval = SvIV(argsv);
-	s = (char*)retval;		/* ouch */
+	s = INT2PTR(char*,retval);		/* ouch */
     }
 
     TAINT_PROPER(optype == OP_IOCTL ? "ioctl" : "fcntl");
Index: perl5.005_61/sv.c
Inline Patch
diff -u perl5.005_61/sv.c:1.1 perl5.005_61/sv.c:1.3
--- perl5.005_61/sv.c:1.1	Wed Sep  1 17:24:24 1999
+++ perl5.005_61/sv.c	Mon Sep 13 10:46:00 1999
@@ -618,8 +618,8 @@
 	pv	= (char*)SvRV(sv);
 	cur	= 0;
 	len	= 0;
-	iv	= (IV)pv;
-	nv	= (NV)(unsigned long)pv;
+	iv	= PTR2IV(pv);
+	nv	= PTR2NV(pv);
 	del_XRV(SvANY(sv));
 	magic	= 0;
 	stash	= 0;
@@ -1083,7 +1083,7 @@
 	  SV* tmpstr;
 	  if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv, numer)))
 	      return SvIV(tmpstr);
-	  return (IV)SvRV(sv);
+	  return PTR2IV(SvRV(sv));
 	}
 	if (SvREADONLY(sv) && !SvOK(sv)) {
 	    dTHR;
@@ -1119,7 +1119,7 @@
 #ifdef IV_IS_QUAD
 	    DEBUG_c(PerlIO_printf(Perl_debug_log, 
 				  "0x%" PERL_PRIx64 " 2iv(%" PERL_PRIu64 " => %" PERL_PRId64 ") (as unsigned)\n",
-				  (UV)sv,
+				  PTR2UV(sv),
 				  (UV)SvUVX(sv), (IV)SvUVX(sv)));
 #else
 	    DEBUG_c(PerlIO_printf(Perl_debug_log, 
@@ -1228,7 +1228,7 @@
 	  SV* tmpstr;
 	  if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv, numer)))
 	      return SvUV(tmpstr);
-	  return (UV)SvRV(sv);
+	  return PTR2UV(SvRV(sv));
 	}
 	if (SvREADONLY(sv) && !SvOK(sv)) {
 	    dTHR;
@@ -1399,7 +1399,7 @@
 	  SV* tmpstr;
 	  if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)))
 	      return SvNV(tmpstr);
-	  return (NV)(unsigned long)SvRV(sv);
+	  return PTR2NV(SvRV(sv));
 	}
 	if (SvREADONLY(sv) && !SvOK(sv)) {
 	    dTHR;
@@ -1783,7 +1783,7 @@
 		else
 		    sv_setpv(tsv, s);
 #ifdef IV_IS_QUAD
-		Perl_sv_catpvf(aTHX_ tsv, "(0x%" PERL_PRIx64")", (UV)sv);
+		Perl_sv_catpvf(aTHX_ tsv, "(0x%" PERL_PRIx64")", PTR2UV(sv));
 #else
 		Perl_sv_catpvf(aTHX_ tsv, "(0x%lx)", (unsigned long)sv);
 #endif
@@ -3694,7 +3694,7 @@
 	    IV i;
 	    if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
 		return;
-	    i = (IV)SvRV(sv);
+	    i = PTR2IV(SvRV(sv));
 	    sv_unref(sv);
 	    sv_setiv(sv, i);
 	}
@@ -3794,7 +3794,7 @@
 	    IV i;
 	    if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
 		return;
-	    i = (IV)SvRV(sv);
+	    i = PTR2IV(SvRV(sv));
 	    sv_unref(sv);
 	    sv_setiv(sv, i);
 	}
@@ -4398,7 +4398,7 @@
 	SvSETMAGIC(rv);
     }
     else
-	sv_setiv(newSVrv(rv,classname), (IV)pv);
+	sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
     return rv;
 }
 
@@ -4901,9 +4901,9 @@
 
 	case 'p':
 	    if (args)
-		uv = (UV)va_arg(*args, void*);
+		uv = PTR2UV(va_arg(*args, void*));
 	    else
-		uv = (svix < svmax) ? (UV)svargs[svix++] : 0;
+		uv = (svix < svmax) ? PTR2UV(svargs[svix++]) : 0;
 	    base = 16;
 	    goto integer;
 
Index: perl5.005_61/ext/B/B.xs
Inline Patch
diff -u perl5.005_61/ext/B/B.xs:1.1 perl5.005_61/ext/B/B.xs:1.3
--- perl5.005_61/ext/B/B.xs:1.1	Mon Sep  6 14:58:24 1999
+++ perl5.005_61/ext/B/B.xs	Mon Sep 13 10:46:25 1999
@@ -202,7 +202,7 @@
     }
     if (!type) {
 	type = svclassnames[SvTYPE(sv)];
-	iv = (IV)sv;
+	iv = PTR2IV(sv);
     }
     sv_setiv(newSVrv(arg, type), iv);
     return arg;
@@ -211,7 +211,7 @@
 static SV *
 make_mg_object(pTHX_ SV *arg, MAGIC *mg)
 {
-    sv_setiv(newSVrv(arg, "B::MAGIC"), (IV)mg);
+    sv_setiv(newSVrv(arg, "B::MAGIC"), PTR2IV(mg));
     return arg;
 }
 
@@ -317,7 +317,7 @@
     if (!SvROK(opsv))
 	croak("opsv is not a reference");
     opsv = sv_mortalcopy(opsv);
-    o = (OP*)SvIV((SV*)SvRV(opsv));
+    o = INT2PTR(OP*,SvIV((SV*)SvRV(opsv)));
     if (walkoptree_debug) {
 	PUSHMARK(sp);
 	XPUSHs(opsv);
@@ -332,7 +332,7 @@
 	OP *kid;
 	for (kid = ((UNOP*)o)->op_first; kid; kid = kid->op_sibling) {
 	    /* Use the same opsv. Rely on methods not to mess it up. */
-	    sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), (IV)kid);
+	    sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), PTR2IV(kid));
 	    walkoptree(aTHX_ opsv, method);
 	}
     }
@@ -437,7 +437,7 @@
     OUTPUT:
 	RETVAL
 
-#define address(sv) (IV)sv
+#define address(sv) PTR2IV(sv)
 
 IV
 address(sv)
@@ -647,10 +647,10 @@
 	if (o->op_type == OP_PUSHRE) {
 	    sv_setiv(newSVrv(ST(0), root ?
 			     svclassnames[SvTYPE((SV*)root)] : "B::SV"),
-		     (IV)root);
+		     PTR2IV(root));
 	}
 	else {
-	    sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), (IV)root);
+	    sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), PTR2IV(root));
 	}
 
 B::OP
@@ -814,7 +814,11 @@
 	     * reach this code anyway (unless sizeof(IV) > 8 but then
 	     * everything else breaks too so I'm not fussed at the moment).
 	     */
-	    wp[0] = htonl(((U32)iv) >> (sizeof(IV)*4));
+#ifdef UV_IS_QUAD
+	    wp[0] = htonl(((UV)iv) >> (sizeof(UV)*4));
+#else
+	    wp[0] = htonl(((U32)iv) >> (sizeof(UV)*4));
+#endif
 	    wp[1] = htonl(iv & 0xffffffff);
 	    ST(0) = sv_2mortal(newSVpvn((char *)wp, 8));
 	} else {
@@ -1149,7 +1153,7 @@
 CvXSUB(cv)
 	B::CV	cv
     CODE:
-	ST(0) = sv_2mortal(newSViv((IV)CvXSUB(cv)));
+	ST(0) = sv_2mortal(newSViv(PTR2IV(CvXSUB(cv))));
 
 
 void
Index: perl5.005_61/ext/B/typemap
Inline Patch
diff -u perl5.005_61/ext/B/typemap:1.1 perl5.005_61/ext/B/typemap:1.3
--- perl5.005_61/ext/B/typemap:1.1	Mon Sep  6 15:29:42 1999
+++ perl5.005_61/ext/B/typemap	Mon Sep 13 10:46:25 1999
@@ -35,7 +35,7 @@
 T_OP_OBJ
 	if (SvROK($arg)) {
 	    IV tmp = SvIV((SV*)SvRV($arg));
-	    $var = ($type) tmp;
+	    $var = INT2PTR($type,tmp);
 	}
 	else
 	    croak(\"$var is not a reference\")
@@ -43,7 +43,7 @@
 T_SV_OBJ
 	if (SvROK($arg)) {
 	    IV tmp = SvIV((SV*)SvRV($arg));
-	    $var = ($type) tmp;
+	    $var = INT2PTR($type,tmp);
 	}
 	else
 	    croak(\"$var is not a reference\")
@@ -51,18 +51,18 @@
 T_MG_OBJ
 	if (SvROK($arg)) {
 	    IV tmp = SvIV((SV*)SvRV($arg));
-	    $var = ($type) tmp;
+	    $var = INT2PTR($type,tmp);
 	}
 	else
 	    croak(\"$var is not a reference\")
 
 OUTPUT
 T_OP_OBJ
-	sv_setiv(newSVrv($arg, cc_opclassname(aTHX_ (OP*)$var)), (IV)$var);
+	sv_setiv(newSVrv($arg, cc_opclassname(aTHX_ (OP*)$var)), PTR2IV($var));
 
 T_SV_OBJ
 	make_sv_object(aTHX_ ($arg), (SV*)($var));
 
 
 T_MG_OBJ
-	sv_setiv(newSVrv($arg, "B::MAGIC"), (IV)$var);
+	sv_setiv(newSVrv($arg, "B::MAGIC"), PTR2IV($var));
Index: perl5.005_61/ext/ByteLoader/bytecode.h
Inline Patch
diff -u perl5.005_61/ext/ByteLoader/bytecode.h:1.1 perl5.005_61/ext/ByteLoader/bytecode.h:1.2
--- perl5.005_61/ext/ByteLoader/bytecode.h:1.1	Mon Sep  6 18:01:19 1999
+++ perl5.005_61/ext/ByteLoader/bytecode.h	Tue Sep  7 11:08:20 1999
@@ -43,7 +43,7 @@
 	BGET_U32(hi);					\
 	BGET_U32(lo);					\
 	if (sizeof(IV) == 8)				\
-	    arg = (IV) (hi << (sizeof(IV)*4) | lo);	\
+	    arg = ((IV)hi << (sizeof(IV)*4) | (IV)lo);	\
 	else if (((I32)hi == -1 && (I32)lo < 0)		\
 		 || ((I32)hi == 0 && (I32)lo >= 0)) {	\
 	    arg = (I32)lo;				\
Index: perl5.005_61/ext/Devel/DProf/DProf.xs
Inline Patch
diff -u perl5.005_61/ext/Devel/DProf/DProf.xs:1.1 perl5.005_61/ext/Devel/DProf/DProf.xs:1.3
--- perl5.005_61/ext/Devel/DProf/DProf.xs:1.1	Mon Sep  6 15:53:00 1999
+++ perl5.005_61/ext/Devel/DProf/DProf.xs	Mon Sep 13 10:46:29 1999
@@ -292,7 +292,7 @@
 	    static U32 lastid;
 	    CV *cv;
 
-	    cv = (CV*)SvIVX(Sub);
+	    cv = INT2PTR(CV*,SvIVX(Sub));
 	    svp = hv_fetch(cv_hash, (char*)&cv, sizeof(CV*), TRUE);
 	    if (!SvOK(*svp)) {
 		GV *gv = CvGV(cv);
@@ -568,7 +568,7 @@
         PUSHMARK( ORIGMARK );
 
 #ifdef G_NODEBUG
-        perl_call_sv( (SV*)SvIV(Sub), GIMME | G_NODEBUG);
+        perl_call_sv( INT2PTR(SV*,SvIV(Sub)), GIMME | G_NODEBUG);
 #else
         curstash = debstash;    /* To disable debugging of perl_call_sv */
 #ifdef PERLDBf_NONAME
Index: perl5.005_61/ext/DynaLoader/dl_dlopen.xs
Inline Patch
diff -u perl5.005_61/ext/DynaLoader/dl_dlopen.xs:1.1 perl5.005_61/ext/DynaLoader/dl_dlopen.xs:1.3
--- perl5.005_61/ext/DynaLoader/dl_dlopen.xs:1.1	Fri Sep  3 16:24:26 1999
+++ perl5.005_61/ext/DynaLoader/dl_dlopen.xs	Mon Sep 13 10:46:35 1999
@@ -166,7 +166,7 @@
     if (RETVAL == NULL)
 	SaveError(aTHX_ "%s",dlerror()) ;
     else
-	sv_setiv( ST(0), (IV)RETVAL);
+	sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void *
@@ -187,7 +187,7 @@
     if (RETVAL == NULL)
 	SaveError(aTHX_ "%s",dlerror()) ;
     else
-	sv_setiv( ST(0), (IV)RETVAL);
+	sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void
Index: perl5.005_61/ext/POSIX/POSIX.xs
Inline Patch
diff -u perl5.005_61/ext/POSIX/POSIX.xs:1.1 perl5.005_61/ext/POSIX/POSIX.xs:1.3
--- perl5.005_61/ext/POSIX/POSIX.xs:1.1	Mon Sep  6 12:20:16 1999
+++ perl5.005_61/ext/POSIX/POSIX.xs	Mon Sep 13 10:46:40 1999
@@ -3274,7 +3274,7 @@
 	}
 	else if (sv_derived_from(ST(2), "POSIX::SigSet")) {
 	    IV tmp = SvIV((SV*)SvRV(ST(2)));
-	    oldsigset = (POSIX__SigSet) tmp;
+	    oldsigset = INT2PTR(POSIX__SigSet,tmp);
 	}
 	else {
 	    New(0, oldsigset, 1, sigset_t);
@@ -3455,10 +3455,12 @@
 	char *unparsed;
     PPCODE:
 	num = strtol(str, &unparsed, base);
-	if (num >= IV_MIN && num <= IV_MAX)
-	    PUSHs(sv_2mortal(newSViv((IV)num)));
-	else
+#if IVSIZE <= LONGSIZE
+	if (num < IV_MIN || num > IV_MAX)
 	    PUSHs(sv_2mortal(newSVnv((double)num)));
+	else
+#endif
+	    PUSHs(sv_2mortal(newSViv((IV)num)));
 	if (GIMME == G_ARRAY) {
 	    EXTEND(SP, 1);
 	    if (unparsed)
Index: perl5.005_61/lib/ExtUtils/typemap
Inline Patch
diff -u perl5.005_61/lib/ExtUtils/typemap:1.1 perl5.005_61/lib/ExtUtils/typemap:1.3
--- perl5.005_61/lib/ExtUtils/typemap:1.1	Fri Sep  3 16:41:51 1999
+++ perl5.005_61/lib/ExtUtils/typemap	Mon Sep 13 10:46:43 1999
@@ -1,4 +1,4 @@
-# $Header: /home/rmb1/misc/CVS/perl5.005_61/lib/ExtUtils/typemap,v 1.1 1999/09/03 15:41:51 rmb1 Exp $ 
+# $Header: /home/rmb1/misc/CVS/perl5.005_61/lib/ExtUtils/typemap,v 1.3 1999/09/13 09:46:43 rmb1 Exp $ 
 # basic C types
 int			T_IV
 unsigned		T_UV
@@ -107,11 +107,11 @@
 T_PV
 	$var = ($type)SvPV($arg,PL_na)
 T_PTR
-	$var = ($type)SvIV($arg)
+	$var = INT2PTR($type,SvIV($arg))
 T_PTRREF
 	if (SvROK($arg)) {
 	    IV tmp = SvIV((SV*)SvRV($arg));
-	    $var = ($type) tmp;
+	    $var = INT2PTR($type,tmp);
 	}
 	else
 	    croak(\"$var is not a reference\")
@@ -132,7 +132,7 @@
 T_PTROBJ
 	if (sv_derived_from($arg, \"${ntype}\")) {
 	    IV tmp = SvIV((SV*)SvRV($arg));
-	    $var = ($type) tmp;
+	    $var = INT2PTR($type,tmp);
 	}
 	else
 	    croak(\"$var is not of type ${ntype}\")
@@ -147,14 +147,14 @@
 T_REFREF
 	if (SvROK($arg)) {
 	    IV tmp = SvIV((SV*)SvRV($arg));
-	    $var = *($type) tmp;
+	    $var = *INT2PTR($type,tmp);
 	}
 	else
 	    croak(\"$var is not a reference\")
 T_REFOBJ
 	if (sv_isa($arg, \"${ntype}\")) {
 	    IV tmp = SvIV((SV*)SvRV($arg));
-	    $var = *($type) tmp;
+	    $var = *INT2PTR($type,tmp);
 	}
 	else
 	    croak(\"$var is not of type ${ntype}\")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant