From: Robert Griesemer Date: Mon, 8 May 2017 20:32:18 +0000 (-0700) Subject: cmd/compile: better errors for float constants with large exponents X-Git-Tag: go1.9beta1~314 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=bcf2d74ce835016d8dde28a64cbc4b49b5b449c9;p=gostls13.git cmd/compile: better errors for float constants with large exponents Also: Removed misleading comment. Fixes #20232. Change-Id: I0b141b1360ac53267b7ebfcec7a2e2a238f3f46c Reviewed-on: https://go-review.googlesource.com/42930 Run-TryBot: Robert Griesemer TryBot-Result: Gobot Gobot Reviewed-by: Matthew Dempsky --- diff --git a/src/cmd/compile/internal/gc/mpfloat.go b/src/cmd/compile/internal/gc/mpfloat.go index a3785a045c..8d7036ba19 100644 --- a/src/cmd/compile/internal/gc/mpfloat.go +++ b/src/cmd/compile/internal/gc/mpfloat.go @@ -176,25 +176,14 @@ func (a *Mpflt) Neg() { } } -// -// floating point input -// required syntax is [+-]d*[.]d*[e[+-]d*] or [+-]0xH*[e[+-]d*] -// func (a *Mpflt) SetString(as string) { for len(as) > 0 && (as[0] == ' ' || as[0] == '\t') { as = as[1:] } - f, ok := a.Val.SetString(as) - if !ok { - // At the moment we lose precise error cause; - // the old code additionally distinguished between: - // - malformed hex constant - // - decimal point in hex constant - // - constant exponent out of range - // - decimal point and binary point in constant - // TODO(gri) use different conversion function or check separately - yyerror("malformed constant: %s", as) + f, _, err := a.Val.Parse(as, 10) + if err != nil { + yyerror("malformed constant: %s (%v)", as, err) a.Val.SetFloat64(0) return } diff --git a/src/go/types/stdlib_test.go b/src/go/types/stdlib_test.go index ed09e4644b..4b6b1f0fad 100644 --- a/src/go/types/stdlib_test.go +++ b/src/go/types/stdlib_test.go @@ -159,6 +159,7 @@ func TestStdFixed(t *testing.T) { "issue16369.go", // go/types handles this correctly - not an issue "issue18459.go", // go/types doesn't check validity of //go:xxx directives "issue18882.go", // go/types doesn't check validity of //go:xxx directives + "issue20232.go", // go/types handles larger constants than gc ) } diff --git a/test/fixedbugs/issue20232.go b/test/fixedbugs/issue20232.go new file mode 100644 index 0000000000..f91c74936b --- /dev/null +++ b/test/fixedbugs/issue20232.go @@ -0,0 +1,11 @@ +// errorcheck + +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +const _ = 6e5518446744 // ERROR "malformed constant: 6e5518446744 \(exponent overflow\)" +const _ = 1e-1000000000 +const _ = 1e+1000000000 // ERROR "constant too large"