This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Protect against ptrdiff_t not being available.
authorBrian Fraser <fraserbn@gmail.com>
Fri, 30 May 2014 23:10:20 +0000 (01:10 +0200)
committerBrian Fraser <fraserbn@gmail.com>
Thu, 12 Jun 2014 22:00:31 +0000 (00:00 +0200)
This is primarily for pedantic builds; ptrdiff_t is now standard,
and had already been in use in the core without guards.

16 files changed:
Configure
Cross/config.sh-arm-linux
NetWare/config.wc
Porting/config.sh
config_h.SH
configure.com
perl.h
plan9/config_sh.sample
sv.c
symbian/config.sh
uconfig.h
uconfig.sh
uconfig64.sh
win32/config.ce
win32/config.gc
win32/config.vc

index ee32f88..c84249f 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -934,6 +934,7 @@ i_sysin=''
 i_poll=''
 i_prot=''
 i_pthread=''
+d_ptrdiff_t=''
 d_pwage=''
 d_pwchange=''
 d_pwclass=''
@@ -16358,6 +16359,25 @@ $rm_try
 set d_off64_t
 eval $setvar
 
+: check for ptrdiff_t
+echo " "
+echo "Checking to see if you have ptrdiff_t..." >&4
+$cat >try.c <<EOCP
+#include <stddef.h>
+int main() { ptrdiff_t x = 7; }
+EOCP
+set try
+if eval $compile; then
+       val="$define"
+       echo "You have ptrdiff_t."
+else
+       val="$undef"
+       echo "You do not have ptrdiff_t."
+fi
+$rm_try
+set d_ptrdiff_t
+eval $setvar
+
 : how to create joinable pthreads
 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
        echo " "
@@ -23289,6 +23309,7 @@ d_pseudofork='$d_pseudofork'
 d_pthread_atfork='$d_pthread_atfork'
 d_pthread_attr_setscope='$d_pthread_attr_setscope'
 d_pthread_yield='$d_pthread_yield'
+d_ptrdiff_t='$d_ptrdiff_t'
 d_pwage='$d_pwage'
 d_pwchange='$d_pwchange'
 d_pwclass='$d_pwclass'
index f703258..7a4773d 100644 (file)
@@ -373,6 +373,7 @@ d_pseudofork='undef'
 d_pthread_atfork='undef'
 d_pthread_attr_setscope='define'
 d_pthread_yield='undef'
+d_ptrdiff_t='define'
 d_pwage='undef'
 d_pwchange='undef'
 d_pwclass='undef'
index 3824d99..9dcb1e4 100644 (file)
@@ -362,6 +362,7 @@ d_pseudofork='undef'
 d_pthread_atfork='undef'
 d_pthread_attr_setscope='undef'
 d_pthread_yield='undef'
+d_ptrdiff_t='define'
 d_pwage='undef'
 d_pwchange='undef'
 d_pwclass='undef'
index 2c1c25d..372acb5 100644 (file)
@@ -384,6 +384,7 @@ d_pseudofork='undef'
 d_pthread_atfork='undef'
 d_pthread_attr_setscope='define'
 d_pthread_yield='undef'
+d_ptrdiff_t='define'
 d_pwage='undef'
 d_pwchange='undef'
 d_pwclass='undef'
index 7301ef4..c320df3 100755 (executable)
@@ -3844,6 +3844,11 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_off64_t    HAS_OFF64_T             /**/
 
+/* HAS_PTRDIFF_T:
+ *     This symbol will be defined if the C compiler supports ptrdiff_t.
+ */
+#$d_ptrdiff_t  HAS_PTRDIFF_T                   /**/
+
 /* HAS_PRCTL:
  *     This symbol, if defined, indicates that the prctl routine is
  *     available to set process title.
index 4d8a4f1..abea303 100644 (file)
@@ -6137,6 +6137,7 @@ $ WC "d_pthread_atfork='undef'"
 $ WC "d_pthread_attr_setscope='" + d_pthread_attr_setscope + "'"
 $ WC "d_pthread_yield='" + d_pthread_yield + "'"
 $ WC "d_pthreads_created_joinable='" + d_pthreads_created_joinable + "'"
+$ WC "d_ptrdiff_t='define'"
 $ WC "d_pwage='undef'"
 $ WC "d_pwchange='undef'"
 $ WC "d_pwclass='undef'"
diff --git a/perl.h b/perl.h
index 82c1d91..7b40126 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -879,6 +879,11 @@ EXTERN_C int usleep(unsigned int);
 #   define STRUCT_OFFSET(s,m)  (Size_t)(&(((s *)0)->m))
 #endif
 
+/* ptrdiff_t is C11, so undef it under pedantic builds */
+#ifdef PERL_GCC_PEDANTIC
+#   undef HAS_PTRDIFF_T
+#endif
+
 #ifndef __SYMBIAN32__
 #  if defined(I_STRING) || defined(__cplusplus)
 #     include <string.h>
