1
0
mirror of https://github.com/golang/go synced 2024-11-25 09:47:57 -07:00

[dev.unified] test: tweak nilcheck test

A subsequent CL will change Unified IR to emit extra temporary
variables for multi-value expressions, because they're sometimes
necessary for handling implicit conversions.

A consequence of this is that:

	_, ok := m[""]

will be rewritten into:

	autotmp_1, autotmp_2 := m[""]
	_, ok := autotmp_1, autotmp_2

As the comment in nilcheck.go says, we don't want this code sequence
to emit any nil checks, and it doesn't either way. But only the second
form results in the compiler reporting "removed nil check", and I
can't make sense of why.

Rather than splitting this test case into separate unified and
nounified variants, it seems easier to just tweak the test case to the
more complex form and verify that we correctly remove the nil check
still.

Change-Id: I6a9266db933b201352d52da4d403a330fdeac48b
Reviewed-on: https://go-review.googlesource.com/c/go/+/415242
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
Matthew Dempsky 2022-06-29 16:48:06 -07:00
parent 95d7ce9ab1
commit 2f3ef73e18

View File

@ -184,6 +184,7 @@ func f4(x *[10]int) {
func f5(m map[string]struct{}) bool { func f5(m map[string]struct{}) bool {
// Existence-only map lookups should not generate a nil check // Existence-only map lookups should not generate a nil check
_, ok := m[""] tmp1, tmp2 := m[""] // ERROR "removed nil check"
_, ok := tmp1, tmp2
return ok return ok
} }