]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix value range check for complex constants
authorRuss Cox <rsc@golang.org>
Wed, 4 Nov 2015 20:47:48 +0000 (15:47 -0500)
committerRuss Cox <rsc@golang.org>
Mon, 16 Nov 2015 20:48:47 +0000 (20:48 +0000)
Fixes #11590.

Change-Id: I4144107334604a2cc98c7984df3b5d4cde3d30af
Reviewed-on: https://go-review.googlesource.com/16920
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/compile/internal/gc/const.go
test/fixedbugs/issue11590.go [new file with mode: 0644]

index 6fe249f171a30757ad055f8618d5d6b65f235a77..03c52a078ce219c1d711540cf03056074f2ae8c5 100644 (file)
@@ -259,7 +259,6 @@ func convlit1(np **Node, t *Type, explicit bool) {
                                n.SetVal(toint(n.Val()))
                                fallthrough
 
-                               // flowthrough
                        case CTINT:
                                overflow(n.Val(), t)
                        }
@@ -272,7 +271,6 @@ func convlit1(np **Node, t *Type, explicit bool) {
                                n.SetVal(toflt(n.Val()))
                                fallthrough
 
-                               // flowthrough
                        case CTFLT:
                                n.SetVal(Val{truncfltlit(n.Val().U.(*Mpflt), t)})
                        }
@@ -283,6 +281,7 @@ func convlit1(np **Node, t *Type, explicit bool) {
 
                        case CTFLT, CTINT, CTRUNE:
                                n.SetVal(tocplx(n.Val()))
+                               fallthrough
 
                        case CTCPLX:
                                overflow(n.Val(), t)
diff --git a/test/fixedbugs/issue11590.go b/test/fixedbugs/issue11590.go
new file mode 100644 (file)
index 0000000..9776704
--- /dev/null
@@ -0,0 +1,11 @@
+// errorcheck
+
+// Copyright 2015 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+var _ = int8(4) * 300         // ERROR "constant overflows int8"
+var _ = complex64(1) * 1e200  // ERROR "constant overflows complex64"
+var _ = complex128(1) * 1e500 // ERROR "constant overflows complex128"