compiler: Do not dereference a named pointer type when looking up a method.
authorIan Lance Taylor <ian@gcc.gnu.org>
Mon, 24 Nov 2014 17:10:20 +0000 (17:10 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 24 Nov 2014 17:10:20 +0000 (17:10 +0000)
Fixes Issue 9018.

From-SVN: r218026

gcc/go/gofrontend/types.cc

index ba07461391969980a05dc5b3652de712a749f8b5..c85c72cb91b554a825e92de2280fa7753aa08b6b 100644 (file)
@@ -10035,6 +10035,18 @@ Type::find_field_or_method(const Type* type,
 
   if (found_level == 0)
     return false;
+  else if (found_is_method
+          && type->named_type() != NULL
+          && type->points_to() != NULL)
+    {
+      // If this is a method inherited from a struct field in a named pointer
+      // type, it is invalid to automatically dereference the pointer to the
+      // struct to find this method.
+      if (level != NULL)
+       *level = found_level;
+      *is_method = true;
+      return false;
+    }
   else if (!found_ambig1.empty())
     {
       go_assert(!found_ambig1.empty());