}
func symfmt(b *bytes.Buffer, s *Sym, verb rune, mode fmtMode) {
+ name := s.Name
if q := pkgqual(s.Pkg, verb, mode); q != "" {
b.WriteString(q)
b.WriteByte('.')
+ if mode == fmtTypeIDName {
+ // If name is a generic instantiation, it might have local package placeholders
+ // in it. Replace those placeholders with the package name. See issue 49547.
+ name = strings.Replace(name, LocalPkg.Prefix, q, -1)
+ }
}
- b.WriteString(s.Name)
+ b.WriteString(name)
}
// pkgqual returns the qualifier that should be used for printing
--- /dev/null
+// run -gcflags=-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
+
+import "fmt"
+
+type foo int
+
+func main() {
+ want := "main.F[main.foo]"
+ got := fmt.Sprintf("%T", F[foo]{})
+ if got != want {
+ fmt.Printf("want: %s, got: %s\n", want, got)
+ }
+}
+
+type F[T any] struct {
+}
0,3: main.T·2[int;int]
-4,7: main.T·2[int;"".U·3[int;int]]
-22,23: main.T·2["".Int;"".Int]
-26,27: main.T·2["".Int;"".U·3["".Int;"".Int]]
+4,7: main.T·2[int;main.U·3[int;int]]
+22,23: main.T·2[main.Int;main.Int]
+26,27: main.T·2[main.Int;main.U·3[main.Int;main.Int]]