summaryrefslogtreecommitdiffstats
path: root/llgo/irgen/ssa.go
diff options
context:
space:
mode:
Diffstat (limited to 'llgo/irgen/ssa.go')
-rw-r--r--llgo/irgen/ssa.go19
1 files changed, 6 insertions, 13 deletions
diff --git a/llgo/irgen/ssa.go b/llgo/irgen/ssa.go
index 04570a82db3..4c7b1a6c95c 100644
--- a/llgo/irgen/ssa.go
+++ b/llgo/irgen/ssa.go
@@ -402,7 +402,7 @@ func (u *unit) defineFunction(f *ssa.Function) {
// an unwind block. We can short-circuit the check for defers with
// f.Recover != nil.
if f.Recover != nil || hasDefer(f) {
- fr.unwindBlock = llvm.AddBasicBlock(fr.function, "")
+ fr.unwindBlock = llvm.AddBasicBlock(fr.function, "unwind")
fr.frameptr = fr.builder.CreateAlloca(llvm.Int8Type(), "")
}
@@ -432,7 +432,7 @@ func (u *unit) defineFunction(f *ssa.Function) {
fr.fixupPhis()
if !fr.unwindBlock.IsNil() {
- fr.setupUnwindBlock(f.Recover, f.Signature.Results())
+ fr.setupUnwindBlock(f.Recover)
}
// The init function needs to register the GC roots first. We do this
@@ -623,19 +623,12 @@ func (fr *frame) runDefers() {
fr.runtime.undefer.invoke(fr, retrylpad, fr.frameptr)
}
-func (fr *frame) setupUnwindBlock(rec *ssa.BasicBlock, results *types.Tuple) {
- recoverbb := llvm.AddBasicBlock(fr.function, "")
+func (fr *frame) setupUnwindBlock(rec *ssa.BasicBlock) {
+ var recoverbb llvm.BasicBlock
if rec != nil {
- fr.translateBlock(rec, recoverbb)
- } else if results.Len() == 0 || results.At(0).Anonymous() {
- // TODO(pcc): Remove this code after https://codereview.appspot.com/87210044/ lands
- fr.builder.SetInsertPointAtEnd(recoverbb)
- values := make([]llvm.Value, results.Len())
- for i := range values {
- values[i] = llvm.ConstNull(fr.llvmtypes.ToLLVM(results.At(i).Type()))
- }
- fr.retInf.encode(llvm.GlobalContext(), fr.allocaBuilder, fr.builder, values)
+ recoverbb = fr.blocks[rec.Index]
} else {
+ recoverbb = llvm.AddBasicBlock(fr.function, "recover")
fr.builder.SetInsertPointAtEnd(recoverbb)
fr.builder.CreateUnreachable()
}
OpenPOWER on IntegriCloud