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
merge done from the gofrontend repository.
......@@ -747,16 +747,16 @@ Type::are_convertible(const Type* lhs, const Type* rhs, std::string* reason)
return true;
// 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.
if (lhs->points_to() != NULL
&& rhs->points_to() != NULL
&& !rhs->points_to()->in_heap()
&& lhs->points_to()->in_heap()
&& !lhs->is_unsafe_pointer_type())
&& !lhs->points_to()->in_heap()
&& rhs->points_to()->in_heap()
&& !rhs->is_unsafe_pointer_type())
{
if (reason != NULL)
reason->assign(_("conversion from notinheap type to normal type"));
reason->assign(_("conversion from normal type to notinheap type"));
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