diff options
| author | Peter Collingbourne <peter@pcc.me.uk> | 2014-12-28 22:39:01 +0000 |
|---|---|---|
| committer | Peter Collingbourne <peter@pcc.me.uk> | 2014-12-28 22:39:01 +0000 |
| commit | b6edff93aecdc9fb6a3dede4e79181469ea680b8 (patch) | |
| tree | 5dadcc001d7434a2c70f029874c328c8f26c2993 | |
| parent | 06039218f5ef078b7a815a68d2f9eca44658d7f0 (diff) | |
| download | bcm5719-llvm-b6edff93aecdc9fb6a3dede4e79181469ea680b8.tar.gz bcm5719-llvm-b6edff93aecdc9fb6a3dede4e79181469ea680b8.zip | |
irgen: do not emit an extra terminator for panic thunks
Found with GoSmith.
Differential Revision: http://reviews.llvm.org/D6714
llvm-svn: 224904
| -rw-r--r-- | llgo/irgen/builtins.go | 6 | ||||
| -rw-r--r-- | llgo/irgen/ssa.go | 4 | ||||
| -rw-r--r-- | llgo/test/irgen/go-panic.go | 10 |
3 files changed, 16 insertions, 4 deletions
diff --git a/llgo/irgen/builtins.go b/llgo/irgen/builtins.go index 404962fd85b..8e4dc872210 100644 --- a/llgo/irgen/builtins.go +++ b/llgo/irgen/builtins.go @@ -110,7 +110,9 @@ func (fr *frame) callRecover(isDeferredRecover bool) *govalue { return newValue(llv, eface) } -func (fr *frame) callPanic(arg *govalue) { +func (fr *frame) callPanic(arg *govalue, term bool) { fr.runtime.panic.call(fr, arg.value) - fr.builder.CreateUnreachable() + if term { + fr.builder.CreateUnreachable() + } } diff --git a/llgo/irgen/ssa.go b/llgo/irgen/ssa.go index 2c7c20200bd..706eb7790e7 100644 --- a/llgo/irgen/ssa.go +++ b/llgo/irgen/ssa.go @@ -1079,7 +1079,7 @@ func (fr *frame) instruction(instr ssa.Instruction) { case *ssa.Panic: arg := fr.value(instr.X) - fr.callPanic(arg) + fr.callPanic(arg, true) case *ssa.Phi: typ := instr.Type() @@ -1190,7 +1190,7 @@ func (fr *frame) callBuiltin(typ types.Type, builtin *ssa.Builtin, args []ssa.Va return nil case "panic": - fr.callPanic(fr.value(args[0])) + fr.callPanic(fr.value(args[0]), false) return nil case "recover": diff --git a/llgo/test/irgen/go-panic.go b/llgo/test/irgen/go-panic.go new file mode 100644 index 00000000000..35b0a47bb9b --- /dev/null +++ b/llgo/test/irgen/go-panic.go @@ -0,0 +1,10 @@ +// RUN: llgo -S -emit-llvm -o - %s | FileCheck %s + +package foo + +func F() { + // CHECK: call void @__go_panic + // CHECK-NEXT: ret void + // CHECK-NEXT: } + go panic("") +} |

