diff --git a/_test/variadic6.go b/_test/variadic6.go new file mode 100644 index 00000000..c53ed791 --- /dev/null +++ b/_test/variadic6.go @@ -0,0 +1,20 @@ +package main + +import "fmt" + +type A struct { +} + +func (a A) f(vals ...bool) { + for _, v := range vals { + fmt.Println(v) + } +} +func main() { + bools := []bool{true} + a := A{} + a.f(bools...) +} + +// Output: +// true diff --git a/interp/run.go b/interp/run.go index 76f06dfd..3daa7012 100644 --- a/interp/run.go +++ b/interp/run.go @@ -821,7 +821,11 @@ func call(n *node) { d.Set(src) } case variadic >= 0 && i >= variadic: - vararg.Set(reflect.Append(vararg, v(f))) + if v(f).Type() == vararg.Type() { + vararg.Set(v(f)) + } else { + vararg.Set(reflect.Append(vararg, v(f))) + } default: dest[i].Set(v(f)) }