Commit 2dfb423e authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder

cmd/compile: loop to ensure all autogenerated functions are compiled

I was wrong. There was a need to loop here.

Fixes #24761

Change-Id: If13b3ab72febde930bdaebdddd1c05e0d0446020
Reviewed-on: https://go-review.googlesource.com/105615
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
parent 8f6ae337
......@@ -144,16 +144,17 @@ func dumpLinkerObj(bout *bio.Writer) {
dumpimportstrings()
dumpbasictypes()
// The first call to dumpsignats can generate functions,
// Calls to dumpsignats can generate functions,
// like method wrappers and hash and equality routines.
compileFunctions()
// Process any new signats added during compilation.
// No need to loop here; signats from compiling the generated
// functions should not themselves generate new functions.
// If they do, we'll know about it; the sanity check of
// len(compilequeue) in gc.Main will fail.
dumpsignats()
// Compile any generated functions, process any new resulting types, repeat.
// This can't loop forever, because there is no way to generate an infinite
// number of types in a finite amount of code.
// In the typical case, we loop 0 or 1 times.
// It was not until issue 24761 that we found any code that required a loop at all.
for len(compilequeue) > 0 {
compileFunctions()
dumpsignats()
}
// Dump extra globals.
tmp := externdcl
......
// Copyright 2018 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 a
type T2 struct{}
func (t *T2) M2(a, b float64) {
variadic(a, b)
}
func variadic(points ...float64) {
println(points)
}
// Copyright 2018 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 b
import "./a"
type T1 struct {
*a.T2
}
// compiledir -c=4
// Copyright 2018 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