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>
diff --git a/go/callgraph/cha/testdata/generics.go b/go/callgraph/cha/testdata/generics.go
index 2711dc0..79250a5 100644
--- a/go/callgraph/cha/testdata/generics.go
+++ b/go/callgraph/cha/testdata/generics.go
@@ -27,7 +27,7 @@
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 @@
// (*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
diff --git a/go/callgraph/rta/testdata/generics.go b/go/callgraph/rta/testdata/generics.go
index 012a64c..d962fa4 100644
--- a/go/callgraph/rta/testdata/generics.go
+++ b/go/callgraph/rta/testdata/generics.go
@@ -53,27 +53,27 @@
// 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
diff --git a/go/callgraph/static/static_test.go b/go/callgraph/static/static_test.go
index 47f32d7..0a108d3 100644
--- a/go/callgraph/static/static_test.go
+++ b/go/callgraph/static/static_test.go
@@ -93,10 +93,10 @@
{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 {
diff --git a/go/callgraph/vta/testdata/src/callgraph_generics.go b/go/callgraph/vta/testdata/src/callgraph_generics.go
index b0fcb02..da3dca5 100644
--- a/go/callgraph/vta/testdata/src/callgraph_generics.go
+++ b/go/callgraph/vta/testdata/src/callgraph_generics.go
@@ -45,17 +45,17 @@
// *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 @@
// (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
diff --git a/go/pointer/testdata/typeparams.go b/go/pointer/testdata/typeparams.go
index ddd0a74..461ba44 100644
--- a/go/pointer/testdata/typeparams.go
+++ b/go/pointer/testdata/typeparams.go
@@ -62,7 +62,7 @@
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]
diff --git a/go/ssa/builder_test.go b/go/ssa/builder_test.go
index ba9aaf7..1975e26 100644
--- a/go/ssa/builder_test.go
+++ b/go/ssa/builder_test.go
@@ -627,19 +627,19 @@
"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 @@
}
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)
}
diff --git a/go/ssa/instantiate.go b/go/ssa/instantiate.go
index 65c1e99..049b534 100644
--- a/go/ssa/instantiate.go
+++ b/go/ssa/instantiate.go
@@ -137,7 +137,7 @@
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,