test: add open-coded defer tests for too many exits path

Add test cases that will disable open-coded defer when there are too
many exits path, even though number of defer statements are not greater
than 8.

Updates #14939
Updates #34481

Change-Id: If5af0e107ffc30043bc2902063f8c9b131a8bca4
Reviewed-on: https://go-review.googlesource.com/c/go/+/601635
Reviewed-by: Cherry Mui <cherryyz@google.com>
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
Cuong Manh Le 2024-07-28 20:12:59 +07:00 committed by Gopher Robot
parent 33b247437f
commit 8173a29aaa

View File

@ -84,3 +84,57 @@ label:
fmt.Println("defer")
}()
}
// Test for function with too many exits, which will disable open-coded defer
// even though the number of defer statements is not greater than 8.
func f7() {
defer println(1) // ERROR "open-coded defer"
defer println(1) // ERROR "open-coded defer"
defer println(1) // ERROR "open-coded defer"
defer println(1) // ERROR "open-coded defer"
switch glob {
case 1:
return
case 2:
return
case 3:
return
}
}
func f8() {
defer println(1) // ERROR "stack-allocated defer"
defer println(1) // ERROR "stack-allocated defer"
defer println(1) // ERROR "stack-allocated defer"
defer println(1) // ERROR "stack-allocated defer"
switch glob {
case 1:
return
case 2:
return
case 3:
return
case 4:
return
}
}
func f9() {
defer println(1) // ERROR "open-coded defer"
defer println(1) // ERROR "open-coded defer"
defer println(1) // ERROR "open-coded defer"
defer println(1) // ERROR "open-coded defer"
switch glob {
case 1:
return
case 2:
return
case 3:
return
case 4:
panic("")
}
}