compiler: Disallow call of *T method using **T variable.
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 27 Aug 2014 04:12:50 +0000 (04:12 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 27 Aug 2014 04:12:50 +0000 (04:12 +0000)
Fixes https://code.google.com/p/go/issues/detail?id=8583.

From-SVN: r214560

gcc/go/gofrontend/types.cc
gcc/testsuite/go.test/test/fixedbugs/bug371.go

index eba224b4266e030ed238fdad61420e0ad65d0394..395b5e55081d8d911e2fb5d116137fc6532c0230 100644 (file)
@@ -9453,10 +9453,11 @@ Type::bind_field_or_method(Gogo* gogo, const Type* type, Expression* expr,
          else
            go_unreachable();
          go_assert(m != NULL);
-         if (dereferenced && m->is_value_method())
+         if (dereferenced)
            {
              error_at(location,
-                      "calling value method requires explicit dereference");
+                      "calling method %qs requires explicit dereference",
+                      Gogo::message_name(name).c_str());
              return Expression::make_error(location);
            }
          if (!m->is_value_method() && expr->type()->points_to() == NULL)
index 6329e9635a2dadbaed3b2c59a475c7fcd4898c7e..86c73bf4a8f1be3e197c5b7ab9c1bc69de39b520 100644 (file)
@@ -8,10 +8,10 @@
 
 package main
 
-type T struct {}
+type T struct{}
 
 func (t *T) pm() {}
-func (t T) m() {}
+func (t T) m()   {}
 
 func main() {
        p := &T{}
@@ -20,5 +20,5 @@ func main() {
 
        q := &p
        q.m()  // ERROR "requires explicit dereference"
-       q.pm()
+       q.pm() // ERROR "requires explicit dereference"
 }