diff mbox series

Go patch committed: Checkfor recursive inhereited interface aliases

Message ID CAOyqgcX93Up8Bfyr9+sue+2T=O1i5MJDnGuk_VGVdh89gZWGxg@mail.gmail.com
State New
Headers show
Series Go patch committed: Checkfor recursive inhereited interface aliases | expand

Commit Message

Ian Lance Taylor Feb. 27, 2019, 1:41 a.m. UTC
This patch by Ben Shi fixes the Go frontend to check for recursive
inherited interface aliases.  This avoids a compiler crash as
described at https://golang.org/issue/25302.  Bootstrapped and ran Go
testsuite on x86_64-pc-linux-gnu.  Committed to mainline.

Ian
diff mbox series

Patch

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 269240)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@ 
-9c1859b8e97242b0e697a3aaa39a4da5e6172e74
+2c74b84184941ebea318f69fe43a81f657790b63
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: gcc/go/gofrontend/types.cc
===================================================================
--- gcc/go/gofrontend/types.cc	(revision 269196)
+++ gcc/go/gofrontend/types.cc	(working copy)
@@ -10329,6 +10329,23 @@  Find_alias::type(Type* type)
 	return TRAVERSE_SKIP_COMPONENTS;
     }
 
+  // Check if there are recursive inherited interface aliases.
+  Interface_type* ift = type->interface_type();
+  if (ift != NULL)
+    {
+      const Typed_identifier_list* methods = ift->local_methods();
+      if (methods == NULL)
+	return TRAVERSE_CONTINUE;
+      for (Typed_identifier_list::const_iterator p = methods->begin();
+	   p != methods->end();
+	   ++p)
+	if (p->name().empty() && p->type()->named_type() == this->find_type_)
+	  {
+	    this->found_ = true;
+	    return TRAVERSE_EXIT;
+	  }
+    }
+
   return TRAVERSE_CONTINUE;
 }