From: Martin Möhrmann Date: Tue, 25 Oct 2016 22:01:58 +0000 (+0200) Subject: cmd/compile: cleanup checkmake X-Git-Tag: go1.8beta1~470 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ee457118cd7b11264719647fa6f7422bac2a4431;p=gostls13.git cmd/compile: cleanup checkmake 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 --- 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<