aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2021-09-22 21:57:19 -0700
committerRobert Griesemer <gri@golang.org>2021-09-23 19:41:45 +0000
commitddb5a42b25c63df9f11669bd4b14eeebcd2ba2bb (patch)
tree8d062a49da018d9864823dd33a463ed35c1c727b /test
parentc0766d2cd0453b33da74407bcb0d32bbc5392c9b (diff)
downloadgo-ddb5a42b25c63df9f11669bd4b14eeebcd2ba2bb.tar.xz
cmd/compile/internal/types2: avoid "declared but not used" errors for invalid code
Agressively mark all LHS variables in assignments as used if there is any error in the (entire) assignment. This reduces the number of spurious "declared but not used" errors in programs that are invalid in the first place. This behavior is closer to the behavior of the compiler's original type checker (types1) and lets us remove lines of the form "_ = variable" just to satisfy test cases. It also makes more important errors visible by not crowding them out. Remove the Checker.useLHS function and use Checker.use instead: useLHS didn't evaluate top-level variables, but we actually want them to be evaluated in an error scenario so that they are getting used (and thus we don't get the "declared but not used" error). Fixes #42937. Change-Id: Idda460f6b81c66735bf9fd597c54188949bf12b8 Reviewed-on: https://go-review.googlesource.com/c/go/+/351730 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
Diffstat (limited to 'test')
-rw-r--r--test/fixedbugs/bug062.go3
-rw-r--r--test/fixedbugs/bug131.go5
-rw-r--r--test/fixedbugs/bug175.go3
-rw-r--r--test/fixedbugs/bug289.go10
-rw-r--r--test/fixedbugs/issue9083.go12
-rw-r--r--test/interface/pointer.go5
6 files changed, 13 insertions, 25 deletions
diff --git a/test/fixedbugs/bug062.go b/test/fixedbugs/bug062.go
index 24c2dff933..1008f1af9c 100644
--- a/test/fixedbugs/bug062.go
+++ b/test/fixedbugs/bug062.go
@@ -7,6 +7,5 @@
package main
func main() {
- var s string = nil; // ERROR "illegal|invalid|incompatible|cannot"
- _ = s
+ var s string = nil // ERROR "illegal|invalid|incompatible|cannot"
}
diff --git a/test/fixedbugs/bug131.go b/test/fixedbugs/bug131.go
index 2c9d120ed0..de606da167 100644
--- a/test/fixedbugs/bug131.go
+++ b/test/fixedbugs/bug131.go
@@ -7,7 +7,6 @@
package main
func main() {
- const a uint64 = 10;
- var b int64 = a; // ERROR "convert|cannot|incompatible"
- _ = b
+ const a uint64 = 10
+ var b int64 = a // ERROR "convert|cannot|incompatible"
}
diff --git a/test/fixedbugs/bug175.go b/test/fixedbugs/bug175.go
index 88210a59b3..caf3168536 100644
--- a/test/fixedbugs/bug175.go
+++ b/test/fixedbugs/bug175.go
@@ -9,6 +9,5 @@ package main
func f() (int, bool) { return 0, true }
func main() {
- x, y := f(), 2; // ERROR "multi|2-valued"
- _, _ = x, y
+ x, y := f(), 2 // ERROR "multi|2-valued"
}
diff --git a/test/fixedbugs/bug289.go b/test/fixedbugs/bug289.go
index fea6829992..7e8346ee0f 100644
--- a/test/fixedbugs/bug289.go
+++ b/test/fixedbugs/bug289.go
@@ -9,18 +9,14 @@
package main
func f1() {
- a, b := f() // ERROR "assignment mismatch|does not match|cannot initialize"
- _ = a
- _ = b
+ a, b := f() // ERROR "assignment mismatch|does not match|cannot initialize"
}
func f2() {
var a, b int
- a, b = f() // ERROR "assignment mismatch|does not match|cannot assign"
- _ = a
- _ = b
+ a, b = f() // ERROR "assignment mismatch|does not match|cannot assign"
}
func f() int {
- return 1;
+ return 1
}
diff --git a/test/fixedbugs/issue9083.go b/test/fixedbugs/issue9083.go
index f5c5296a2b..ea53e7a69a 100644
--- a/test/fixedbugs/issue9083.go
+++ b/test/fixedbugs/issue9083.go
@@ -13,12 +13,10 @@ const zero = 0
func main() {
var x int
- _ = x
- x = make(map[int]int) // ERROR "cannot use make\(map\[int\]int\)|incompatible"
- x = make(map[int]int, 0) // ERROR "cannot use make\(map\[int\]int, 0\)|incompatible"
+ x = make(map[int]int) // ERROR "cannot use make\(map\[int\]int\)|incompatible"
+ x = make(map[int]int, 0) // ERROR "cannot use make\(map\[int\]int, 0\)|incompatible"
x = make(map[int]int, zero) // ERROR "cannot use make\(map\[int\]int, zero\)|incompatible"
- x = make(chan int) // ERROR "cannot use make\(chan int\)|incompatible"
- x = make(chan int, 0) // ERROR "cannot use make\(chan int, 0\)|incompatible"
- x = make(chan int, zero) // ERROR "cannot use make\(chan int, zero\)|incompatible"
- _ = x
+ x = make(chan int) // ERROR "cannot use make\(chan int\)|incompatible"
+ x = make(chan int, 0) // ERROR "cannot use make\(chan int, 0\)|incompatible"
+ x = make(chan int, zero) // ERROR "cannot use make\(chan int, zero\)|incompatible"
}
diff --git a/test/interface/pointer.go b/test/interface/pointer.go
index c21e4da390..a71b3f4bf8 100644
--- a/test/interface/pointer.go
+++ b/test/interface/pointer.go
@@ -24,7 +24,6 @@ type Start struct {
func (start *Start) Next() *Inst { return nil }
-
func AddInst(Inst) *Inst {
print("ok in addinst\n")
return nil
@@ -33,8 +32,6 @@ func AddInst(Inst) *Inst {
func main() {
print("call addinst\n")
var x Inst = AddInst(new(Start)) // ERROR "pointer to interface|incompatible type"
- _ = x
print("return from addinst\n")
- var y *Inst = new(Start) // ERROR "pointer to interface|incompatible type"
- _ = y
+ var y *Inst = new(Start) // ERROR "pointer to interface|incompatible type"
}