Whoever called toint() is expecting the {Mpint, Mpflt, Mpcplx} arg to
be converted to an integer expression, so it never makes sense to
report an error as "constant X truncated to real".
Fixes #11580
Change-Id: Iadcb105f0802358a7f77188c2b1e63fe80c5580c
Reviewed-on: https://go-review.googlesource.com/34638
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
case *Mpcplx:
i := new(Mpint)
- if i.SetFloat(&u.Real) < 0 {
+ if i.SetFloat(&u.Real) < 0 || u.Imag.CmpFloat64(0) != 0 {
yyerror("constant %v%vi truncated to integer", fconv(&u.Real, FmtSharp), fconv(&u.Imag, FmtSharp|FmtSign))
}
- if u.Imag.CmpFloat64(0) != 0 {
- yyerror("constant %v%vi truncated to real", fconv(&u.Real, FmtSharp), fconv(&u.Imag, FmtSharp|FmtSign))
- }
+
v.U = i
}
var d []int = []int{-2.0: 2} // ERROR "must be non-negative integer constant"
var e []int = []int{3 + 0i: 3}
-var f []int = []int{3i: 3} // ERROR "truncated to real"
+var f []int = []int{3i: 3} // ERROR "truncated to integer"
var g []int = []int{"a": 4} // ERROR "must be non-negative integer constant"