summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2023-05-17 12:26:05 -0700
committerGopher Robot <gobot@golang.org>2023-05-18 00:35:53 +0000
commit956d31ecd50fa11b66e4ad39a30677acb5616476 (patch)
tree39e0fc9c30fb253cf8302f8ba2156e4b8c1339e3
parent0b86a04db011c44056688217e073ae380772b57b (diff)
downloadgo-git-956d31ecd50fa11b66e4ad39a30677acb5616476.tar.gz
cmd/compile: enable more lenient type inference for untyped arguments
This enables the implementation for proposal #58671, which is a likely accept. By enabling it early we get a bit extra soak time for this feature. The change can be reverted trivially, if need be. For #58671. Change-Id: Id6c27515e45ff79f4f1d2fc1706f3f672ccdd1ab Reviewed-on: https://go-review.googlesource.com/c/go/+/495955 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>
-rw-r--r--src/cmd/compile/internal/noder/irgen.go5
-rw-r--r--src/cmd/compile/internal/types2/stdlib_test.go5
-rw-r--r--src/go/types/stdlib_test.go1
-rw-r--r--test/fixedbugs/issue58671.go19
4 files changed, 26 insertions, 4 deletions
diff --git a/src/cmd/compile/internal/noder/irgen.go b/src/cmd/compile/internal/noder/irgen.go
index 3adf9e5d11..baccd0323b 100644
--- a/src/cmd/compile/internal/noder/irgen.go
+++ b/src/cmd/compile/internal/noder/irgen.go
@@ -50,8 +50,9 @@ func checkFiles(m posMap, noders []*noder) (*types2.Package, *types2.Info) {
}
base.ErrorfAt(m.makeXPos(terr.Pos), terr.Code, "%s", msg)
},
- Importer: &importer,
- Sizes: &gcSizes{},
+ Importer: &importer,
+ Sizes: &gcSizes{},
+ InferMaxDefaultType: true, // #58671
}
info := &types2.Info{
StoreTypesInSyntax: true,
diff --git a/src/cmd/compile/internal/types2/stdlib_test.go b/src/cmd/compile/internal/types2/stdlib_test.go
index 404e1636ae..80a05b7491 100644
--- a/src/cmd/compile/internal/types2/stdlib_test.go
+++ b/src/cmd/compile/internal/types2/stdlib_test.go
@@ -139,8 +139,9 @@ func testTestDir(t *testing.T, path string, ignore ...string) {
file, err := syntax.ParseFile(filename, nil, nil, 0)
if err == nil {
conf := Config{
- GoVersion: goVersion,
- Importer: stdLibImporter,
+ GoVersion: goVersion,
+ Importer: stdLibImporter,
+ InferMaxDefaultType: true,
}
_, err = conf.Check(filename, []*syntax.File{file}, nil)
}
diff --git a/src/go/types/stdlib_test.go b/src/go/types/stdlib_test.go
index 82f22de836..a7c1ae2eba 100644
--- a/src/go/types/stdlib_test.go
+++ b/src/go/types/stdlib_test.go
@@ -143,6 +143,7 @@ func testTestDir(t *testing.T, path string, ignore ...string) {
GoVersion: goVersion,
Importer: stdLibImporter,
}
+ *boolFieldAddr(&conf, "_InferMaxDefaultType") = true
_, err = conf.Check(filename, fset, []*ast.File{file}, nil)
}
diff --git a/test/fixedbugs/issue58671.go b/test/fixedbugs/issue58671.go
new file mode 100644
index 0000000000..ae8f7a3ad6
--- /dev/null
+++ b/test/fixedbugs/issue58671.go
@@ -0,0 +1,19 @@
+// run
+
+// 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.
+
+package main
+
+func g[P any](...P) P { var zero P; return zero }
+
+var (
+ _ int = g(1, 2)
+ _ rune = g(1, 'a')
+ _ float64 = g(1, 'a', 2.3)
+ _ float64 = g('a', 2.3)
+ _ complex128 = g(2.3, 'a', 1i)
+)
+
+func main() {}