Opened 6 years ago

Closed 6 years ago

#7034 closed bug (fixed)

reading a large double results in zero with ghc-7.4.2

Reported by: maeder Owned by: pcapriotti
Priority: normal Milestone: 7.6.1
Component: Compiler Version: 7.4.2
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case: T7034
Blocked By: Blocking:
Related Tickets: #5692 Differential Rev(s):
Wiki Page:


Prelude> read "1E100000000000000000000" :: Double
Prelude> read "1E1000000000000000000000" :: Double

This was probably introduced by the fix for #5688. Note that #3897 is still open.

Prelude> 1E1000000000000000000000 :: Double

takes too long and sometimes results in 0.0 or in a memory crash

Change History (4)

comment:1 Changed 6 years ago by maeder

It seems that the exponent is parsed as Int without checking overflow

Prelude> 100000000000000000000 :: Int
Prelude> 1000000000000000000000 :: Int

comment:2 Changed 6 years ago by pcapriotti

difficulty: Unknown
Owner: set to pcapriotti

Thanks for the report.

comment:3 Changed 6 years ago by pcapriotti

Milestone: 7.6.1

comment:4 Changed 6 years ago by pcapriotti

Resolution: fixed
Status: newclosed
Test Case: T7034

Fixed by:

commit 4226bae42fdd666c15190ac2f8784547d3fbad5f
Author: Paolo Capriotti <>
Date:   Mon Jul 2 12:54:57 2012 +0100

    Fix parsing of RealFloat with huge exponents (#7034).
    Ensure numberToRangedRational returns Nothing immediately if the
    exponent is outside Int range, so that we avoid an integer overflow

This only covers the failure for read in base.

The failure in the lexer is tracked by #5692.

Note: See TracTickets for help on using tickets.