Skip to content

Commit

Permalink
cmd/guru: adjust describe qualifier function (fix describe test)
Browse files Browse the repository at this point in the history
The go/types fix for golang/go#44515 changed the type string for unsafe.Pointer
from a fixed "unsafe.Pointer" to a customizable package path followed
by "Pointer" (the customization was in place for any other object already).
The package path customization is done through a user-provider types.Qualifier
function. If none is provided, the ordinary package path is used ("unsafe").

Guru provides a package-relative qualifier which leaves away the package
path if an object is local to a package. As a result, unsafe.Pointer is
printed as "Pointer" which breaks an existing test.

Provide no qualifier function when printing a type from package unsafe
instead (there's only unsafe.Pointer). Since no qualifier was used in
the past, this Guru-specific change will also work when run using earlier
Go versions.

Fixes golang/go#44596.
Updates golang/go#44515.

Change-Id: I3c467e4ed09aa13deb50368fe98e42c723a6376b
Reviewed-on: https://go-review.googlesource.com/c/tools/+/296289
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
  • Loading branch information
griesemer committed Feb 25, 2021
1 parent 0150491 commit 24aca17
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions cmd/guru/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -738,6 +738,22 @@ func formatMember(obj types.Object, maxname int) string {
}
}
if typestr == "" {
// The fix for #44515 changed the printing of unsafe.Pointer
// such that it uses a qualifier if one is provided. Using
// the types.RelativeTo qualifier provided here, the output
// is just "Pointer" rather than "unsafe.Pointer". This is
// consistent with the printing of non-type objects but it
// breaks an existing test which needs to work with older
// versions of Go. Re-establish the original output by not
// using a qualifier at all if we're printing a type from
// package unsafe - there's only unsafe.Pointer (#44596).
// NOTE: This correction can be removed (and the test's
// golden file adjusted) once we only run against go1.17
// or bigger.
qualifier := qualifier
if obj.Pkg() == types.Unsafe {
qualifier = nil
}
typestr = types.TypeString(typ, qualifier)
}
buf.WriteString(typestr)
Expand Down

0 comments on commit 24aca17

Please sign in to comment.