mirror of
https://github.com/golang/go
synced 2024-09-05 16:04:50 +00:00
cmd/compile: skip exporting generic functions for -buildmode=plugin
Generic functions require instantiation, which package plugin doesn't support, and likely never will. So instead, we can just skip writing out any generic functions, which avoids an ICE in the plugin generation code. This issue doesn't affect GOEXPERIMENT=unified, because it avoids leaking any non-instantiated types/functions to the rest of the compiler backend. Fixes #52937. Change-Id: Ie35529c5c241e46b77fcb5b8cca48bb99ce7bfcb Reviewed-on: https://go-review.googlesource.com/c/go/+/406358 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
a900a176bf
commit
b79c135f37
|
@ -1726,6 +1726,9 @@ func CollectPTabs() {
|
|||
if s.Pkg.Name != "main" {
|
||||
continue
|
||||
}
|
||||
if n.Type().HasTParam() {
|
||||
continue // skip generic functions (#52937)
|
||||
}
|
||||
ptabs = append(ptabs, n)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -993,7 +993,10 @@ func (t *test) run() {
|
|||
|
||||
case "build":
|
||||
// Build Go file.
|
||||
_, err := runcmd(goTool(), "build", t.goGcflags(), "-o", "a.exe", long)
|
||||
cmd := []string{goTool(), "build", t.goGcflags()}
|
||||
cmd = append(cmd, flags...)
|
||||
cmd = append(cmd, "-o", "a.exe", long)
|
||||
_, err := runcmd(cmd...)
|
||||
if err != nil {
|
||||
t.err = err
|
||||
}
|
||||
|
|
14
test/typeparam/issue52937.go
Normal file
14
test/typeparam/issue52937.go
Normal file
|
@ -0,0 +1,14 @@
|
|||
// build -buildmode=plugin
|
||||
|
||||
//go:build !js
|
||||
// +build !js
|
||||
|
||||
// Copyright 2022 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 main() {}
|
||||
func F[T any]() {}
|
||||
func G[T any](T) {}
|
Loading…
Reference in a new issue