opts-common.c (integral_argument): Add support for hexadecimal command option integer...
authorChung-Lin Tang <cltang@codesourcery.com>
Mon, 16 Dec 2013 04:28:24 +0000 (04:28 +0000)
committerChung-Lin Tang <cltang@gcc.gnu.org>
Mon, 16 Dec 2013 04:28:24 +0000 (04:28 +0000)
2013-12-16  Chung-Lin Tang  <cltang@codesourcery.com>

* opts-common.c (integral_argument): Add support for
hexadecimal command option integer arguments. Update comments.

From-SVN: r206008

gcc/ChangeLog
gcc/opts-common.c

index 023a229..8b61a44 100644 (file)
@@ -1,3 +1,8 @@
+2013-12-16  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       * opts-common.c (integral_argument): Add support for
+       hexadecimal command option integer arguments. Update comments.
+
 2013-12-14   Jan Hubicka  <jh@suse.cz>
 
        PR ipa/59265
index 9d186a7..161ddf0 100644 (file)
@@ -147,7 +147,7 @@ find_opt (const char *input, unsigned int lang_mask)
   return match_wrong_lang;
 }
 
-/* If ARG is a non-negative integer made up solely of digits, return its
+/* If ARG is a non-negative decimal or hexadecimal integer, return its
    value, otherwise return -1.  */
 
 int
@@ -161,6 +161,17 @@ integral_argument (const char *arg)
   if (*p == '\0')
     return atoi (arg);
 
+  /* It wasn't a decimal number - try hexadecimal.  */
+  if (arg[0] == '0' && (arg[1] == 'x' || arg[1] == 'X'))
+    {
+      p = arg + 2;
+      while (*p && ISXDIGIT (*p))
+       p++;
+
+      if (p != arg + 2 && *p == '\0')
+       return strtol (arg, NULL, 16);
+    }
+
   return -1;
 }