From 17db07f9b5034f22851f32f7700649ac61c44e8f Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 26 Apr 2016 14:11:38 -0700 Subject: [PATCH] cmd/compile: don't discard inlineable but empty functions with binary export format Change-Id: I0f016fa000f949d27847d645b4cdebe68a8abf20 Reviewed-on: https://go-review.googlesource.com/22474 Run-TryBot: Robert Griesemer Reviewed-by: Matthew Dempsky TryBot-Result: Gobot Gobot --- src/cmd/compile/internal/gc/bimport.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/gc/bimport.go b/src/cmd/compile/internal/gc/bimport.go index 7fed8b1342..6fe30cdba9 100644 --- a/src/cmd/compile/internal/gc/bimport.go +++ b/src/cmd/compile/internal/gc/bimport.go @@ -145,7 +145,16 @@ func Import(in *bufio.Reader) { if f := p.funcList[i]; f != nil { // function not yet imported - read body and set it funchdr(f) - f.Func.Inl.Set(p.stmtList()) + body := p.stmtList() + if body == nil { + // Make sure empty body is not interpreted as + // no inlineable body (see also parser.fnbody) + // (not doing so can cause significant performance + // degradation due to unnecessary calls to empty + // functions). + body = []*Node{Nod(OEMPTY, nil, nil)} + } + f.Func.Inl.Set(body) funcbody(f) } else { // function already imported - read body but discard declarations -- 2.48.1