From ee457118cd7b11264719647fa6f7422bac2a4431 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20Mo=CC=88hrmann?= Date: Wed, 26 Oct 2016 00:01:58 +0200 Subject: [PATCH] cmd/compile: cleanup checkmake MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: Icea4661db4a254e64b2129f429e5ef21ec1612cb Reviewed-on: https://go-review.googlesource.com/32162 Run-TryBot: Martin Möhrmann TryBot-Result: Gobot Gobot Reviewed-by: Josh Bleecher Snyder --- src/cmd/compile/internal/gc/typecheck.go | 36 +++++++++--------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/src/cmd/compile/internal/gc/typecheck.go b/src/cmd/compile/internal/gc/typecheck.go index 2a087cd40b..94ae32ec2c 100644 --- a/src/cmd/compile/internal/gc/typecheck.go +++ b/src/cmd/compile/internal/gc/typecheck.go @@ -3798,32 +3798,22 @@ func checkmake(t *Type, arg string, n *Node) bool { return false } - if n.Op == OLITERAL { - switch n.Val().Ctype() { - case CTINT, CTRUNE, CTFLT, CTCPLX: - n.SetVal(toint(n.Val())) - if n.Val().U.(*Mpint).CmpInt64(0) < 0 { - yyerror("negative %s argument in make(%v)", arg, t) - return false - } - - if n.Val().U.(*Mpint).Cmp(maxintval[TINT]) > 0 { - yyerror("%s argument too large in make(%v)", arg, t) - return false - } - - // Delay defaultlit until after we've checked range, to avoid - // a redundant "constant NNN overflows int" error. - n = defaultlit(n, Types[TINT]) - - return true - - default: - break + // Do range checks for constants before defaultlit + // to avoid redundant "constant NNN overflows int" errors. + switch consttype(n) { + case CTINT, CTRUNE, CTFLT, CTCPLX: + n.SetVal(toint(n.Val())) + if n.Val().U.(*Mpint).CmpInt64(0) < 0 { + yyerror("negative %s argument in make(%v)", arg, t) + return false + } + if n.Val().U.(*Mpint).Cmp(maxintval[TINT]) > 0 { + yyerror("%s argument too large in make(%v)", arg, t) + return false } } - // Defaultlit still necessary for non-constant: n might be 1<