mirror of
https://github.com/golang/go.git
synced 2025-10-19 19:13:18 +00:00
cmd/compile: don't move nilCheck operations during tighten
Nil checks need to stay in their original blocks. They cannot be moved to a following conditionally-executed block. Fixes #72860 Change-Id: Ic2d66cdf030357d91f8a716a004152ba4c016f77 Reviewed-on: https://go-review.googlesource.com/c/go/+/657715 Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Keith Randall <khr@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
parent
80f068928f
commit
a1ddbdd3ef
2 changed files with 28 additions and 0 deletions
|
@ -43,6 +43,10 @@ func tighten(f *Func) {
|
||||||
// SelectN is typically, ultimately, a register.
|
// SelectN is typically, ultimately, a register.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if opcodeTable[v.Op].nilCheck {
|
||||||
|
// Nil checks need to stay in their block. See issue 72860.
|
||||||
|
continue
|
||||||
|
}
|
||||||
// Count arguments which will need a register.
|
// Count arguments which will need a register.
|
||||||
narg := 0
|
narg := 0
|
||||||
for _, a := range v.Args {
|
for _, a := range v.Args {
|
||||||
|
|
24
test/fixedbugs/issue72860.go
Normal file
24
test/fixedbugs/issue72860.go
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// run
|
||||||
|
|
||||||
|
// Copyright 2025 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
|
func f(p *int, b bool) int {
|
||||||
|
valid := *p >= 0
|
||||||
|
if !b || !valid {
|
||||||
|
return 5
|
||||||
|
}
|
||||||
|
return 6
|
||||||
|
}
|
||||||
|
func main() {
|
||||||
|
defer func() {
|
||||||
|
if e := recover(); e == nil {
|
||||||
|
println("should have panicked")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
f(nil, false)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue