re PR middle-end/19983 (__builtin_nan should allow 0X as well as 0x)
authorRoger Sayle <roger@eyesopen.com>
Mon, 27 Feb 2006 02:25:57 +0000 (02:25 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Mon, 27 Feb 2006 02:25:57 +0000 (02:25 +0000)
PR middle-end/19983
* real.c (real_nan): Allow both 0x and 0X as hexadecimal prefixes.

* gcc.c-torture/execute/ieee/builtin-nan-1.c: New test case.

From-SVN: r111470

gcc/ChangeLog
gcc/real.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/ieee/builtin-nan-1.c [new file with mode: 0644]

index e8c9d83c6d41fe0aa6420b92859af4eddd88407b..a97c50ade2fbbdbed5794691982313ea94480dbc 100644 (file)
@@ -1,3 +1,8 @@
+2006-02-26  Roger Sayle  <roger@eyesopen.com>
+
+       PR middle-end/19983
+       * real.c (real_nan): Allow both 0x and 0X as hexadecimal prefixes.
+
 2006-02-26  Zdenek Dvorak <dvorakz@suse.cz>
 
        * opts.c (decode_options): Do not handle flag_strength_reduce.
index 5d5b12ff7e82baf54ef2edf8591c5dffb45614dc..c4b6479067f9081043a7125fed615c37876d9300 100644 (file)
@@ -2193,8 +2193,12 @@ real_nan (REAL_VALUE_TYPE *r, const char *str, int quiet,
        str++;
       if (*str == '0')
        {
-         if (*++str == 'x')
-           str++, base = 16;
+         str++;
+         if (*str == 'x' || *str == 'X')
+           {
+             base = 16;
+             str++;
+           }
          else
            base = 8;
        }
index 4d272f7de4c615c865cdac781e549f818b9f76d7..af218682acd2c549c9f19729735645e66e95e70b 100644 (file)
@@ -1,3 +1,8 @@
+2006-02-26  Roger Sayle  <roger@eyesopen.com>
+
+       PR middle-end/19983
+       * gcc.c-torture/execute/ieee/builtin-nan-1.c: New test case.
+
 2006-02-26  Zdenek Dvorak <dvorakz@suse.cz>
 
        * gcc.target/i386/20000614-2.c: Do not use -fno-strength-reduce.
diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/builtin-nan-1.c b/gcc/testsuite/gcc.c-torture/execute/ieee/builtin-nan-1.c
new file mode 100644 (file)
index 0000000..a487dd4
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR middle-end/19983 */
+
+typedef __SIZE_TYPE__ size_t;
+
+extern void abort(void);
+extern int memcmp(const void *, const void *, size_t);
+
+double n1 = __builtin_nan("0x1");
+double n2 = __builtin_nan("0X1");
+
+int main()
+{
+  if (memcmp (&n1, &n2, sizeof(double)))
+    abort();
+  return 0;
+}
+