Skip to content

Commit 1953407

Browse files
committed
compiler: fix variadic args not being nil when zero length.
1 parent 89cfdc6 commit 1953407

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

compiler/utils.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ func (c *funcContext) translateArgs(sig *types.Signature, argExprs []ast.Expr, e
9595
varargType = sig.Params().At(paramsLen - 1).Type().(*types.Slice)
9696
}
9797

98+
if sig.Variadic() && len(argExprs) == 0 {
99+
return []string{fmt.Sprintf("%s.nil", c.typeName(varargType))}
100+
}
101+
98102
preserveOrder := false
99103
for i := 1; i < len(argExprs); i++ {
100104
preserveOrder = preserveOrder || c.Blocking[argExprs[i]]

tests/compiler_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package tests
2+
3+
import (
4+
"testing"
5+
)
6+
7+
func TestVariadicNil(t *testing.T) {
8+
printVari := func(strs ...string) []string {
9+
return strs
10+
}
11+
12+
if got := printVari(); got != nil {
13+
t.Errorf("printVari(): got: %#v; want %#v.", got, nil)
14+
}
15+
16+
{
17+
var want []string
18+
if got := printVari(want...); got != nil {
19+
t.Errorf("printVari(want...): got: %#v; want %#v.", got, nil)
20+
}
21+
}
22+
23+
{
24+
want := []string{}
25+
if got := printVari(want...); got == nil || len(got) != len(want) {
26+
t.Errorf("printVari(want...): got: %#v; want %#v.", got, want)
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)