mirror of
https://github.com/golang/go
synced 2024-11-02 11:50:30 +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
3 changed files with 15 additions and 14 deletions
|
@ -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) {
|
func (a *Mpflt) SetString(as string) {
|
||||||
for len(as) > 0 && (as[0] == ' ' || as[0] == '\t') {
|
for len(as) > 0 && (as[0] == ' ' || as[0] == '\t') {
|
||||||
as = as[1:]
|
as = as[1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
f, ok := a.Val.SetString(as)
|
f, _, err := a.Val.Parse(as, 10)
|
||||||
if !ok {
|
if err != nil {
|
||||||
// At the moment we lose precise error cause;
|
yyerror("malformed constant: %s (%v)", as, err)
|
||||||
// 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)
|
|
||||||
a.Val.SetFloat64(0)
|
a.Val.SetFloat64(0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,6 +159,7 @@ func TestStdFixed(t *testing.T) {
|
||||||
"issue16369.go", // go/types handles this correctly - not an issue
|
"issue16369.go", // go/types handles this correctly - not an issue
|
||||||
"issue18459.go", // go/types doesn't check validity of //go:xxx directives
|
"issue18459.go", // go/types doesn't check validity of //go:xxx directives
|
||||||
"issue18882.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