gimple-ssa-sprintf.c (target_strtol): Rename...
authorMartin Sebor <msebor@redhat.com>
Sat, 23 Feb 2019 20:25:57 +0000 (20:25 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Sat, 23 Feb 2019 20:25:57 +0000 (13:25 -0700)
gcc/ChangeLog:
* gimple-ssa-sprintf.c (target_strtol): Rename...
(target_strtohwi): ...to this.  Handle values up to HOST_WIDE_INT_MAX.
(parse_directive): Adjust to name change.  Use HOST_WIDE_INT_MAX to
check for range error.

From-SVN: r269166

gcc/ChangeLog
gcc/gimple-ssa-sprintf.c

index 78d5e9962bbf063e88029b3d3edd09db0b75f95e..2be8a96355a671ad804b12ae78937c87d5f1f0eb 100644 (file)
@@ -1,3 +1,10 @@
+2019-02-23  Martin Sebor  <msebor@redhat.com>
+
+       * gimple-ssa-sprintf.c (target_strtol): Rename...
+       (target_strtohwi): ...to this.  Handle values up to HOST_WIDE_INT_MAX.
+       (parse_directive): Adjust to name change.  Use HOST_WIDE_INT_MAX to
+       check for range error.
+
 2019-02-23  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR driver/69471
index e40e0db427cf31745a10e74db54f03394efe27f7..4fe206ad08b0109915cc83ebc2f09a3cb093ac05 100644 (file)
@@ -411,12 +411,12 @@ target_to_host (char *hostr, size_t hostsz, const char *targstr)
 }
 
 /* Convert the sequence of decimal digits in the execution character
-   starting at S to a long, just like strtol does.  Return the result
-   and set *END to one past the last converted character.  On range
-   error set ERANGE to the digit that caused it.  */
+   starting at *PS to a HOST_WIDE_INT, analogously to strtol.  Return
+   the result and set *PS to one past the last converted character.
+   On range error set ERANGE to the digit that caused it.  */
 
-static inline long
-target_strtol10 (const char **ps, const char **erange)
+static inline HOST_WIDE_INT
+target_strtowi (const char **ps, const char **erange)
 {
   unsigned HOST_WIDE_INT val = 0;
   for ( ; ; ++*ps)
@@ -427,9 +427,9 @@ target_strtol10 (const char **ps, const char **erange)
          c -= '0';
 
          /* Check for overflow.  */
-         if (val > (LONG_MAX - c) / 10LU)
+         if (val > ((unsigned HOST_WIDE_INT) HOST_WIDE_INT_MAX - c) / 10LU)
            {
-             val = LONG_MAX;
+             val = HOST_WIDE_INT_MAX;
              *erange = *ps;
 
              /* Skip the remaining digits.  */
@@ -3149,7 +3149,7 @@ parse_directive (sprintf_dom_walker::call_info &info,
         width and sort it out later after the next character has
         been seen.  */
       pwidth = pf;
-      width = target_strtol10 (&pf, &werange);
+      width = target_strtowi (&pf, &werange);
     }
   else if (target_to_host (*pf) == '*')
     {
@@ -3231,7 +3231,7 @@ parse_directive (sprintf_dom_walker::call_info &info,
        {
          werange = 0;
          pwidth = pf;
-         width = target_strtol10 (&pf, &werange);
+         width = target_strtowi (&pf, &werange);
        }
       else if (target_to_host (*pf) == '*')
        {
@@ -3264,7 +3264,7 @@ parse_directive (sprintf_dom_walker::call_info &info,
       if (ISDIGIT (target_to_host (*pf)))
        {
          pprec = pf;
-         precision = target_strtol10 (&pf, &perange);
+         precision = target_strtowi (&pf, &perange);
        }
       else if (target_to_host (*pf) == '*')
        {
@@ -3418,7 +3418,7 @@ parse_directive (sprintf_dom_walker::call_info &info,
     }
   else
     {
-      if (width == LONG_MAX && werange)
+      if (width == HOST_WIDE_INT_MAX && werange)
        {
          size_t begin = dir.beg - info.fmtstr + (pwidth - pcnt);
          size_t caret = begin + (werange - pcnt);
@@ -3451,7 +3451,7 @@ parse_directive (sprintf_dom_walker::call_info &info,
     }
   else
     {
-      if (precision == LONG_MAX && perange)
+      if (precision == HOST_WIDE_INT_MAX && perange)
        {
          size_t begin = dir.beg - info.fmtstr + (pprec - pcnt) - 1;
          size_t caret = dir.beg - info.fmtstr + (perange - pcnt) - 1;