]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: cleanup checkmake
authorMartin Möhrmann <martisch@uos.de>
Tue, 25 Oct 2016 22:01:58 +0000 (00:01 +0200)
committerMartin Möhrmann <martisch@uos.de>
Sat, 29 Oct 2016 00:04:59 +0000 (00:04 +0000)
Change-Id: Icea4661db4a254e64b2129f429e5ef21ec1612cb
Reviewed-on: https://go-review.googlesource.com/32162
Run-TryBot: Martin Möhrmann <martisch@uos.de>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
src/cmd/compile/internal/gc/typecheck.go

index 2a087cd40b73dbf9cc1ec3b8728dcd4106b53565..94ae32ec2c837f6045b7ff6e7532281e2f82caf2 100644 (file)
@@ -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<<k.
+       // defaultlit is necessary for non-constants too: n might be 1.1<<k.
        n = defaultlit(n, Types[TINT])
 
        return true