diff mbox

Go patch committed: method names must be non-blank

Message ID mcrppdr7ps6.fsf@iant-glaptop.roam.corp.google.com
State New
Headers show

Commit Message

Ian Lance Taylor Oct. 16, 2014, 7:55 p.m. UTC
The Go language spec was clarified to say that method names must be
non-blank.  This patch by Chris Manghane implements this restriction in
the Go frontend.  This requires a couple of testsuite changes, already
in the master testsuite and included in this patch.  This fixes
http://golang.org/issue/8078 .  Bootstrapped and ran Go testsuite on
x86_64-unknown-linux-gnu.  Committed to mainline.

Ian
diff mbox

Patch

Index: gcc/go/gofrontend/parse.cc
===================================================================
--- gcc/go/gofrontend/parse.cc	(revision 216343)
+++ gcc/go/gofrontend/parse.cc	(working copy)
@@ -1253,6 +1253,8 @@  Parse::method_spec(Typed_identifier_list
   if (this->advance_token()->is_op(OPERATOR_LPAREN))
     {
       // This is a MethodName.
+      if (name == "_")
+	error_at(this->location(), "methods must have a unique non-blank name");
       name = this->gogo_->pack_hidden_name(name, is_exported);
       Type* type = this->signature(NULL, location);
       if (type == NULL)
Index: gcc/testsuite/go.test/test/interface/explicit.go
===================================================================
--- gcc/testsuite/go.test/test/interface/explicit.go	(revision 216257)
+++ gcc/testsuite/go.test/test/interface/explicit.go	(working copy)
@@ -83,12 +83,12 @@  var m4 = M(jj) // ERROR "invalid|wrong t
 
 
 type B1 interface {
-	_()
+	_() // ERROR "methods must have a unique non-blank name"
 }
 
 type B2 interface {
 	M()
-	_()
+	_() // ERROR "methods must have a unique non-blank name"
 }
 
 type T2 struct{}
Index: gcc/testsuite/go.test/test/interface/fail.go
===================================================================
--- gcc/testsuite/go.test/test/interface/fail.go	(revision 216257)
+++ gcc/testsuite/go.test/test/interface/fail.go	(working copy)
@@ -14,7 +14,6 @@  type I interface {
 
 func main() {
 	shouldPanic(p1)
-	shouldPanic(p2)
 }
 
 func p1() {
@@ -30,19 +29,6 @@  type S struct{}
 
 func (s *S) _() {}
 
-type B interface {
-	_()
-}
-
-func p2() {
-	var s *S
-	var b B
-	var e interface{}
-	e = s
-	b = e.(B)
-	_ = b
-}
-
 func shouldPanic(f func()) {
 	defer func() {
 		if recover() == nil {