From 8173a29aaa670a7b958f05a96a74933ee3ec4469 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Sun, 28 Jul 2024 20:12:59 +0700 Subject: [PATCH] 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 Auto-Submit: Cuong Manh Le LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- test/defererrcheck.go | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/test/defererrcheck.go b/test/defererrcheck.go index 95b91da54d..c20f090bb8 100644 --- a/test/defererrcheck.go +++ b/test/defererrcheck.go @@ -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("") + } +}