From eb55ce4b2f1fdaa259518de829d04c7e8855185f Mon Sep 17 00:00:00 2001 From: Kriang Lerdsuwanakij Date: Sat, 5 Oct 2002 12:28:16 +0000 Subject: [PATCH] re PR c++/7804 (bad printing of fp constant in warning message) PR c++/7804 * error.c (dump_expr) [REAL_CST]: Output in decimal format. * g++.dg/other/warning1.C: New test. From-SVN: r57843 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/error.c | 8 +------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/other/warning1.C | 18 ++++++++++++++++++ 4 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/g++.dg/other/warning1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 78ffd60f2a6..e32c5166434 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2002-10-05 Kriang Lerdsuwanakij + + PR c++/7804 + * error.c (dump_expr) [REAL_CST]: Output in decimal format. + 2002-10-03 Mark Mitchell PR c++/7931 diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 7d270b2280c..314cf70df56 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1508,13 +1508,7 @@ dump_expr (t, flags) break; case REAL_CST: - { - const unsigned char *p = (const unsigned char *) &TREE_REAL_CST (t); - size_t i; - strcpy (digit_buffer, "0x"); - for (i = 0; i < sizeof TREE_REAL_CST (t); i++) - sprintf (digit_buffer + 2 + 2*i, "%02x", *p++); - } + REAL_VALUE_TO_DECIMAL (TREE_REAL_CST (t), digit_buffer, -1); output_add_string (scratch_buffer, digit_buffer); break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e3e11ed5e7a..f5cfa355310 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-10-05 Kriang Lerdsuwanakij + + PR c++/7804 + * g++.dg/other/warning1.C: New test. + 2002-10-04 Roger Sayle * gcc.c-torture/execute/20020720-1.x: XFAIL instead of skipping diff --git a/gcc/testsuite/g++.dg/other/warning1.C b/gcc/testsuite/g++.dg/other/warning1.C new file mode 100644 index 00000000000..109fc46aa22 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/warning1.C @@ -0,0 +1,18 @@ +// { dg-do compile } + +// PR c++/7804 +// Floating point formatting in error and warning messages + +extern "C" int printf(const char *, ...); + +struct S +{ + static const float inf = 1.0f / 0.0f; // { dg-warning "1.0|initialization" } + static const float nan = 0.0f / 0.0f; // { dg-warning "0.0|initialization" } +}; + +int main() +{ + printf("%f\n%f\n", S::inf, S::nan); + return 0; +} -- 2.30.2