aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkorzhao <korzhao95@gmail.com>2021-08-25 16:01:49 +0800
committerDan Scales <danscales@google.com>2021-08-25 19:06:16 +0000
commit3d667671ad767d66bf792c5a8d623cb829f6366a (patch)
treeed7c037425189a85e794b462e027b5a397e03b5b
parent4f2ebfe34be7453ab144d82558cc4e735a55d644 (diff)
downloadgo-3d667671ad767d66bf792c5a8d623cb829f6366a.tar.gz
go-3d667671ad767d66bf792c5a8d623cb829f6366a.zip
cmd/compile: fix function contains no TParam in generic function
Fixes #47948 Change-Id: I446a9548265d195ae4d88aff6b1361474d1b6214 Reviewed-on: https://go-review.googlesource.com/c/go/+/344910 Trust: Alexander Rakoczy <alex@golang.org> Trust: Dan Scales <danscales@google.com> Run-TryBot: Alexander Rakoczy <alex@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Dan Scales <danscales@google.com>
-rw-r--r--src/cmd/compile/internal/typecheck/subr.go3
-rw-r--r--test/typeparam/issue47948.go18
2 files changed, 20 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/typecheck/subr.go b/src/cmd/compile/internal/typecheck/subr.go
index b9cdcf10f2..8d05356543 100644
--- a/src/cmd/compile/internal/typecheck/subr.go
+++ b/src/cmd/compile/internal/typecheck/subr.go
@@ -1051,7 +1051,8 @@ func (ts *Tsubster) typ1(t *types.Type) *types.Type {
var targsChanged bool
var forw *types.Type
- if t.Sym() != nil {
+ if t.Sym() != nil && t.HasTParam() {
+ // Need to test for t.HasTParam() again because of special TFUNC case above.
// Translate the type params for this type according to
// the tparam/targs mapping from subst.
neededTargs = make([]*types.Type, len(t.RParams()))
diff --git a/test/typeparam/issue47948.go b/test/typeparam/issue47948.go
new file mode 100644
index 0000000000..8e5df81f6d
--- /dev/null
+++ b/test/typeparam/issue47948.go
@@ -0,0 +1,18 @@
+// compile -G=3
+
+// Copyright 2021 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
+
+type fun func()
+
+func F[T any]() {
+ _ = fun(func() {
+
+ })
+}
+func main() {
+ F[int]()
+}