aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2023-04-18 16:43:11 -0700
committerGopher Robot <gobot@golang.org>2023-04-19 14:07:00 +0000
commitd93f02010cbaa83916eecb4fb23dfc4153694dc0 (patch)
tree32a4fba26064c31e63d4843753daf166ea9b8ae2 /src
parent522eace4ca496626bcb3b65f9dcb6e8db2673fed (diff)
downloadgo-d93f02010cbaa83916eecb4fb23dfc4153694dc0.tar.xz
cmd/compile/internal/types2: only mark variables as used if they are
Marking variables in erroneous variable declarations as used is convenient for tests but doesn't necessarily hide follow-on errors in real code: either the variable is not supposed to be declared in the first place and then we should get an error if it is not used, or it is there because it is intended to be used, and the we expect an error it if is not used. This brings types2 closer to go/types. Change-Id: If7ee1298fc770f7ad0cefe7e968533fd50ec2343 Reviewed-on: https://go-review.googlesource.com/c/go/+/486175 Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/compile/internal/types2/decl.go14
-rw-r--r--src/internal/types/testdata/fixedbugs/issue59371.go7
2 files changed, 2 insertions, 19 deletions
diff --git a/src/cmd/compile/internal/types2/decl.go b/src/cmd/compile/internal/types2/decl.go
index f7c6a8e573..dd39c42037 100644
--- a/src/cmd/compile/internal/types2/decl.go
+++ b/src/cmd/compile/internal/types2/decl.go
@@ -416,20 +416,6 @@ func (check *Checker) constDecl(obj *Const, typ, init syntax.Expr, inherited boo
func (check *Checker) varDecl(obj *Var, lhs []*Var, typ, init syntax.Expr) {
assert(obj.typ == nil)
- // If we have undefined variable types due to errors,
- // mark variables as used to avoid follow-on errors.
- // Matches compiler behavior.
- defer func() {
- if obj.typ == Typ[Invalid] {
- obj.used = true
- }
- for _, lhs := range lhs {
- if lhs.typ == Typ[Invalid] {
- lhs.used = true
- }
- }
- }()
-
// determine type, if any
if typ != nil {
obj.typ = check.varType(typ)
diff --git a/src/internal/types/testdata/fixedbugs/issue59371.go b/src/internal/types/testdata/fixedbugs/issue59371.go
index d60810a6f0..d5b4db6a85 100644
--- a/src/internal/types/testdata/fixedbugs/issue59371.go
+++ b/src/internal/types/testdata/fixedbugs/issue59371.go
@@ -12,9 +12,6 @@ func _() {
func _() {
var ok = undef /* ERROR "undefined: undef" */
- x, ok := m[0] // must not crash
- _ = x
- // The next line is only needed for go/types, not types2.
- // TODO(gri) find cause and fix
- _ = ok
+ x, ok := m[0] // must not crash
+ _, _ = x, ok
}