OSDN Git Service

Do not permit method expressions with pointers to interface types.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Mar 2011 21:35:46 +0000 (21:35 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Mar 2011 21:35:46 +0000 (21:35 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@171633 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/expressions.cc

index 78ae4fa..d1de203 100644 (file)
@@ -10263,7 +10263,7 @@ Selector_expression::lower_method_expression(Gogo* gogo)
   bool is_ambiguous;
   Method* method = nt->method_function(name, &is_ambiguous);
   const Typed_identifier* imethod = NULL;
-  if (method == NULL)
+  if (method == NULL && !is_pointer)
     {
       Interface_type* it = nt->interface_type();
       if (it != NULL)
@@ -10273,12 +10273,14 @@ Selector_expression::lower_method_expression(Gogo* gogo)
   if (method == NULL && imethod == NULL)
     {
       if (!is_ambiguous)
-       error_at(location, "type %<%s%> has no method %<%s%>",
+       error_at(location, "type %<%s%s%> has no method %<%s%>",
+                is_pointer ? "*" : "",
                 nt->message_name().c_str(),
                 Gogo::message_name(name).c_str());
       else
-       error_at(location, "method %<%s%> is ambiguous in type %<%s%>",
+       error_at(location, "method %<%s%s%> is ambiguous in type %<%s%>",
                 Gogo::message_name(name).c_str(),
+                is_pointer ? "*" : "",
                 nt->message_name().c_str());
       return Expression::make_error(location);
     }