File tree 3 files changed +35
-2
lines changed
3 files changed +35
-2
lines changed Original file line number Diff line number Diff line change @@ -528,7 +528,7 @@ func (b *builder) createRunDefers() {
528
528
forwardParams = append (forwardParams , llvm .Undef (b .dataPtrType ))
529
529
}
530
530
531
- b .createCall (fnType , fnPtr , forwardParams , "" )
531
+ b .createInvoke (fnType , fnPtr , forwardParams , "" )
532
532
533
533
case * ssa.Function :
534
534
// Direct call.
@@ -583,7 +583,7 @@ func (b *builder) createRunDefers() {
583
583
584
584
// Call deferred function.
585
585
fnType , llvmFn := b .getFunction (fn )
586
- b .createCall (fnType , llvmFn , forwardParams , "" )
586
+ b .createInvoke (fnType , llvmFn , forwardParams , "" )
587
587
case * ssa.Builtin :
588
588
db := b .deferBuiltinFuncs [callback ]
589
589
Original file line number Diff line number Diff line change @@ -17,6 +17,12 @@ func main() {
17
17
println ("\n # panic inside defer" )
18
18
panicInsideDefer ()
19
19
20
+ println ("\n # panic inside indirect defer" )
21
+ panicInsideIndirectDefer (callPanic )
22
+
23
+ println ("\n # panic inside closure" )
24
+ panicInsideClosure ()
25
+
20
26
println ("\n # panic replace" )
21
27
panicReplace ()
22
28
}
@@ -77,6 +83,27 @@ func panicInsideDefer() {
77
83
}()
78
84
}
79
85
86
+ func panicInsideIndirectDefer (callback func ()) {
87
+ defer func () {
88
+ printitf ("recovered:" , recover ())
89
+ }()
90
+ defer callback ()
91
+ }
92
+
93
+ func callPanic () {
94
+ panic ("panic" )
95
+ }
96
+
97
+ func panicInsideClosure () {
98
+ msg := "panic"
99
+ defer func () {
100
+ printitf ("recovered:" , recover ())
101
+ }()
102
+ defer func () {
103
+ panic (msg )
104
+ }()
105
+ }
106
+
80
107
func panicReplace () {
81
108
defer func () {
82
109
printitf ("recovered:" , recover ())
Original file line number Diff line number Diff line change @@ -19,6 +19,12 @@ recovered 2: foo
19
19
# panic inside defer
20
20
recovered: panic
21
21
22
+ # panic inside indirect defer
23
+ recovered: panic
24
+
25
+ # panic inside closure
26
+ recovered: panic
27
+
22
28
# panic replace
23
29
panic 1
24
30
panic 2
You can’t perform that action at this time.
0 commit comments