cmd/guru: adjust describe qualifier function (fix describe test)

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>
diff --git a/cmd/guru/describe.go b/cmd/guru/describe.go
index 125e409..41189f6 100644
--- a/cmd/guru/describe.go
+++ b/cmd/guru/describe.go
@@ -738,6 +738,22 @@
 			}
 		}
 		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)