mirror of
https://github.com/golang/go
synced 2024-11-22 12:04:46 -07:00
cmd/compile: fix missing markHiddenClosureDead in deadcode pass
CL 342350 fixed panic with dead hidden closures, by marking discarded hidden closure as dead, and won't compile them. However, the fix is incomplete. In case the "if" or "else" block end with panic or return statement: if true { return } # All nodes starts from here are dead the dead nodes must be processed with markHiddenClosureDead, but they are not, causing the compiler crashes. This CL adds that missing part. Fixes #48459 Change-Id: Ibdd10a61fc6459d139bbf4a66b0893b523ac6b67 Reviewed-on: https://go-review.googlesource.com/c/go/+/350695 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
c894b442d1
commit
771b8ea4f4
@ -117,6 +117,7 @@ func stmts(nn *ir.Nodes) {
|
||||
}
|
||||
|
||||
if cut {
|
||||
ir.VisitList((*nn)[i+1:len(*nn)], markHiddenClosureDead)
|
||||
*nn = (*nn)[:i+1]
|
||||
break
|
||||
}
|
||||
|
17
test/fixedbugs/issue48459.go
Normal file
17
test/fixedbugs/issue48459.go
Normal file
@ -0,0 +1,17 @@
|
||||
// compile
|
||||
|
||||
// Copyright 2021 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
|
||||
|
||||
func main() {
|
||||
if true {
|
||||
return
|
||||
}
|
||||
|
||||
defer func() {
|
||||
recover()
|
||||
}()
|
||||
}
|
Loading…
Reference in New Issue
Block a user