• Alberto Donizetti's avatar
    cmd/compile: fix misleading "truncated to int" messages · e99dafc4
    Alberto Donizetti authored
    When defining an int const, the compiler tries to cast the RHS
    expression to int. The cast may fail for three reasons:
    
      1. expr is an integer constant that overflows int
      2. expr is a floating point constant
      3. expr is a complex constant, or not a number
    
    In the second case, in order to print a sensible error message, we
    must distinguish between a floating point constant that should be
    included in the error message and a floating point constant that
    cannot be reasonably formatted for inclusion in an error message.
    
    For example, in:
    
      const a int = 1.1
      const b int = 1 + 1e-100
    
    a is in the former group, while b is in the latter, since the floating
    point value resulting from the evaluation of the rhs of the assignment
    (1.00...01) is too long to be fully printed in an error message, and
    cannot be shortened without making the error message misleading
    (rounding or truncating it would result in a "1", which looks like an
    integer constant, and it makes little sense in an error message about
    an invalid floating point expression).
    
    To fix this problem, we try to format the float value using fconv
    (which is used by the error reporting mechanism to format float
    arguments), and then parse the resulting string back to a
    big.Float. If the result is an integer, we assume that expr is a float
    value that cannot be reasonably be formatted as a string, and we emit
    an error message that does not include its string representation.
    
    Also, change the error message for overflows to a more conservative
    "integer too large", which does not mention overflows that are only
    caused by an internal implementation restriction.
    
    Also, change (*Mpint) SetFloat so that it returns a bool (instead of
    0/-1 for success/failure).
    
    Fixes #11371
    
    Change-Id: Ibbc73e2ed2eaf41f07827b0649d0eb637150ecaa
    Reviewed-on: https://go-review.googlesource.com/35411
    Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
    Run-TryBot: Robert Griesemer <gri@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
    e99dafc4
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
context Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
plugin Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
vendor/golang_org/x Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
cmp.bash Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
naclmake.bash Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...