]> Cypherpunks repositories - gostls13.git/commitdiff
spec: clarify conditions for switch expression type
authorRobert Griesemer <gri@golang.org>
Wed, 28 Apr 2021 01:05:20 +0000 (18:05 -0700)
committerRobert Griesemer <gri@golang.org>
Wed, 28 Apr 2021 18:50:51 +0000 (18:50 +0000)
1. The existing prose implied that a switch expression type must
   be comparable because it is tested for equality against all case
   expressions. But for an empty switch (no case expressions), it
   was not clear if the switch expression needed to be comparable.
   Require it to match the behavior of compiler and type checkers.

2. While making this change, remove redundant language explaining
   what happens with untyped boolean switch expression values: the
   default type of an untyped boolean value is bool, this is already
   covered by the first part of the relevant sentence.

Fixes #43200.

Change-Id: Id8e0f29cfa8722b57cd2b7b58cba85b58c5f842b
Reviewed-on: https://go-review.googlesource.com/c/go/+/314411
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Rob Pike <r@golang.org>
doc/go_spec.html

index 95bf7d30f8bceca0d5c7e71db2af3390de5dd5be..e59b3554f288e087efe281f3f074b495ae4d899e 100644 (file)
@@ -1,6 +1,6 @@
 <!--{
        "Title": "The Go Programming Language Specification",
-       "Subtitle": "Version of Apr 21, 2021",
+       "Subtitle": "Version of Apr 28, 2021",
        "Path": "/ref/spec"
 }-->
 
@@ -4953,9 +4953,9 @@ ExprSwitchCase = "case" ExpressionList | "default" .
 
 <p>
 If the switch expression evaluates to an untyped constant, it is first implicitly
-<a href="#Conversions">converted</a> to its <a href="#Constants">default type</a>;
-if it is an untyped boolean value, it is first implicitly converted to type <code>bool</code>.
+<a href="#Conversions">converted</a> to its <a href="#Constants">default type</a>.
 The predeclared untyped value <code>nil</code> cannot be used as a switch expression.
+The switch expression type must be <a href="#Comparison_operators">comparable</a>.
 </p>
 
 <p>