]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/compile: enable more lenient type inference for untyped arguments
authorRobert Griesemer <gri@golang.org>
Wed, 17 May 2023 19:26:05 +0000 (12:26 -0700)
committerGopher Robot <gobot@golang.org>
Thu, 18 May 2023 00:35:53 +0000 (00:35 +0000)
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>

src/cmd/compile/internal/noder/irgen.go
src/cmd/compile/internal/types2/stdlib_test.go
src/go/types/stdlib_test.go
test/fixedbugs/issue58671.go [new file with mode: 0644]

index 3adf9e5d11d82bd4278d8c5d8ea4a2eb2e99dbd1..baccd0323b5fc3ca5b775e9b51bde54b134625af 100644 (file)
@@ -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,
index 404e1636aec480bf9f97607903fb441c58beefde..80a05b749122268b95dc6a3269833062287bb5a5 100644 (file)
@@ -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)
                }
index 82f22de8362d7d0b23c69ba9847a2def2be6d379..a7c1ae2ebab579cf191af33779ea5fd64a29ea5c 100644 (file)
@@ -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 (file)
index 0000000..ae8f7a3
--- /dev/null
@@ -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() {}