Fixes #19323
Change-Id: I92d1bdefb15de6178a577a4fa0f0dc004f791904
Reviewed-on: https://go-review.googlesource.com/37584
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
case OSLICE, OSLICE3:
ok |= Erv
- n.Left = typecheck(n.Left, top)
+ n.Left = typecheck(n.Left, Erv)
low, high, max := n.SliceBounds()
hasmax := n.Op.IsSlice3()
low = typecheck(low, Erv)
max = indexlit(max)
n.SetSliceBounds(low, high, max)
l := n.Left
+ if l.Type == nil {
+ n.Type = nil
+ return n
+ }
if l.Type.IsArray() {
if !islvalue(n.Left) {
yyerror("invalid operation %v (slice of unaddressable value)", n)
n.Left = typecheck(n.Left, Erv)
l = n.Left
}
-
t := l.Type
- if t == nil {
- n.Type = nil
- return n
- }
var tp *Type
if t.IsString() {
if hasmax {
--- /dev/null
+// errorcheck
+
+// Copyright 2017 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 g() {}
+
+func f() {
+ g()[:] // ERROR "g.. used as value"
+}
+
+func g2() ([]byte, []byte) { return nil, nil }
+
+func f2() {
+ g2()[:] // ERROR "multiple-value g2.. in single-value context"
+}