summaryrefslogtreecommitdiff
path: root/test/switch.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2022-07-18 13:02:02 -0700
committerMatthew Dempsky <mdempsky@google.com>2022-07-19 23:30:49 +0000
commite971b6a9be7e10df28a9e9bbc6e3f6cf46201957 (patch)
tree39680ca17778d74e81aa7e88ce5596e173f33951 /test/switch.go
parent878439cfe592165bdeaeed037bf1d3351e638853 (diff)
downloadgo-git-e971b6a9be7e10df28a9e9bbc6e3f6cf46201957.tar.gz
[dev.unified] test: add switch test case for tricky nil handling
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>
Diffstat (limited to 'test/switch.go')
-rw-r--r--test/switch.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/switch.go b/test/switch.go
index 5e1d85bb68..1806fa7f9b 100644
--- a/test/switch.go
+++ b/test/switch.go
@@ -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")
+ }
}