Fixes #60434.
Change-Id: I6eca4c508fa96fe81c4ee8a12b76c3de405fee7c
Reviewed-on: https://go-review.googlesource.com/c/go/+/543176
Reviewed-by: Robert Griesemer <gri@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
return targs
}
+ // If we have invalid (ordinary) arguments, an error was reported before.
+ // Avoid additional inference errors and exit early (go.dev/issue/60434).
+ for _, arg := range args {
+ if arg.mode == invalid {
+ return nil
+ }
+ }
+
// Make sure we have a "full" list of type arguments, some of which may
// be nil (unknown). Make a copy so as to not clobber the incoming slice.
if len(targs) < n {
return targs
}
+ // If we have invalid (ordinary) arguments, an error was reported before.
+ // Avoid additional inference errors and exit early (go.dev/issue/60434).
+ for _, arg := range args {
+ if arg.mode == invalid {
+ return nil
+ }
+ }
+
// Make sure we have a "full" list of type arguments, some of which may
// be nil (unknown). Make a copy so as to not clobber the incoming slice.
if len(targs) < n {
--- /dev/null
+// Copyright 2023 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 there are no type inference errors
+// if function arguments are invalid.
+
+package p
+
+func f[S any](S) {}
+
+var s struct{ x int }
+
+func _() {
+ f(s.y /* ERROR "s.y undefined" */)
+ f(1 /* ERROR "cannot convert 1" */ / s)
+}