go.tools/go/pointer: fix crash in constraint generation of ssa.Convert to a named unsafe.Pointer type.
+ test.
Fixes golang/go#8231.
LGTM=gri
R=gri
CC=golang-codereviews
https://golang.org/cl/106060046
diff --git a/go/pointer/gen.go b/go/pointer/gen.go
index 65988fb..8643545 100644
--- a/go/pointer/gen.go
+++ b/go/pointer/gen.go
@@ -434,7 +434,7 @@
case *types.Pointer:
// *T -> unsafe.Pointer?
- if tDst == tUnsafePtr {
+ if tDst.Underlying() == tUnsafePtr {
// ignore for now
// a.copy(res, a.valueNode(conv.X), 1)
return
diff --git a/go/pointer/testdata/conv.go b/go/pointer/testdata/conv.go
index 5439a39..8962317 100644
--- a/go/pointer/testdata/conv.go
+++ b/go/pointer/testdata/conv.go
@@ -49,9 +49,17 @@
print(p) // @pointsto convert@c2p:13
}
+// Regression test for b/8231.
+func conv5() {
+ type P unsafe.Pointer
+ var i *struct{}
+ _ = P(i)
+}
+
func main() {
conv1()
conv2()
conv3()
conv4()
+ conv5()
}