Update to go1.24.1
This commit is contained in:
99
test/fixedbugs/issue71675.go
Normal file
99
test/fixedbugs/issue71675.go
Normal file
@@ -0,0 +1,99 @@
|
||||
// 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 i() {
|
||||
for range yieldInts {
|
||||
defer func() {
|
||||
println("I")
|
||||
recover()
|
||||
}()
|
||||
}
|
||||
// This panic causes dead code elimination of the return block.
|
||||
// The compiler should nonetheless emit a deferreturn.
|
||||
panic("i panic")
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func h() {
|
||||
defer func() {
|
||||
println("H first")
|
||||
}()
|
||||
for range yieldInts {
|
||||
defer func() {
|
||||
println("H second")
|
||||
}()
|
||||
}
|
||||
defer func() {
|
||||
println("H third")
|
||||
}()
|
||||
for range yieldIntsPanic {
|
||||
defer func() {
|
||||
println("h recover:called")
|
||||
recover()
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func yieldInts(yield func(int) bool) {
|
||||
if !yield(0) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func g() {
|
||||
defer func() {
|
||||
println("G first")
|
||||
}()
|
||||
for range yieldIntsPanic {
|
||||
defer func() {
|
||||
println("g recover:called")
|
||||
recover()
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func yieldIntsPanic(yield func(int) bool) {
|
||||
if !yield(0) {
|
||||
return
|
||||
}
|
||||
panic("yield stop")
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func next(i int) int {
|
||||
if i == 0 {
|
||||
panic("next stop")
|
||||
}
|
||||
return i + 1
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func f() {
|
||||
defer func() {
|
||||
println("F first")
|
||||
}()
|
||||
for i := 0; i < 1; i = next(i) {
|
||||
defer func() {
|
||||
println("f recover:called")
|
||||
recover()
|
||||
}()
|
||||
}
|
||||
}
|
||||
func main() {
|
||||
f()
|
||||
println("f returned")
|
||||
g()
|
||||
println("g returned")
|
||||
h()
|
||||
println("h returned")
|
||||
i()
|
||||
println("i returned")
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user