index fdfba5c..a80d1fb 100644 (file)
@@ -373,6 +373,7 @@ d_pseudofork='undef'
 d_pthread_atfork='undef'
 d_pthread_attr_setscope='undef'
 d_pthread_yield='undef'
+d_ptrdiff_t='undef'
 d_pwage='undef'
 d_pwchange='undef'
 d_pwclass='undef'
diff --git a/sv.c b/sv.c
index b1f18ca..0a4114b 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -11210,7 +11210,9 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
                case 'l':       iv = va_arg(*args, long); break;
                case 'V':       iv = va_arg(*args, IV); break;
                case 'z':       iv = va_arg(*args, SSize_t); break;
+#ifdef HAS_PTRDIFF_T
                case 't':       iv = va_arg(*args, ptrdiff_t); break;
+#endif
                default:        iv = va_arg(*args, int); break;
 #ifdef HAS_C99
                case 'j':       iv = va_arg(*args, intmax_t); break;
@@ -11308,7 +11310,9 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
                case 'l':  uv = va_arg(*args, unsigned long); break;
                case 'V':  uv = va_arg(*args, UV); break;
                case 'z':  uv = va_arg(*args, Size_t); break;
+#ifdef HAS_PTRDIFF_T
                case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
+#endif
 #ifdef HAS_C99
                case 'j':  uv = va_arg(*args, uintmax_t); break;
 #endif
@@ -11644,7 +11648,9 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
                case 'l':       *(va_arg(*args, long*)) = i; break;
                case 'V':       *(va_arg(*args, IV*)) = i; break;
                case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
+#ifdef HAS_PTRDIFF_T
                case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
+#endif
 #ifdef HAS_C99
                case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
 #endif
index fc588c3..d86c71e 100644 (file)
@@ -319,6 +319,7 @@ d_pseudofork='undef'
 d_pthread_atfork='undef'
 d_pthread_attr_setscope='undef'
 d_pthread_yield='undef'
+d_ptrdiff_t='define'
 d_pwage='undef'
 d_pwchange='undef'
 d_pwclass='undef'
index 39a1e58..4f9127e 100644 (file)
--- a/uconfig.h
+++ b/uconfig.h
  */
 /*#define      HAS_OFF64_T             / **/
 
+/* HAS_PTRDIFF_T:
+ *     This symbol will be defined if the C compiler supports ptrdiff_t.
+ */
+#define        HAS_PTRDIFF_T                   /**/
+
 /* HAS_PRCTL:
  *     This symbol, if defined, indicates that the prctl routine is
  *     available to set process title.
 #endif
 
 /* Generated from:
- * 31ce7cefcb0f86eaa5c45e7b007073a86b0a7ec8367f1f489e0839f2033a90fc config_h.SH
- * d4c6d7b05a17c792e1a29260fa58783614c7895971bc5a3ab830a39303a2be03 uconfig.sh
+ * 4cb92587c221c8c3b0fe3f9c2fbab1293d6798f426cca6a0be90491d0fd04185 config_h.SH
+ * 87a71147b46045d5a12e0e15b269db96e2af06d021d25ab516cfe4d0efb6b87b uconfig.sh
  * ex: set ro: */
index 5c1a5d6..0dc4171 100644 (file)
@@ -312,6 +312,7 @@ d_pseudofork='undef'
 d_pthread_atfork='undef'
 d_pthread_attr_setscope='undef'
 d_pthread_yield='undef'
+d_ptrdiff_t='define'
 d_pwage='undef'
 d_pwchange='undef'
 d_pwclass='undef'
index 748dfc0..a4adccb 100644 (file)
@@ -313,6 +313,7 @@ d_pseudofork='undef'
 d_pthread_atfork='undef'
 d_pthread_attr_setscope='undef'
 d_pthread_yield='undef'
+d_ptrdiff_t='define'
 d_pwage='undef'
 d_pwchange='undef'
 d_pwclass='undef'
index 696f91d..0601162 100644 (file)
@@ -360,6 +360,7 @@ d_pseudofork='undef'
 d_pthread_atfork='undef'
 d_pthread_attr_setscope='undef'
 d_pthread_yield='undef'
+d_ptrdiff_t='define'
 d_pwage='undef'
 d_pwchange='undef'
 d_pwclass='undef'
index a92880d..3150e4a 100644 (file)
@@ -361,6 +361,7 @@ d_pseudofork='undef'
 d_pthread_atfork='undef'
 d_pthread_attr_setscope='undef'
 d_pthread_yield='undef'
+d_ptrdiff_t='define'
 d_pwage='undef'
 d_pwchange='undef'
 d_pwclass='undef'
index 77c8fa1..d7f67d0 100644 (file)
@@ -361,6 +361,7 @@ d_pseudofork='undef'
 d_pthread_atfork='undef'
 d_pthread_attr_setscope='undef'
 d_pthread_yield='undef'
+d_ptrdiff_t='define'
 d_pwage='undef'
 d_pwchange='undef'
 d_pwclass='undef'