diff options
| author | Robert Griesemer <gri@golang.org> | 2023-04-18 16:43:11 -0700 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2023-04-19 14:07:00 +0000 |
| commit | d93f02010cbaa83916eecb4fb23dfc4153694dc0 (patch) | |
| tree | 32a4fba26064c31e63d4843753daf166ea9b8ae2 /src | |
| parent | 522eace4ca496626bcb3b65f9dcb6e8db2673fed (diff) | |
| download | go-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.go | 14 | ||||
| -rw-r--r-- | src/internal/types/testdata/fixedbugs/issue59371.go | 7 |
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 } |
