]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: delay inlinable method compilation for -c=1
authorThan McIntosh <thanm@google.com>
Fri, 15 May 2020 16:19:07 +0000 (12:19 -0400)
committerThan McIntosh <thanm@google.com>
Thu, 21 May 2020 14:45:26 +0000 (14:45 +0000)
commitfed33d76bcf5d378f0322b308768d156239b0bfc
treef8e3b2a2b9909ce61bbddbb503d71e67f60feab3
parent0cfe1fb87815c4bee910f6f066f7872800dbce24
cmd/compile: delay inlinable method compilation for -c=1

When the concurrent back end is not enabled, it is possible to have a
scenario where: we compile a specific inlinable non-pointer-receiver
method T.M, then at some point later on in the compilation we visit a
type that triggers generation of a pointer-receiver wrapper (*T).M,
which then results in an inline of T.M into (*T).M. This introduces
subtle differences in the DWARF as compared with when the concurrent
back end is enabled (in the concurrent case, by the time we run the
SSA back end on T.M is is marked as being inlined, whereas in the
non-current case it is not marked inlined).

As a fix, at the point where we would normally compile a given
function in the xtop list right away, if the function is a method AND
is inlinable AND hasn't been inlined, then delay its compilation until
compileFunctions (so as to make sure that when we do compile it, all
possible inlining has been complete). In addition, make sure that
the abstract function symbol for the inlined function gets recorded
correctly.

Fixes #38068.

Change-Id: I57410ab5658bd4ee5b4b80750518e9b20fd6ba52
Reviewed-on: https://go-review.googlesource.com/c/go/+/234178
Run-TryBot: Than McIntosh <thanm@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/pgen.go
src/cmd/internal/obj/objfile.go