From: Iain Buclaw <ibuclaw@gdcproject.org>
To: GDB Patches <gdb-patches@sourceware.org>
Subject: [PATCH] PR 18669: Remove use of strtod in libiberty/d-demangle.c
Date: Tue, 04 Aug 2015 14:24:00 -0000 [thread overview]
Message-ID: <CABOHX+ecW-F6sMWF-OMH+Ojxxm+=EpaY5b-OEWhU1yNoX1kTng@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 198 bytes --]
Also submitted to upstream GCC.
https://gcc.gnu.org/ml/gcc-patches/2015-08/msg00192.html
Have tested this against the gdb dlang testsuite and observed no
failing tests as a result.
Regards
Iain.
[-- Attachment #2: pr18669.patch --]
[-- Type: text/x-patch, Size: 3486 bytes --]
2015-08-04 Iain Buclaw <ibuclaw@gdcproject.org>
* d-demangle.c (dlang_parse_real): Remove call to strtod.
(strtod): Remove declaration.
* testsuite/d-demangle-expected: Update float and complex literal
tests to check correct hexadecimal demangling.
--- a/libiberty/d-demangle.c
+++ b/libiberty/d-demangle.c
@@ -28,7 +28,7 @@ If not, see <http://www.gnu.org/licenses/>. */
/* This file exports one function; dlang_demangle.
- This file imports strtol and strtod for decoding mangled literals. */
+ This file imports strtol for decoding mangled literals. */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -44,7 +44,6 @@ If not, see <http://www.gnu.org/licenses/>. */
#include <stdlib.h>
#else
extern long strtol (const char *nptr, char **endptr, int base);
-extern double strtod (const char *nptr, char **endptr);
#endif
#include <demangle.h>
@@ -970,8 +969,6 @@ dlang_parse_real (string *decl, const char *mangled)
{
char buffer[64];
int len = 0;
- double value;
- char *endptr;
/* Handle NAN and +-INF. */
if (strncmp (mangled, "NAN", 3) == 0)
@@ -1035,14 +1032,10 @@ dlang_parse_real (string *decl, const char *mangled)
mangled++;
}
- /* Convert buffer from hexadecimal to floating-point. */
+ /* Write out the demangled hexadecimal, rather than trying to
+ convert the buffer into a floating-point value. */
buffer[len] = '\0';
- value = strtod (buffer, &endptr);
-
- if (endptr == NULL || endptr != (buffer + len))
- return NULL;
-
- len = snprintf (buffer, sizeof(buffer), "%#g", value);
+ len = strlen (buffer);
string_appendn (decl, buffer, len);
return mangled;
}
--- a/libiberty/testsuite/d-demangle-expected
+++ b/libiberty/testsuite/d-demangle-expected
@@ -719,19 +719,19 @@ demangle.test!('\U000186a0')
#
--format=dlang
_D8demangle17__T4testVde0A8P6Zv
-demangle.test!(42.0000)
+demangle.test!(0x0.A8p6)
#
--format=dlang
_D8demangle16__T4testVdeA8P2Zv
-demangle.test!(42.0000)
+demangle.test!(0xA.8p2)
#
--format=dlang
_D8demangle18__T4testVdeN0A8P6Zv
-demangle.test!(-42.0000)
+demangle.test!(-0x0.A8p6)
#
--format=dlang
_D8demangle31__T4testVde0F6E978D4FDF3B646P7Zv
-demangle.test!(123.456)
+demangle.test!(0x0.F6E978D4FDF3B646p7)
#
--format=dlang
_D8demangle15__T4testVdeNANZv
@@ -747,27 +747,27 @@ demangle.test!(-Inf)
#
--format=dlang
_D8demangle23__T4testVfe0FFFFFFP128Zv
-demangle.test!(3.40282e+38)
+demangle.test!(0x0.FFFFFFp128)
#
--format=dlang
_D8demangle32__T4testVde0FFFFFFFFFFFFF8P1024Zv
-demangle.test!(1.79769e+308)
+demangle.test!(0x0.FFFFFFFFFFFFF8p1024)
#
--format=dlang
_D8demangle19__T4testVfe08PN125Zv
-demangle.test!(1.17549e-38)
+demangle.test!(0x0.8p-125)
#
--format=dlang
_D8demangle20__T4testVde08PN1021Zv
-demangle.test!(2.22507e-308)
+demangle.test!(0x0.8p-1021)
#
--format=dlang
_D8demangle51__T4testVrc0C4CCCCCCCCCCCCCDP4c0B666666666666666P6Zv
-demangle.test!(12.3000+45.6000i)
+demangle.test!(0x0.C4CCCCCCCCCCCCCDp4+0x0.B666666666666666p6i)
#
--format=dlang
_D8demangle52__T4testVrcN0C4CCCCCCCCCCCCCDP4c0B666666666666666P6Zv
-demangle.test!(-12.3000+45.6000i)
+demangle.test!(-0x0.C4CCCCCCCCCCCCCDp4+0x0.B666666666666666p6i)
#
--format=dlang
_D8demangle22__T4testVG3ua3_616263Zv
@@ -787,7 +787,7 @@ demangle.test!([1, 2, 3, 4])
#
--format=dlang
_D8demangle25__T4testVAdA2e08P1eN08P1Zv
-demangle.test!([1.00000, -1.00000])
+demangle.test!([0x0.8p1, -0x0.8p1])
#
--format=dlang
_D8demangle23__T4testVHiiA2i1i2i3i4Zv
next reply other threads:[~2015-08-04 14:24 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-04 14:24 Iain Buclaw [this message]
2015-08-04 17:07 ` Joel Brobecker
2015-08-04 17:16 ` Iain Buclaw
2015-08-04 17:24 ` Joel Brobecker
2015-08-05 15:51 ` Iain Buclaw
2015-08-11 6:48 ` Iain Buclaw
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CABOHX+ecW-F6sMWF-OMH+Ojxxm+=EpaY5b-OEWhU1yNoX1kTng@mail.gmail.com' \
--to=ibuclaw@gdcproject.org \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox