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>
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")
+ }
}