// errorcheck

// Copyright 2021 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.

package p

func _(a, b, c int) {
	_ = a
	_ = a, b    // ERROR "assignment mismatch: 1 variable but 2 values"
	_ = a, b, c // ERROR "assignment mismatch: 1 variable but 3 values"

	_, _ = a // ERROR "assignment mismatch: 2 variables but 1 value"
	_, _ = a, b
	_, _ = a, b, c // ERROR "assignment mismatch: 2 variables but 3 values"

	_, _, _ = a    // ERROR "assignment mismatch: 3 variables but 1 value"
	_, _, _ = a, b // ERROR "assignment mismatch: 3 variables but 2 values"
	_, _, _ = a, b, c
}

func f1() int
func f2() (int, int)
func f3() (int, int, int)

func _() {
	_ = f1()
	_ = f2() // ERROR "assignment mismatch: 1 variable but f2 returns 2 values"
	_ = f3() // ERROR "assignment mismatch: 1 variable but f3 returns 3 values"

	_, _ = f1() // ERROR "assignment mismatch: 2 variables but f1 returns 1 value"
	_, _ = f2()
	_, _ = f3() // ERROR "assignment mismatch: 2 variables but f3 returns 3 values"

	_, _, _ = f1() // ERROR "assignment mismatch: 3 variables but f1 returns 1 value"
	_, _, _ = f2() // ERROR "assignment mismatch: 3 variables but f2 returns 2 values"
	_, _, _ = f3()

	// test just a few := cases as they use the same code as the = case
	a1 := f3()         // ERROR "assignment mismatch: 1 variable but f3 returns 3 values"
	a2, b2 := f1()     // ERROR "assignment mismatch: 2 variables but f1 returns 1 value"
	a3, b3, c3 := f2() // ERROR "assignment mismatch: 3 variables but f2 returns 2 values"

	_ = a1
	_, _ = a2, b2
	_, _, _ = a3, b3, c3
}

type T struct{}

func (T) f1() int
func (T) f2() (int, int)
func (T) f3() (int, int, int)

func _(x T) {
	_ = x.f1()
	_ = x.f2() // ERROR "assignment mismatch: 1 variable but .\.f2 returns 2 values"
	_ = x.f3() // ERROR "assignment mismatch: 1 variable but .\.f3 returns 3 values"

	_, _ = x.f1() // ERROR "assignment mismatch: 2 variables but .\.f1 returns 1 value"
	_, _ = x.f2()
	_, _ = x.f3() // ERROR "assignment mismatch: 2 variables but .\.f3 returns 3 values"

	_, _, _ = x.f1() // ERROR "assignment mismatch: 3 variables but .\.f1 returns 1 value"
	_, _, _ = x.f2() // ERROR "assignment mismatch: 3 variables but .\.f2 returns 2 values"
	_, _, _ = x.f3()

	// test just a few := cases as they use the same code as the = case
	a1 := x.f3()         // ERROR "assignment mismatch: 1 variable but .\.f3 returns 3 values"
	a2, b2 := x.f1()     // ERROR "assignment mismatch: 2 variables but .\.f1 returns 1 value"
	a3, b3, c3 := x.f2() // ERROR "assignment mismatch: 3 variables but .\.f2 returns 2 values"

	_ = a1
	_, _ = a2, b2
	_, _, _ = a3, b3, c3
}

// some one-off cases
func _() {
	_ = (f2)
	_ = f1(), 2         // ERROR "assignment mismatch: 1 variable but 2 values"
	_, _ = (f1()), f2() // ERROR "multiple-value f2\(\) .*in single-value context"
	_, _, _ = f3(), 3   // ERROR "assignment mismatch: 3 variables but 2 values|multiple-value f3\(\) .*in single-value context"
}
