compiler: improve recursive type detection

Detect recursive type definition like
"type T0 T1; type T1 T2; ...... type Tn T0".

Fixes golang/go#25320.

Change-Id: If2148b21c2857eec882309ea0cf4452209ebc6d5
Reviewed-on: https://go-review.googlesource.com/c/159837
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/go/types.cc b/go/types.cc
index 5a45bb2..6d0c9a3 100644
--- a/go/types.cc
+++ b/go/types.cc
@@ -10259,6 +10259,15 @@
 	  break;
 
 	case Type::TYPE_NAMED:
+          if (type->named_type() == type->base()->named_type())
+            {
+              this->found_ = true;
+              return TRAVERSE_EXIT;
+            }
+          else
+	    go_assert(saw_errors());
+	break;
+
 	case Type::TYPE_FORWARD:
 	  go_assert(saw_errors());
 	  break;