From 53f1b560dbbc8485efa92063ef1e953604b40469 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Mon, 27 Feb 2006 02:25:57 +0000 Subject: [PATCH] re PR middle-end/19983 (__builtin_nan should allow 0X as well as 0x) 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 | 5 +++++ gcc/real.c | 8 ++++++-- gcc/testsuite/ChangeLog | 5 +++++ .../gcc.c-torture/execute/ieee/builtin-nan-1.c | 17 +++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/builtin-nan-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e8c9d83c6d4..a97c50ade2f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-02-26 Roger Sayle + + PR middle-end/19983 + * real.c (real_nan): Allow both 0x and 0X as hexadecimal prefixes. + 2006-02-26 Zdenek Dvorak * opts.c (decode_options): Do not handle flag_strength_reduce. diff --git a/gcc/real.c b/gcc/real.c index 5d5b12ff7e8..c4b6479067f 100644 --- a/gcc/real.c +++ b/gcc/real.c @@ -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; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4d272f7de4c..af218682acd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-02-26 Roger Sayle + + PR middle-end/19983 + * gcc.c-torture/execute/ieee/builtin-nan-1.c: New test case. + 2006-02-26 Zdenek Dvorak * 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 index 00000000000..a487dd4afd9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/builtin-nan-1.c @@ -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; +} +