From faf1bdb42b81f75b49307667e170754621b6653f Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Sat, 6 Feb 2016 22:35:34 -0800 Subject: [PATCH] [dev.ssa] cmd/compile: panic doesn't return Panic doesn't return, so record that we immediately exit after a panic call. This will help code analysis. Change-Id: I4d1f67494f97b6aee130c43ff4e44307b2b0f149 Reviewed-on: https://go-review.googlesource.com/19303 Run-TryBot: Keith Randall Reviewed-by: David Chase --- src/cmd/compile/internal/gc/ssa.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 71d5920824..b7019d68b7 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -544,6 +544,15 @@ func (s *state) stmt(n *Node) { // Expression statements case OCALLFUNC, OCALLMETH, OCALLINTER: s.call(n, callNormal) + if n.Op == OCALLFUNC && n.Left.Op == ONAME && n.Left.Class == PFUNC && n.Left.Sym.Pkg == Runtimepkg && n.Left.Sym.Name == "gopanic" { + m := s.mem() + b := s.endBlock() + b.Kind = ssa.BlockExit + b.Control = m + // TODO: never rewrite OPANIC to OCALLFUNC in the + // first place. Need to wait until all backends + // go through SSA. + } case ODEFER: s.call(n.Left, callDefer) case OPROC: -- 2.48.1