Fixes #54405.
Change-Id: Ia7b2709b83966fa080e41e3d4818527d1e8b49f9
Reviewed-on: https://go-review.googlesource.com/c/go/+/424054
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Robert Griesemer <gri@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
// If switchCase is true, the operator op is ignored.
func (check *Checker) comparison(x, y *operand, op syntax.Operator, switchCase bool) {
+ // Avoid spurious errors if any of the operands has an invalid type (issue #54405).
+ if x.typ == Typ[Invalid] || y.typ == Typ[Invalid] {
+ x.mode = invalid
+ return
+ }
+
if switchCase {
op = syntax.Eql
}
--- /dev/null
+// Copyright 2022 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.
+
+// Test that we don't see spurious errors for ==
+// for values with invalid types due to prior errors.
+
+package p
+
+var x struct {
+ f *NotAType /* ERROR undeclared name */
+}
+var _ = x.f == nil // no error expected here
+
+var y *NotAType /* ERROR undeclared name */
+var _ = y == nil // no error expected here
// If switchCase is true, the operator op is ignored.
func (check *Checker) comparison(x, y *operand, op token.Token, switchCase bool) {
+ // Avoid spurious errors if any of the operands has an invalid type (issue #54405).
+ if x.typ == Typ[Invalid] || y.typ == Typ[Invalid] {
+ x.mode = invalid
+ return
+ }
+
if switchCase {
op = token.EQL
}
--- /dev/null
+// Copyright 2022 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.
+
+// Test that we don't see spurious errors for ==
+// for values with invalid types due to prior errors.
+
+package p
+
+var x struct {
+ f *NotAType /* ERROR undeclared name */
+}
+var _ = x.f == nil // no error expected here
+
+var y *NotAType /* ERROR undeclared name */
+var _ = y == nil // no error expected here