diff options
author | Robert Griesemer <gri@golang.org> | 2016-05-31 13:32:34 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2016-05-31 23:53:43 +0000 |
commit | 3d81d4adc9419e2fcba5888ab074d3f17eb5eb03 (patch) | |
tree | 7f7f4b4659b52126ed8796e5a8b10c6531b35cd7 | |
parent | 3659645cb1f32d7b1eeefdb65f1339fe54f0f6eb (diff) | |
download | go-3d81d4adc9419e2fcba5888ab074d3f17eb5eb03.tar.gz go-3d81d4adc9419e2fcba5888ab074d3f17eb5eb03.zip |
spec: document that duplicate types are invalid in type switches
Both compilers and also go/types don't permit duplicate types in
type switches; i.e., this spec change is documenting a status quo
that has existed for some time.
Furthermore, duplicate nils are not accepted by gccgo or go/types;
and more recently started causing a compiler error in gc. Permitting
them is inconsistent with the existing status quo.
Rather than making it an implementation restriction (as we have for
expression switches), this is a hard requirement since it was enforced
from the beginning (except for duplicate nils); it is also a well
specified requirement that does not pose a significant burden for
an implementation.
Fixes #15896.
Change-Id: If12db5bafa87598b323ea84418cb05421e657dd8
Reviewed-on: https://go-review.googlesource.com/23584
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
-rw-r--r-- | doc/go_spec.html | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/doc/go_spec.html b/doc/go_spec.html index 13dae09420..731186e66b 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -1,6 +1,6 @@ <!--{ "Title": "The Go Programming Language Specification", - "Subtitle": "Version of April 25, 2016", + "Subtitle": "Version of May 31, 2016", "Path": "/ref/spec" }--> @@ -4672,6 +4672,8 @@ Cases then match actual types <code>T</code> against the dynamic type of the expression <code>x</code>. As with type assertions, <code>x</code> must be of <a href="#Interface_types">interface type</a>, and each non-interface type <code>T</code> listed in a case must implement the type of <code>x</code>. +The types listed in the cases of a type switch must all be +<a href="#Type_identity">different</a>. </p> <pre class="ebnf"> @@ -4696,6 +4698,7 @@ in the TypeSwitchGuard. The type in a case may be <a href="#Predeclared_identifiers"><code>nil</code></a>; that case is used when the expression in the TypeSwitchGuard is a <code>nil</code> interface value. +There may be at most one <code>nil</code> case. </p> <p> |