From c40b69ae69f5e510704ee0b4a1a293057a6f4cd2 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 30 Mar 2015 17:32:06 +0000 Subject: [PATCH] compiler: implement Go 1 unsafe.Pointer conversion rules Any type whose underlying type is uintptr can be converted to unsafe.Pointer, and vice versa. Fixes golang/go#10284. From-SVN: r221774 --- gcc/go/gofrontend/types.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index 785889fb5c8..e93c6811d08 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -772,16 +772,16 @@ Type::are_convertible(const Type* lhs, const Type* rhs, std::string* reason) } // An unsafe.Pointer type may be converted to any pointer type or to - // uintptr, and vice-versa. + // a type whose underlying type is uintptr, and vice-versa. if (lhs->is_unsafe_pointer_type() && (rhs->points_to() != NULL || (rhs->integer_type() != NULL - && rhs->forwarded() == Type::lookup_integer_type("uintptr")))) + && rhs->integer_type() == Type::lookup_integer_type("uintptr")->real_type()))) return true; if (rhs->is_unsafe_pointer_type() && (lhs->points_to() != NULL || (lhs->integer_type() != NULL - && lhs->forwarded() == Type::lookup_integer_type("uintptr")))) + && lhs->integer_type() == Type::lookup_integer_type("uintptr")->real_type()))) return true; // Give a better error message. -- 2.30.2