From e971b6a9be7e10df28a9e9bbc6e3f6cf46201957 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Mon, 18 Jul 2022 13:02:02 -0700 Subject: [PATCH] [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 Reviewed-by: Keith Randall TryBot-Result: Gopher Robot Reviewed-by: Keith Randall Run-TryBot: Matthew Dempsky --- test/switch.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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") + } }