This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Go patch committed: method names must be non-blank


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

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 {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]