]> Cypherpunks repositories - gostls13.git/commitdiff
test: add open-coded defer tests for too many exits path
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Sun, 28 Jul 2024 13:12:59 +0000 (20:12 +0700)
committerGopher Robot <gobot@golang.org>
Mon, 29 Jul 2024 14:30:07 +0000 (14:30 +0000)
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>
test/defererrcheck.go

index 95b91da54db987b5f0746669f4d5db6389022a87..c20f090bb8f13908df883bc4b32d8c5836619897 100644 (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("")
+       }
+}