diff options
author | korzhao <korzhao95@gmail.com> | 2021-08-25 16:01:49 +0800 |
---|---|---|
committer | Dan Scales <danscales@google.com> | 2021-08-25 19:06:16 +0000 |
commit | 3d667671ad767d66bf792c5a8d623cb829f6366a (patch) | |
tree | ed7c037425189a85e794b462e027b5a397e03b5b | |
parent | 4f2ebfe34be7453ab144d82558cc4e735a55d644 (diff) | |
download | go-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.go | 3 | ||||
-rw-r--r-- | test/typeparam/issue47948.go | 18 |
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]() +} |