`...int`,
`[]int`,
},
- {`package issue28277_b; func f(a, b, c ...[]struct{})`,
+ {`package issue28277_b; func f(a, b int, c ...[]struct{})`,
`...[]struct{}`,
`[][]struct{}`,
},
}
var issue22467 = map[int][... /* ERROR invalid use of ... */ ]int{0: {}}
+
+// Test that invalid use of ... in parameter lists is recognized
+// (issue #28281).
+func issue28281a(int, int, ...int)
+func issue28281b(a, b int, c ...int)
+func issue28281c(a, b, c ... /* ERROR can only use ... with final parameter */ int)
+func issue28281d(... /* ERROR can only use ... with final parameter */ int, int)
+func issue28281e(a, b, c ... /* ERROR can only use ... with final parameter */ int, d int)
+func issue28281f(... /* ERROR can only use ... with final parameter */ int, ... /* ERROR can only use ... with final parameter */ int, int)
+func (... /* ERROR expected type */ TT) f()
+func issue28281g() (... /* ERROR expected type */ TT)
\ No newline at end of file
dup("func(...int) string"),
dup("func(x ...int) string"),
dup("func(x ...int) (u string)"),
- {"func(x, y ...int) (u string)", "func(x int, y ...int) (u string)"},
+ {"func(x int, y ...int) (u string)", "func(x int, y ...int) (u string)"},
// interfaces
dup("interface{}"),
ftype := field.Type
if t, _ := ftype.(*ast.Ellipsis); t != nil {
ftype = t.Elt
- if variadicOk && i == len(list.List)-1 {
+ if variadicOk && i == len(list.List)-1 && len(field.Names) <= 1 {
variadic = true
} else {
- check.invalidAST(field.Pos(), "... not permitted")
+ check.softErrorf(t.Pos(), "can only use ... with final parameter in list")
// ignore ... and continue
}
}