compiler: fix check for notinheap conversion
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 14 Sep 2017 03:45:44 +0000 (03:45 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 14 Sep 2017 03:45:44 +0000 (03:45 +0000)
    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

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/types.cc

index 9576230ee582141a854881308559baa23db13aba..c4600de4cc8410c91be8c1e1f830a14a58437469 100644 (file)
@@ -1,4 +1,4 @@
-52ebad939927e6cbfb48dd277cef8db451e36533
+8c6d9ff6f60b737d1e96c0dab0b4e67402bf3316
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index cde1408bbf33442933cb7b0574d5ce85bf469ba3..cdf1f402834042c90993ccfb554ab988bfd2f01f 100644 (file)
@@ -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;
     }