]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: allow print/println(f()) where f() is multi-value
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Thu, 14 Nov 2019 03:00:33 +0000 (10:00 +0700)
committerIan Lance Taylor <iant@golang.org>
Sat, 22 Feb 2020 03:34:22 +0000 (03:34 +0000)
Fixes #35576

Change-Id: Ia128f412120069e9f8813e9e910e62644f950bfb
Reviewed-on: https://go-review.googlesource.com/c/go/+/207118
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/typecheck.go
test/fixedbugs/issue35576.go [new file with mode: 0644]
test/fixedbugs/issue35576.out [new file with mode: 0644]

index ae2e16760d197743b10b22b7bc32de5602cb8c71..2ca7f2dbe436ce79ee4fa3539a9c1e990361501e 100644 (file)
@@ -1805,7 +1805,7 @@ func typecheck1(n *Node, top int) (res *Node) {
 
        case OPRINT, OPRINTN:
                ok |= ctxStmt
-               typecheckslice(n.List.Slice(), ctxExpr)
+               typecheckargs(n)
                ls := n.List.Slice()
                for i1, n1 := range ls {
                        // Special case for print: int constant is int64, not int.
diff --git a/test/fixedbugs/issue35576.go b/test/fixedbugs/issue35576.go
new file mode 100644 (file)
index 0000000..8228555
--- /dev/null
@@ -0,0 +1,16 @@
+// run
+
+// Copyright 2019 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.
+
+// Check print/println(f()) is allowed where f() is multi-value.
+
+package main
+
+func f() (int16, float64, string) { return -42, 42.0, "x" }
+
+func main() {
+       print(f())
+       println(f())
+}
diff --git a/test/fixedbugs/issue35576.out b/test/fixedbugs/issue35576.out
new file mode 100644 (file)
index 0000000..2aefe3e
--- /dev/null
@@ -0,0 +1 @@
+-42+4.200000e+001x-42 +4.200000e+001 x