diff --git a/src/cmd/compile/internal/gc/inl.go b/src/cmd/compile/internal/gc/inl.go index 17cc61a823..f5c3265a82 100644 --- a/src/cmd/compile/internal/gc/inl.go +++ b/src/cmd/compile/internal/gc/inl.go @@ -150,7 +150,10 @@ func caninl(fn *Node) { fn.Func.Nname.Func.Inl = fn.Nbody fn.Nbody = inlcopylist(fn.Func.Nname.Func.Inl) - fn.Func.Nname.Func.Inldcl = inlcopyslice(fn.Func.Nname.Name.Defn.Func.Dcl) + inldcl := inlcopyslice(fn.Func.Nname.Name.Defn.Func.Dcl) + if len(inldcl) > 0 { + fn.Func.Nname.Func.Inldcl = &inldcl + } fn.Func.Nname.Func.InlCost = int32(maxBudget - budget) // hack, TODO, check for better way to link method nodes back to the thing with the ->inl @@ -569,9 +572,13 @@ func mkinlcall1(np **Node, fn *Node, isddd bool) { //dumplist("ninit pre", ninit); var dcl []*Node - if fn.Name.Defn != nil { // local function - dcl = fn.Func.Inldcl // imported function + if fn.Name.Defn != nil { + // local function + if fn.Func.Inldcl != nil { + dcl = *fn.Func.Inldcl + } } else { + // imported function dcl = fn.Func.Dcl } diff --git a/src/cmd/compile/internal/gc/syntax.go b/src/cmd/compile/internal/gc/syntax.go index 8b4fe8708a..edc3f3ca10 100644 --- a/src/cmd/compile/internal/gc/syntax.go +++ b/src/cmd/compile/internal/gc/syntax.go @@ -153,7 +153,7 @@ type Func struct { Exit *NodeList cvars *[]*Node // closure params Dcl []*Node // autodcl for this func/closure - Inldcl []*Node // copy of dcl for use in inlining + Inldcl *[]*Node // copy of dcl for use in inlining Closgen int Outerfunc *Node Fieldtrack []*Type diff --git a/src/cmd/compile/internal/gc/test b/src/cmd/compile/internal/gc/test new file mode 100755 index 0000000000..5c696bc509 Binary files /dev/null and b/src/cmd/compile/internal/gc/test differ