PATCH: [perl #133037] new warning in inline.h
authorKarl Williamson <khw@cpan.org>
Thu, 5 Apr 2018 14:27:32 +0000 (08:27 -0600)
committerKarl Williamson <khw@cpan.org>
Sun, 8 Apr 2018 17:29:52 +0000 (11:29 -0600)
This just uses an intermediate variable of the correct type to store the
result, and then casts it, as the value is guaranteed to be a number
between 0 and 7.

inline.h

index 8c20e75..dc74c2d 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -641,9 +641,11 @@ S_variant_under_utf8_count(const U8* const s, const U8* const e)
         /* Process per-word as long as we have at least a full word left */
         do {    /* Commit 03c1e4ab1d6ee9062fb3f94b0ba31db6698724b1 contains an
                    explanation of how this works */
-            count += ((((* (PERL_UINTMAX_T *) x) & PERL_VARIANTS_WORD_MASK) >> 7)
+            PERL_UINTMAX_T increment
+                = ((((* (PERL_UINTMAX_T *) x) & PERL_VARIANTS_WORD_MASK) >> 7)
                       * PERL_COUNT_MULTIPLIER)
                     >> ((PERL_WORDSIZE - 1) * CHARBITS);
+            count += (Size_t) increment;
             x += PERL_WORDSIZE;
         } while (x + PERL_WORDSIZE <= e);
     }