summaryrefslogtreecommitdiffstats
path: root/test/fixedbugs/issue48558.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/fixedbugs/issue48558.go')
-rw-r--r--test/fixedbugs/issue48558.go85
1 files changed, 85 insertions, 0 deletions
diff --git a/test/fixedbugs/issue48558.go b/test/fixedbugs/issue48558.go
new file mode 100644
index 0000000..590fd9b
--- /dev/null
+++ b/test/fixedbugs/issue48558.go
@@ -0,0 +1,85 @@
+// 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"
+}