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:
parent
79d05e75ca
commit
ff0748670c
@ -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 {
|
||||
|
14
test/fixedbugs/issue18895.dir/p.go
Normal file
14
test/fixedbugs/issue18895.dir/p.go
Normal 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"
|
11
test/fixedbugs/issue18895.dir/q.go
Normal file
11
test/fixedbugs/issue18895.dir/q.go
Normal 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"
|
||||
}
|
7
test/fixedbugs/issue18895.go
Normal file
7
test/fixedbugs/issue18895.go
Normal 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
|
Loading…
Reference in New Issue
Block a user