This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Go patch committed: Disallow call of *T method using **T variable
- From: Ian Lance Taylor <iant at google dot com>
- To: gcc-patches at gcc dot gnu dot org, gofrontend-dev at googlegroups dot com
- Date: Tue, 26 Aug 2014 21:12:53 -0700
- Subject: Go patch committed: Disallow call of *T method using **T variable
- Authentication-results: sourceware.org; auth=none
This patch by Chris Manghane fixes the Go frontend to not permit calling
a pointer method on *T with a variable of **T. Previously it was
incorrectly dereferencing the **T to get a *T and using that to call the
method. Fixing this required tweaking one test case. Bootstrapped and
ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline.
This fixes issue 8583 in the Go project.
Ian
Index: gcc/go/gofrontend/types.cc
===================================================================
--- gcc/go/gofrontend/types.cc (revision 213928)
+++ gcc/go/gofrontend/types.cc (working copy)
@@ -9453,10 +9453,11 @@ Type::bind_field_or_method(Gogo* gogo, c
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: gcc/testsuite/go.test/test/fixedbugs/bug371.go
===================================================================
--- gcc/testsuite/go.test/test/fixedbugs/bug371.go (revision 213928)
+++ gcc/testsuite/go.test/test/fixedbugs/bug371.go (working copy)
@@ -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"
}