Index: irgen/builtins.go =================================================================== --- irgen/builtins.go +++ irgen/builtins.go @@ -110,7 +110,9 @@ 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() + } } Index: irgen/ssa.go =================================================================== --- irgen/ssa.go +++ irgen/ssa.go @@ -1079,7 +1079,7 @@ 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 @@ return nil case "panic": - fr.callPanic(fr.value(args[0])) + fr.callPanic(fr.value(args[0]), false) return nil case "recover": Index: test/irgen/go-panic.go =================================================================== --- /dev/null +++ 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("") +}