go/ssa: tweak Function.Name() for generic instantiations

Was "f[[int]]", now "f[int]".

Change-Id: I361d2386cffbabd0a4eca180b49c6da2b42cb28a
Reviewed-on: https://go-review.googlesource.com/c/tools/+/407094
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Tim King <taking@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
Run-TryBot: Alan Donovan <adonovan@google.com>
This commit is contained in:
Alan Donovan 2022-05-18 14:52:23 -04:00
parent 4dd2c74a9b
commit 904e24e9fc
7 changed files with 39 additions and 39 deletions

View File

@ -27,7 +27,7 @@ func f(h func(), g func(I), k func(A), a A, b B) {
h()
k(a)
g(b) // g:func(I) is not matched by instantiated[[B]]:func(B)
g(b) // g:func(I) is not matched by instantiated[B]:func(B)
instantiated[A](a) // static call
instantiated[B](b) // static call
@ -38,8 +38,8 @@ func f(h func(), g func(I), k func(A), a A, b B) {
// (*A).Foo --> (A).Foo
// (*B).Foo --> (B).Foo
// f --> Bar
// f --> instantiated[[main.A]]
// f --> instantiated[[main.A]]
// f --> instantiated[[main.B]]
// instantiated[[main.A]] --> (A).Foo
// instantiated[[main.B]] --> (B).Foo
// f --> instantiated[main.A]
// f --> instantiated[main.A]
// f --> instantiated[main.B]
// instantiated[main.A] --> (A).Foo
// instantiated[main.B] --> (B).Foo

View File

@ -53,27 +53,27 @@ func lambda[X I]() func() func() {
// All calls
// (*C).Foo --> (C).Foo
// (A).Foo$bound --> (A).Foo
// instantiated[[main.A]] --> (A).Foo
// instantiated[[main.B]] --> (B).Foo
// instantiated[main.A] --> (A).Foo
// instantiated[main.B] --> (B).Foo
// main --> (*C).Foo
// main --> (A).Foo$bound
// main --> (C).Foo
// main --> instantiated[[main.A]]
// main --> instantiated[[main.B]]
// main --> lambda[[main.A]]
// main --> lambda[[main.A]]$1
// main --> local[[main.C]]
// main --> instantiated[main.A]
// main --> instantiated[main.B]
// main --> lambda[main.A]
// main --> lambda[main.A]$1
// main --> local[main.C]
// Reachable functions
// (*C).Foo
// (A).Foo
// (A).Foo$bound
// (B).Foo
// (C).Foo
// instantiated[[main.A]]
// instantiated[[main.B]]
// lambda[[main.A]]
// lambda[[main.A]]$1
// local[[main.C]]
// instantiated[main.A]
// instantiated[main.B]
// lambda[main.A]
// lambda[main.A]$1
// local[main.C]
// Reflect types
// *C
// C

View File

@ -93,10 +93,10 @@ func TestStatic(t *testing.T) {
{genericsInput, []string{
"(*A).F -> (A).F",
"(*B).F -> (B).F",
"f -> instantiated[[P.A]]",
"f -> instantiated[[P.B]]",
"instantiated[[P.A]] -> (A).F",
"instantiated[[P.B]] -> (B).F",
"f -> instantiated[P.A]",
"f -> instantiated[P.B]",
"instantiated[P.A] -> (A).F",
"instantiated[P.B] -> (B).F",
}, true},
} {
if e.typeparams && !typeparams.Enabled {

View File

@ -45,17 +45,17 @@ func Foo(a A, b B) {
// *t1 = b
// t2 = new bool (x)
// *t2 = true:bool
// t3 = instantiated[[bool]](t2)
// t3 = instantiated[bool](t2)
// t4 = new int (y)
// *t4 = 1:int
// t5 = instantiated[[int]](t4)
// t5 = instantiated[int](t4)
// t6 = *t0
// t7 = interfaceInstantiated[[testdata.A]](t6)
// t7 = interfaceInstantiated[testdata.A](t6)
// t8 = *t1
// t9 = interfaceInstantiated[[testdata.B]](t8)
// t9 = interfaceInstantiated[testdata.B](t8)
// return
//
//func interfaceInstantiated[[testdata.B]](x B):
//func interfaceInstantiated[testdata.B](x B):
// t0 = local B (x)
// *t0 = x
// t1 = *t0
@ -66,6 +66,6 @@ func Foo(a A, b B) {
// (external)
// WANT:
// Foo: instantiated[[bool]](t2) -> instantiated[[bool]]; instantiated[[int]](t4) -> instantiated[[int]]; interfaceInstantiated[[testdata.A]](t6) -> interfaceInstantiated[[testdata.A]]; interfaceInstantiated[[testdata.B]](t8) -> interfaceInstantiated[[testdata.B]]
// interfaceInstantiated[[testdata.B]]: (B).Bar(t1) -> B.Bar
// interfaceInstantiated[[testdata.A]]: (A).Bar(t1) -> A.Bar
// Foo: instantiated[bool](t2) -> instantiated[bool]; instantiated[int](t4) -> instantiated[int]; interfaceInstantiated[testdata.A](t6) -> interfaceInstantiated[testdata.A]; interfaceInstantiated[testdata.B](t8) -> interfaceInstantiated[testdata.B]
// interfaceInstantiated[testdata.B]: (B).Bar(t1) -> B.Bar
// interfaceInstantiated[testdata.A]: (A).Bar(t1) -> A.Bar

View File

@ -62,7 +62,7 @@ func main() {
fn(&b)
}
// @calls (*fmt.pp).handleMethods -> (*command-line-arguments.S[int]).String[[int]]
// @calls (*fmt.pp).handleMethods -> (*command-line-arguments.S[bool]).String[[bool]]
// @calls command-line-arguments.Caller[[int]] -> (*command-line-arguments.S[int]).String[[int]]
// @calls command-line-arguments.Caller[[bool]] -> (*command-line-arguments.S[bool]).String[[bool]]
// @calls (*fmt.pp).handleMethods -> (*command-line-arguments.S[int]).String[int]
// @calls (*fmt.pp).handleMethods -> (*command-line-arguments.S[bool]).String[bool]
// @calls command-line-arguments.Caller[int] -> (*command-line-arguments.S[int]).String[int]
// @calls command-line-arguments.Caller[bool] -> (*command-line-arguments.S[bool]).String[bool]

View File

@ -627,19 +627,19 @@ var indirect = R[int].M
"bound",
"*func() int",
"(p.S[int]).M$bound",
"(p.S[int]).M[[int]]",
"(p.S[int]).M[int]",
},
{
"thunk",
"*func(p.S[int]) int",
"(p.S[int]).M$thunk",
"(p.S[int]).M[[int]]",
"(p.S[int]).M[int]",
},
{
"indirect",
"*func(p.R[int]) int",
"(p.R[int]).M$thunk",
"(p.S[int]).M[[int]]",
"(p.S[int]).M[int]",
},
} {
entry := entry
@ -871,7 +871,7 @@ func TestGenericFunctionSelector(t *testing.T) {
}
sort.Strings(callees) // ignore the order in the code.
want := "[a.F[[int]] a.G[[int string]] a.H[[int]]]"
want := "[a.F[int] a.G[int string] a.H[int]]"
if got := fmt.Sprint(callees); got != want {
t.Errorf("Expected main() to contain calls %v. got %v", want, got)
}

View File

@ -137,7 +137,7 @@ func createInstance(fn *Function, targs []types.Type, info *types.Info, syntax a
sig = prog.canon.Type(instance).(*types.Signature)
}
name := fmt.Sprintf("%s[%s]", fn.Name(), targs) // may not be unique
name := fmt.Sprintf("%s%s", fn.Name(), targs) // may not be unique
synthetic := fmt.Sprintf("instantiation of %s", fn.Name())
instance := &Function{
name: name,