From 2d9a5bc18268a6c81e8cc69c2a036c5bc9c3875d Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Mon, 11 Apr 2016 02:06:48 -0700 Subject: [PATCH] fix Issue 15861 - [REG 2.069] Wrong double-to-string conversion with -O --- src/backend/cgelem.c | 5 ++--- test/runnable/test15861.d | 10 ++++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 test/runnable/test15861.d diff --git a/src/backend/cgelem.c b/src/backend/cgelem.c index 53ea52c7a958..5a149f9194e6 100644 --- a/src/backend/cgelem.c +++ b/src/backend/cgelem.c @@ -3498,12 +3498,11 @@ STATIC elem * eleq(elem *e, goal_t goal) if (tysize(e1->Ety) == 2 * REGSIZE && e1->Eoper == OPvar && e2->Eoper == OPvar && - goal == GOALnone + goal == GOALnone && + !tyfloating(e1->Ety) ) { tym_t ty = (REGSIZE == 8) ? TYllong : TYint; - if (tyfloating(e1->Ety) && REGSIZE >= 4) - ty = (REGSIZE == 8) ? TYdouble : TYfloat; ty |= e1->Ety & ~mTYbasic; e2->Ety = ty; e->Ety = ty; diff --git a/test/runnable/test15861.d b/test/runnable/test15861.d new file mode 100644 index 000000000000..93b94c4c14b7 --- /dev/null +++ b/test/runnable/test15861.d @@ -0,0 +1,10 @@ +// REQUIRED_ARGS: -O +// https://issues.dlang.org/show_bug.cgi?id=15861 + +import std.format; + +void main() +{ + assert(format("%.18g", 4286853117.0) == "4286853117"); +} +