aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2016-05-31 13:32:34 -0700
committerRobert Griesemer <gri@golang.org>2016-05-31 23:53:43 +0000
commit3d81d4adc9419e2fcba5888ab074d3f17eb5eb03 (patch)
tree7f7f4b4659b52126ed8796e5a8b10c6531b35cd7
parent3659645cb1f32d7b1eeefdb65f1339fe54f0f6eb (diff)
downloadgo-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.html5
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>