Commit ed52163b by Ian Lance Taylor

compiler: fix check for notinheap conversion

    
    A normal pointer may not be converted to a notinheap pointer.  We were
    erroneously permitting a conversion from a normal pointer to a
    notinheap unsafe.Pointer, which is useless since unsafe.Pointer is not
    marked notinheap.  Correct the test to permit a conversion from
    unsafe.Pointer to a notinheap pointer, which is the same test that the
    gc compiler uses.
    
    The test case for this is in the 1.9 runtime package.
    
    Reviewed-on: https://go-review.googlesource.com/62731

From-SVN: r252745
parent 09abdb23
52ebad939927e6cbfb48dd277cef8db451e36533 8c6d9ff6f60b737d1e96c0dab0b4e67402bf3316
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -747,16 +747,16 @@ Type::are_convertible(const Type* lhs, const Type* rhs, std::string* reason) ...@@ -747,16 +747,16 @@ Type::are_convertible(const Type* lhs, const Type* rhs, std::string* reason)
return true; return true;
// A pointer to a regular type may not be converted to a pointer to // A pointer to a regular type may not be converted to a pointer to
// a type that may not live in the heap, except when converting to // a type that may not live in the heap, except when converting from
// unsafe.Pointer. // unsafe.Pointer.
if (lhs->points_to() != NULL if (lhs->points_to() != NULL
&& rhs->points_to() != NULL && rhs->points_to() != NULL
&& !rhs->points_to()->in_heap() && !lhs->points_to()->in_heap()
&& lhs->points_to()->in_heap() && rhs->points_to()->in_heap()
&& !lhs->is_unsafe_pointer_type()) && !rhs->is_unsafe_pointer_type())
{ {
if (reason != NULL) if (reason != NULL)
reason->assign(_("conversion from notinheap type to normal type")); reason->assign(_("conversion from normal type to notinheap type"));
return false; return false;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment