From 5c682f94c6b465f75b3e638ecff77adaf87aabb2 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 13 Dec 2022 17:41:19 -0800 Subject: [PATCH] spec: document illegal recursive type parameter lists Fixes #40882. Change-Id: I90f99d75e6d66f857b6ab8789c6d436f85d20993 Reviewed-on: https://go-review.googlesource.com/c/go/+/457515 TryBot-Bypass: Robert Griesemer Reviewed-by: Ian Lance Taylor Reviewed-by: Robert Findley --- doc/go_spec.html | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/doc/go_spec.html b/doc/go_spec.html index 2cf53c8a97..237176f4a7 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -2644,10 +2644,21 @@ of a method declaration associated with a generic type.

- +

+Within a type parameter list of a generic type T, a type constraint +may not (directly, or indirectly through the type parameter list of another +generic type) refer to T. +

+ +
+type T1[P T1[P]] …                    // illegal: T1 refers to itself
+type T2[P interface{ T2[int] }] …     // illegal: T2 refers to itself
+type T3[P interface{ m(T3[int])}] …   // illegal: T3 refers to itself
+type T4[P T5[P]] …                    // illegal: T4 refers to T5 and
+type T5[P T4[P]] …                    //          T5 refers to T4
+
+type T6[P int] struct{ f *T6[P] }     // ok: reference to T6 is not in type parameter list
+

Type constraints

-- 2.50.0