Commit ff074867 authored by Matthew Dempsky's avatar Matthew Dempsky

cmd/compile: fix exporting of function bodies

Before CL 36170, we identified all function bodies that needed to be
exported before writing any export data.

With CL 36170, we started identifying additional functions while
exporting function bodies. As a consequence, we cannot use a
range-based for loop for iterating over function bodies anymore.

Fixes #18895.

Change-Id: I9cbefa8d311ca8c9898c8272b2ac365976b02396
Reviewed-on: https://go-review.googlesource.com/45817
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
parent 79d05e75
......@@ -367,9 +367,10 @@ func export(out *bufio.Writer, trace bool) int {
}
// write inlineable function bodies
// Don't use range since funcList may grow.
objcount = 0
for i, f := range p.funcList {
if f != nil {
for i := 0; i < len(p.funcList); i++ {
if f := p.funcList[i]; f != nil {
// function has inlineable body:
// write index and body
if p.trace {
......
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package p
func F() { // ERROR "can inline"
var v t
v.m() // ERROR "inlining call"
}
type t int
func (t) m() {} // ERROR "can inline"
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package q
import "./p"
func x() { // ERROR "can inline x"
p.F() // ERROR "inlining call to .*\.F" "inlining call to .*\.m"
}
// errorcheckdir -0 -m
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package ignored
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment