mirror of
https://github.com/golang/go
synced 2024-09-20 16:32:42 +00:00
go/types: revert "no 'declared but not used' errors for invalid var decls"
This reverts commit CL 289712 (afd67f3
). It breaks x/tools tests, and
those tests highlight that perhaps I didn't think through the
repercussions of this change as much as I should have.
Fixes #44316
Change-Id: I5db39b4e2a3714131aa22423abfe0f34a0376192
Reviewed-on: https://go-review.googlesource.com/c/go/+/292751
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
parent
70c37ee7d0
commit
2f0da6d9e2
|
@ -120,7 +120,6 @@ func (check *Checker) initVar(lhs *Var, x *operand, context string) Type {
|
||||||
if lhs.typ == nil {
|
if lhs.typ == nil {
|
||||||
lhs.typ = Typ[Invalid]
|
lhs.typ = Typ[Invalid]
|
||||||
}
|
}
|
||||||
lhs.used = true
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -504,20 +504,6 @@ func (check *Checker) constDecl(obj *Const, typ, init ast.Expr, inherited bool)
|
||||||
func (check *Checker) varDecl(obj *Var, lhs []*Var, typ, init ast.Expr) {
|
func (check *Checker) varDecl(obj *Var, lhs []*Var, typ, init ast.Expr) {
|
||||||
assert(obj.typ == nil)
|
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
|
// determine type, if any
|
||||||
if typ != nil {
|
if typ != nil {
|
||||||
obj.typ = check.typ(typ)
|
obj.typ = check.typ(typ)
|
||||||
|
|
14
src/go/types/testdata/vardecl.src
vendored
14
src/go/types/testdata/vardecl.src
vendored
|
@ -158,18 +158,6 @@ func _() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Invalid variable declarations must not lead to "declared but not used errors".
|
|
||||||
func _() {
|
|
||||||
var a x // ERROR undeclared name: x
|
|
||||||
var b = x // ERROR undeclared name: x
|
|
||||||
var c int = x // ERROR undeclared name: x
|
|
||||||
var d, e, f x /* ERROR x */ /* ERROR x */ /* ERROR x */
|
|
||||||
var g, h, i = x /* ERROR x */, x /* ERROR x */, x /* ERROR x */
|
|
||||||
var j, k, l float32 = x /* ERROR x */, x /* ERROR x */, x /* ERROR x */
|
|
||||||
// but no "declared but not used" errors
|
|
||||||
}
|
|
||||||
|
|
||||||
// Invalid (unused) expressions must not lead to spurious "declared but not used errors"
|
// Invalid (unused) expressions must not lead to spurious "declared but not used errors"
|
||||||
func _() {
|
func _() {
|
||||||
var a, b, c int
|
var a, b, c int
|
||||||
|
@ -215,4 +203,4 @@ func _() {
|
||||||
_, _, _ = x, y, z
|
_, _, _ = x, y, z
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(gri) consolidate other var decl checks in this file
|
// TODO(gri) consolidate other var decl checks in this file
|
Loading…
Reference in a new issue