Don't use variant_byte_number on MSVC6
authorKarl Williamson <khw@cpan.org>
Sun, 28 Jan 2018 17:02:11 +0000 (10:02 -0700)
committerKarl Williamson <khw@cpan.org>
Mon, 29 Jan 2018 23:33:03 +0000 (16:33 -0700)
See [perl #132766]

embed.fnc
embed.h
inline.h
proto.h
regexec.c

index c21272d..e16c8a6 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -806,7 +806,7 @@ AndmoR      |bool   |is_utf8_invariant_string|NN const U8* const s              \
 AnidR  |bool   |is_utf8_invariant_string_loc|NN const U8* const s          \
                |STRLEN len                                                 \
                |NULLOK const U8 ** ep
-#ifndef EBCDIC
+#if ! defined(EBCDIC) && ! defined USING_MSVC6
 AniR   |unsigned int|_variant_byte_number|PERL_UINTMAX_T word
 #endif
 #if defined(PERL_CORE) || defined(PERL_EXT)
diff --git a/embed.h b/embed.h
index c968191..008b806 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define whichsig_sv(a)         Perl_whichsig_sv(aTHX_ a)
 #define wrap_keyword_plugin(a,b)       Perl_wrap_keyword_plugin(aTHX_ a,b)
 #define wrap_op_checker(a,b,c) Perl_wrap_op_checker(aTHX_ a,b,c)
+#if ! defined(EBCDIC) && ! defined USING_MSVC6
+#define _variant_byte_number   S__variant_byte_number
+#endif
 #if !(defined(HAS_MEMMEM))
 #define ninstr                 Perl_ninstr
 #endif
 #if !(defined(HAS_SIGACTION) && defined(SA_SIGINFO))
 #define csighandler            Perl_csighandler
 #endif
-#if !defined(EBCDIC)
-#define _variant_byte_number   S__variant_byte_number
-#endif
 #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
 #define my_chsize(a,b)         Perl_my_chsize(aTHX_ a,b)
 #endif
index 976d471..769e053 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -401,6 +401,8 @@ S_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep)
                                       | ( ( (PTR2nat(x)                       \
                                            & PERL_WORD_BOUNDARY_MASK) >> 2))))
 
+#  ifndef USING_MSVC6
+
     /* Do the word-at-a-time iff there is at least one usable full word.  That
      * means that after advancing to a word boundary, there still is at least a
      * full word left.  The number of bytes needed to advance is 'wordsize -
@@ -458,7 +460,8 @@ S_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep)
         } while (x + PERL_WORDSIZE <= send);
     }
 
-#endif
+#  endif    /* End of ! MSVC6 */
+#endif      /* End of ! EBCDIC */
 
     /* Process per-byte */
     while (x < send) {
@@ -476,7 +479,10 @@ S_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep)
     return TRUE;
 }
 
-#ifndef EBCDIC
+#if ! defined(EBCDIC) && ! defined(USING_MSVC6)
+
+/* Apparent compiler error with MSVC6, so can't use this function.  All callers
+ * to it must be compiled to use the EBCDIC fallback on MSVC6 */
 
 PERL_STATIC_INLINE unsigned int
 S__variant_byte_number(PERL_UINTMAX_T word)
diff --git a/proto.h b/proto.h
index 1211e57..911b961 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -3803,6 +3803,13 @@ PERL_CALLCONV int        Perl_yylex(pTHX);
 PERL_CALLCONV int      Perl_yyparse(pTHX_ int gramtype);
 PERL_CALLCONV void     Perl_yyquit(pTHX);
 PERL_CALLCONV void     Perl_yyunlex(pTHX);
+#if ! defined(EBCDIC) && ! defined USING_MSVC6
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE unsigned int        S__variant_byte_number(PERL_UINTMAX_T word)
+                       __attribute__warn_unused_result__;
+#endif
+
+#endif
 #if ! defined(HAS_MEMRCHR) && (defined(PERL_CORE) || defined(PERL_EXT))
 #ifndef PERL_NO_INLINE_FUNCTIONS
 PERL_STATIC_INLINE void *      S_my_memrchr(const char * s, const char c, const STRLEN len);
@@ -3857,13 +3864,6 @@ PERL_CALLCONV_NO_RET int Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg)
 #define PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET    \
        assert(sv); assert(mg)
 
-#endif
-#if !defined(EBCDIC)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE unsigned int        S__variant_byte_number(PERL_UINTMAX_T word)
-                       __attribute__warn_unused_result__;
-#endif
-
 #endif
 #if !defined(HAS_GETENV_LEN)
 PERL_CALLCONV char*    Perl_getenv_len(pTHX_ const char *env_elem, unsigned long *len);
index 5a1c5ef..530f1d6 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -560,7 +560,7 @@ S_find_next_ascii(char * s, const char * send, const bool utf8_target)
 
     PERL_ARGS_ASSERT_FIND_NEXT_ASCII;
 
-#ifndef EBCDIC
+#if ! defined(EBCDIC) && ! defined(USING_MSVC6)
 
     if ((STRLEN) (send - s) >= PERL_WORDSIZE