]> Cypherpunks repositories - gostls13.git/commitdiff
go/types: unsafe.Pointer is not an alias
authorAlan Donovan <adonovan@google.com>
Thu, 9 Feb 2017 19:51:29 +0000 (14:51 -0500)
committerAlan Donovan <adonovan@google.com>
Fri, 10 Feb 2017 19:57:50 +0000 (19:57 +0000)
Change-Id: Ieb0808caa24c9a5e599084183ba5ee8a6536f7d8
Reviewed-on: https://go-review.googlesource.com/36622
Reviewed-by: Robert Griesemer <gri@golang.org>
src/go/types/object.go
src/go/types/object_test.go

index 3c44348696600191e46d0d7e22919dd4ca99f0f1..6d05052c7171546dd3e3da2924cddae287e73d31 100644 (file)
@@ -164,6 +164,10 @@ func (obj *TypeName) IsAlias() bool {
        case nil:
                return false
        case *Basic:
+               // unsafe.Pointer is not an alias.
+               if obj.pkg == Unsafe {
+                       return false
+               }
                // Any user-defined type name for a basic type is an alias for a
                // basic type (because basic types are pre-declared in the Universe
                // scope, outside any package scope), and so is any type name with
index 16d7d5c7236237aabdfa190a0f053f17cbca779c..b0acdd91bac26b87f867de9aa834923338b39263 100644 (file)
@@ -14,6 +14,7 @@ func TestIsAlias(t *testing.T) {
        }
 
        // predeclared types
+       check(Unsafe.Scope().Lookup("Pointer").(*TypeName), false)
        for _, name := range Universe.Names() {
                if obj, _ := Universe.Lookup(name).(*TypeName); obj != nil {
                        check(obj, name == "byte" || name == "rune")