From b79c135f377e2cbae888ef50b83f1ee5025af906 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Mon, 16 May 2022 17:03:59 -0700 Subject: [PATCH] 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 Reviewed-by: Ian Lance Taylor Run-TryBot: Matthew Dempsky --- src/cmd/compile/internal/reflectdata/reflect.go | 3 +++ test/run.go | 5 ++++- test/typeparam/issue52937.go | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 test/typeparam/issue52937.go diff --git a/src/cmd/compile/internal/reflectdata/reflect.go b/src/cmd/compile/internal/reflectdata/reflect.go index 5b44b7098d..d9f2708712 100644 --- a/src/cmd/compile/internal/reflectdata/reflect.go +++ b/src/cmd/compile/internal/reflectdata/reflect.go @@ -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) } } diff --git a/test/run.go b/test/run.go index 00f869bc2b..7553302a76 100644 --- a/test/run.go +++ b/test/run.go @@ -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 } diff --git a/test/typeparam/issue52937.go b/test/typeparam/issue52937.go new file mode 100644 index 0000000000..efcb69a2c1 --- /dev/null +++ b/test/typeparam/issue52937.go @@ -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) {}