diff --git a/compiler/utils.go b/compiler/utils.go index 81f451651..e53a4036f 100644 --- a/compiler/utils.go +++ b/compiler/utils.go @@ -115,6 +115,10 @@ func (fc *funcContext) translateArgs(sig *types.Signature, argExprs []ast.Expr, sigTypes := signatureTypes{Sig: sig} + if sig.Variadic() && len(argExprs) == 0 { + return []string{fmt.Sprintf("%s.nil", fc.typeName(sigTypes.VariadicType()))} + } + preserveOrder := false for i := 1; i < len(argExprs); i++ { preserveOrder = preserveOrder || fc.Blocking[argExprs[i]] diff --git a/tests/compiler_test.go b/tests/compiler_test.go new file mode 100644 index 000000000..1ed209596 --- /dev/null +++ b/tests/compiler_test.go @@ -0,0 +1,29 @@ +package tests + +import ( + "testing" +) + +func TestVariadicNil(t *testing.T) { + printVari := func(strs ...string) []string { + return strs + } + + if got := printVari(); got != nil { + t.Errorf("printVari(): got: %#v; want %#v.", got, nil) + } + + { + var want []string + if got := printVari(want...); got != nil { + t.Errorf("printVari(want...): got: %#v; want %#v.", got, nil) + } + } + + { + want := []string{} + if got := printVari(want...); got == nil || len(got) != len(want) { + t.Errorf("printVari(want...): got: %#v; want %#v.", got, want) + } + } +}