From 871300308a6c14ccaaed16e201752ee53b3b4037 Mon Sep 17 00:00:00 2001 From: Alberto Donizetti Date: Wed, 21 Dec 2016 11:07:11 +0100 Subject: [PATCH] cmd/compile: never report "truncated to real" for toint calls 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 Reviewed-by: Robert Griesemer Run-TryBot: Robert Griesemer --- src/cmd/compile/internal/gc/const.go | 6 ++---- test/fixedbugs/issue16439.go | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/cmd/compile/internal/gc/const.go b/src/cmd/compile/internal/gc/const.go index a2146ebef17..48b98b798a9 100644 --- a/src/cmd/compile/internal/gc/const.go +++ b/src/cmd/compile/internal/gc/const.go @@ -458,12 +458,10 @@ func toint(v Val) Val { 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 } diff --git a/test/fixedbugs/issue16439.go b/test/fixedbugs/issue16439.go index d321b6083ef..f9382bafcd9 100644 --- a/test/fixedbugs/issue16439.go +++ b/test/fixedbugs/issue16439.go @@ -13,6 +13,6 @@ var c []int = []int{2.0: 2} 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"