]> Cypherpunks repositories - gostls13.git/commitdiff
spec: fix conversion rules (match implementation)
authorRobert Griesemer <gri@golang.org>
Fri, 10 Dec 2021 23:35:46 +0000 (15:35 -0800)
committerRobert Griesemer <gri@golang.org>
Mon, 13 Dec 2021 18:41:35 +0000 (18:41 +0000)
As written, the conversion P(x), where P and the type
of x are type parameters with identical underlying types
(i.e., identical constraints), is valid. However, unless
the type of x and P are identical (which is covered with
the assignability rule), such a conversion is not valid
in general (consider the case where both type parameters
are different type parameters with constraint "any").

This change adjusts the rules to prohibit type parameters
in this case. The same reasoning applies and the analogue
change is made for pointer types.

The type checker already implements these updated rules.

Change-Id: Id90187900cb2820f6a0a0cf582cf26cdf8addbce
Reviewed-on: https://go-review.googlesource.com/c/go/+/371074
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
doc/go_spec.html

index 2832b0739db15c629d34680b85901ffc25c0a9f3..cb57aa301cbf4430b5414f0b85805f5a0e92a3ae 100644 (file)
@@ -1,6 +1,6 @@
 <!--{
        "Title": "The Go Programming Language Specification - Go 1.18 Draft (incomplete)",
-       "Subtitle": "Version of Nov 29, 2021",
+       "Subtitle": "Version of Dec 13, 2021",
        "Path": "/ref/spec"
 }-->
 
@@ -4782,14 +4782,16 @@ in any of these cases:
        </li>
        <li>
        ignoring struct tags (see below),
-       <code>x</code>'s type and <code>T</code> have <a href="#Type_identity">identical</a>
-       <a href="#Types">underlying types</a>.
+       <code>x</code>'s type and <code>T</code> are not
+       <a href="#Type_parameters">type parameters</a> but have
+       <a href="#Type_identity">identical</a> <a href="#Types">underlying types</a>.
        </li>
        <li>
        ignoring struct tags (see below),
        <code>x</code>'s type and <code>T</code> are pointer types
        that are not <a href="#Types">named types</a>,
-       and their pointer base types have identical underlying types.
+       and their pointer base types are not type parameters but
+       have identical underlying types.
        </li>
        <li>
        <code>x</code>'s type and <code>T</code> are both integer or floating