diff --git a/go/ssa/const.go b/go/ssa/const.go
index 91ed6f2..73a8213 100644
--- a/go/ssa/const.go
+++ b/go/ssa/const.go
@@ -131,7 +131,9 @@
return u != nil && nillable(u)
})
}
- switch t.Underlying().(type) {
+ switch t := t.Underlying().(type) {
+ case *types.Basic:
+ return t.Kind() == types.UnsafePointer
case *types.Pointer, *types.Slice, *types.Chan, *types.Map, *types.Signature:
return true
case *types.Interface:
diff --git a/go/ssa/const_test.go b/go/ssa/const_test.go
index 6097bd9..ec067a8 100644
--- a/go/ssa/const_test.go
+++ b/go/ssa/const_test.go
@@ -97,3 +97,10 @@
t.Errorf("ssa.NewConst(%v, %s).String() = %v, want %v", nil, tup, got, want)
}
}
+
+func TestConstUnsafePointerNil(t *testing.T) {
+ c := ssa.NewConst(nil, types.Typ[types.UnsafePointer])
+ if !c.IsNil() {
+ t.Errorf("Const(unsafe.Pointer(nil)).IsNil() = false")
+ }
+}