From 956d31ecd50fa11b66e4ad39a30677acb5616476 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 17 May 2023 12:26:05 -0700 Subject: 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 Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer Reviewed-by: Robert Findley TryBot-Result: Gopher Robot --- src/cmd/compile/internal/noder/irgen.go | 5 +++-- src/cmd/compile/internal/types2/stdlib_test.go | 5 +++-- src/go/types/stdlib_test.go | 1 + test/fixedbugs/issue58671.go | 19 +++++++++++++++++++ 4 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 test/fixedbugs/issue58671.go 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() {} -- cgit v1.2.1