// compile

// Copyright 2013 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 5231: method values lose their variadic property.

package p

type T int

func (t T) NotVariadic(s []int) int {
	return int(t) + s[0]
}

func (t T) Variadic(s ...int) int {
	return int(t) + s[0]
}

type I interface {
	NotVariadic(s []int) int
	Variadic(s ...int) int
}

func F() {
	var t T
	var p *T = &t
	var i I = p

	nv := t.NotVariadic
	nv = p.NotVariadic
	nv = i.NotVariadic
	var s int = nv([]int{1, 2, 3})

	v := t.Variadic
	v = p.Variadic
	v = i.Variadic
	s = v(1, 2, 3)

	var f1 func([]int) int = nv
	var f2 func(...int) int = v

	_, _, _ = f1, f2, s
}
