summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2023-05-16 11:34:14 -0700
committerGopher Robot <gobot@golang.org>2023-05-16 22:41:49 +0000
commit522be4e01000abe771362984f8d351c8452cceef (patch)
treefd4eba4f3421b384ce97db72002f6efb19fc0a36
parentd29dd2ecf7563a8cb15a662a7ec5caa461068bbe (diff)
downloadgo-git-522be4e01000abe771362984f8d351c8452cceef.tar.gz
go/types, types2: remove superfluous argument test in Checker.arguments
There's only two places which call Checker.arguments: Checker.callExpr and Checker.builtin. Both ensure that the passed argument list doesn't contain type expressions, so we don't need that extra check at the start of Checker.arguments. The remaining check causes Checker.arguments to exit early if any of the passed arguments is invalid. This reduces the number of reported errors in rare cases but is executed all the time. If the extra errors are a problem, it would be better to not call Checker.arguments in the first place, or only do the extra check before Checker.arguments reports an error. Removing this code for now. Removes a long-standing TODO. Change-Id: Ief654b680eb6b6a768bb1b4c621d3c8169953f17 Reviewed-on: https://go-review.googlesource.com/c/go/+/495395 Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
-rw-r--r--src/cmd/compile/internal/types2/call.go11
-rw-r--r--src/go/types/call.go11
-rw-r--r--src/internal/types/testdata/check/expr3.go2
-rw-r--r--src/internal/types/testdata/fixedbugs/issue39634.go2
4 files changed, 2 insertions, 24 deletions
diff --git a/src/cmd/compile/internal/types2/call.go b/src/cmd/compile/internal/types2/call.go
index 4b854df774..834d2f467f 100644
--- a/src/cmd/compile/internal/types2/call.go
+++ b/src/cmd/compile/internal/types2/call.go
@@ -419,17 +419,6 @@ func (check *Checker) genericExprList(elist []syntax.Expr) []*operand {
func (check *Checker) arguments(call *syntax.CallExpr, sig *Signature, targs []Type, xlist []syntax.Expr, args []*operand) (rsig *Signature) {
rsig = sig
- // TODO(gri) try to eliminate this extra verification loop
- for _, a := range args {
- switch a.mode {
- case typexpr:
- check.errorf(a, NotAnExpr, "%s used as value", a)
- return
- case invalid:
- return
- }
- }
-
// Function call argument/parameter count requirements
//
// | standard call | dotdotdot call |
diff --git a/src/go/types/call.go b/src/go/types/call.go
index 313b469346..3fa8cbb16c 100644
--- a/src/go/types/call.go
+++ b/src/go/types/call.go
@@ -424,17 +424,6 @@ func (check *Checker) genericExprList(elist []ast.Expr) []*operand {
func (check *Checker) arguments(call *ast.CallExpr, sig *Signature, targs []Type, xlist []ast.Expr, args []*operand) (rsig *Signature) {
rsig = sig
- // TODO(gri) try to eliminate this extra verification loop
- for _, a := range args {
- switch a.mode {
- case typexpr:
- check.errorf(a, NotAnExpr, "%s used as value", a)
- return
- case invalid:
- return
- }
- }
-
// Function call argument/parameter count requirements
//
// | standard call | dotdotdot call |
diff --git a/src/internal/types/testdata/check/expr3.go b/src/internal/types/testdata/check/expr3.go
index da8d54fd1d..91534cdd62 100644
--- a/src/internal/types/testdata/check/expr3.go
+++ b/src/internal/types/testdata/check/expr3.go
@@ -505,7 +505,7 @@ func _calls() {
f2(3.14) /* ERROR "not enough arguments in call to f2\n\thave (number)\n\twant (float32, string)" */
f2(3.14, "foo")
f2(x /* ERRORx `cannot use .* in argument` */ , "foo")
- f2(g0 /* ERROR "used as value" */ ())
+ f2(g0 /* ERROR "used as value" */ ()) /* ERROR "not enough arguments in call to f2\n\thave (func())\n\twant (float32, string)" */
f2(g1()) /* ERROR "not enough arguments in call to f2\n\thave (int)\n\twant (float32, string)" */
f2(g2())
diff --git a/src/internal/types/testdata/fixedbugs/issue39634.go b/src/internal/types/testdata/fixedbugs/issue39634.go
index 592496033b..591b00e404 100644
--- a/src/internal/types/testdata/fixedbugs/issue39634.go
+++ b/src/internal/types/testdata/fixedbugs/issue39634.go
@@ -66,7 +66,7 @@ type Z19 [][[]Z19{}[0][0]]c19 /* ERROR "undefined" */
// crash 20
type Z20 /* ERROR "invalid recursive type" */ interface{ Z20 }
-func F20[t Z20]() { F20(t /* ERROR "invalid composite literal type" */ {}) }
+func F20[t Z20]() { F20(t /* ERROR "invalid composite literal type" */ /* ERROR "too many arguments in call to F20\n\thave (unknown type)\n\twant ()" */ {}) }
// crash 21
type Z21 /* ERROR "invalid recursive type" */ interface{ Z21 }