cmd/gc: don't unpack struct arguments to append

Fixes #9634.

Change-Id: I7b18f26c2fb812978fc7adc5bfd39ebfffe48701
Reviewed-on: https://go-review.googlesource.com/3080
Reviewed-by: Minux Ma <minux@golang.org>
This commit is contained in:
Chris Manghane 2015-01-20 14:35:33 -08:00
parent 0635706849
commit f5b8813e93
2 changed files with 19 additions and 1 deletions

View file

@ -1346,7 +1346,7 @@ reswitch:
goto error;
// Unpack multiple-return result before type-checking.
if(istype(t, TSTRUCT)) {
if(istype(t, TSTRUCT) && t->funarg) {
t = t->type;
if(istype(t, TFIELD))
t = t->type;

View file

@ -0,0 +1,18 @@
// 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.
// Issue 9634: Structs are incorrectly unpacked when passed as an argument
// to append.
package main
func main() {
s := struct{
t []int
u int
}{}
_ = append(s, 0) // ERROR "must be a slice|must be slice"
}