1
0
mirror of https://github.com/golang/go synced 2024-11-26 16:46:58 -07:00

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: Robert Griesemer <gri@golang.org>
This commit is contained in:
Matthew Dempsky 2017-06-14 19:57:11 -07:00
parent 79d05e75ca
commit ff0748670c
4 changed files with 35 additions and 2 deletions

View File

@ -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 {

View File

@ -0,0 +1,14 @@
// 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"

View File

@ -0,0 +1,11 @@
// 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"
}

View File

@ -0,0 +1,7 @@
// 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