]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.unified] test: add switch test case for tricky nil handling
authorMatthew Dempsky <mdempsky@google.com>
Mon, 18 Jul 2022 20:02:02 +0000 (13:02 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 19 Jul 2022 23:30:49 +0000 (23:30 +0000)
The next CL will change Unified IR's switch statement handling to
convert values to empty interface in some tricky cases. My initial
attempt at this accidentally mishandled `case nil:` in some cases, and
this wasn't caught by any existing tests. So this CL adds one.

Change-Id: Idcfaf0e869dca91be46d665e65d4623dc52bb60f
Reviewed-on: https://go-review.googlesource.com/c/go/+/418099
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Keith Randall <khr@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>

test/switch.go

index 5e1d85bb68758769cc9a8a4bb9cc7ab1d441688d..1806fa7f9be422e646bb6b8b9bc292422dcbbabd 100644 (file)
@@ -400,4 +400,18 @@ func main() {
        case i > x:
                os.Exit(1)
        }
+
+       // Unified IR converts the tag and all case values to empty
+       // interface, when any of the case values aren't assignable to the
+       // tag value's type. Make sure that `case nil:` compares against the
+       // tag type's nil value (i.e., `(*int)(nil)`), not nil interface
+       // (i.e., `any(nil)`).
+       switch (*int)(nil) {
+       case nil:
+               // ok
+       case any(nil):
+               assert(false, "case any(nil) matched")
+       default:
+               assert(false, "default matched")
+       }
 }