mirror of
https://github.com/golang/go
synced 2024-09-05 16:04:50 +00:00
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 <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
88672de7af
commit
bcf2d74ce8
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
|
||||
|
|
11
test/fixedbugs/issue20232.go
Normal file
11
test/fixedbugs/issue20232.go
Normal file
|
@ -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"
|
Loading…
Reference in a new issue