]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.unified] test: tweak nilcheck test
authorMatthew Dempsky <mdempsky@google.com>
Wed, 29 Jun 2022 23:48:06 +0000 (16:48 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 30 Jun 2022 18:41:59 +0000 (18:41 +0000)
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>
test/nilcheck.go

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