compiler: Method names must be non-blank.
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 16 Oct 2014 19:55:28 +0000 (19:55 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 16 Oct 2014 19:55:28 +0000 (19:55 +0000)
Fixes issue 8078.

From-SVN: r216347

gcc/go/gofrontend/parse.cc
gcc/testsuite/go.test/test/interface/explicit.go
gcc/testsuite/go.test/test/interface/fail.go

index 09369e020f64b0f8b540b0dc52de1007a0d873ac..b97ada19c84b57cb19e8fd29fd5b75992c841c51 100644 (file)
@@ -1253,6 +1253,8 @@ Parse::method_spec(Typed_identifier_list* methods)
   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 36fa1a4224f9d329981390c5ba11d1aa6448d55e..b10d02f2485adb66c1411351ce4909661325ef6d 100644 (file)
@@ -83,12 +83,12 @@ var m4 = M(jj) // ERROR "invalid|wrong type for M method"
 
 
 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 81eb6cb3c151958b9193526c5e25f5941ef4cb42..d40a1513832115bc8c3d015575126d14141f564d 100644 (file)
@@ -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 {