aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2020-09-28 12:19:56 -0700
committerMatthew Dempsky <mdempsky@google.com>2020-09-28 20:54:13 +0000
commitad0ab812f8b80416c92ed227974e3194e98f4cdc (patch)
treebd1555ffbbfcc84ede222f1489351ded897d2bc4 /test
parentc4971a14a7cac78849f4d0908e7140263129bdf7 (diff)
downloadgo-ad0ab812f8b80416c92ed227974e3194e98f4cdc.tar.gz
go-ad0ab812f8b80416c92ed227974e3194e98f4cdc.zip
cmd/compile: fix type checking of "make" arguments
As part of type checking make's arguments, we were converting untyped float and complex constant arguments to integers. However, we were doing this without concern for whether the argument was a declared constant. Thus a call like "make([]T, n)" could change n from an untyped float or untyped complex to an untyped integer. The fix here is to simply change checkmake to not call SetVal, which will be handled by defaultlit anyway. However, we also need to properly return the defaultlit result value to the caller, so checkmake's *Node parameter is also changed to **Node. Fixes #41680. Change-Id: I858927a052f384ec38684570d37b10a6906961f7 Reviewed-on: https://go-review.googlesource.com/c/go/+/257966 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'test')
-rw-r--r--test/fixedbugs/issue41680.go21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/fixedbugs/issue41680.go b/test/fixedbugs/issue41680.go
new file mode 100644
index 0000000000..9dfeb7d503
--- /dev/null
+++ b/test/fixedbugs/issue41680.go
@@ -0,0 +1,21 @@
+// compile
+
+// Copyright 2020 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
+
+func F(s string) bool {
+ const m = 16
+ const n = 1e5
+ _ = make([]int, n)
+ return len(s) < n*m
+}
+
+func G() {
+ const n = 1e5
+ _ = make([]int, n)
+ f := n
+ var _ float64 = f
+}