mirror of
https://github.com/golang/go.git
synced 2026-02-07 02:09:55 +00:00
cmd/compile: fix mis-compilation for static array initialization
The bug was first introduced when the compiler is still written in C, with CL 2254041. The static array was laid out with the wrong context, causing a stack pointer will be stored in global object. Fixes #61730 Fixes #77193 Change-Id: I22c8393314d251beb53db537043a63714c84f36a Reviewed-on: https://go-review.googlesource.com/c/go/+/737821 Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Keith Randall <khr@golang.org>
This commit is contained in:
parent
adb64adfd7
commit
dae71067ce
2 changed files with 13 additions and 5 deletions
|
|
@ -567,11 +567,7 @@ func anylit(n ir.Node, var_ ir.Node, init *ir.Nodes) {
|
|||
// lay out static data
|
||||
vstat := readonlystaticname(t)
|
||||
|
||||
ctxt := inInitFunction
|
||||
if n.Op() == ir.OARRAYLIT {
|
||||
ctxt = inNonInitFunction
|
||||
}
|
||||
fixedlit(ctxt, initKindStatic, n, vstat, init)
|
||||
fixedlit(inInitFunction, initKindStatic, n, vstat, init)
|
||||
|
||||
// copy static to var
|
||||
appendWalkStmt(init, ir.NewAssignStmt(base.Pos, var_, vstat))
|
||||
|
|
|
|||
|
|
@ -456,3 +456,15 @@ func SlicePut(a []byte, c uint8) []byte {
|
|||
a = a[1:]
|
||||
return a
|
||||
}
|
||||
|
||||
func Issue61730() {
|
||||
var x int
|
||||
// amd64:-"MOVQ .*stmp_"
|
||||
_ = [...][]*int{
|
||||
{&x},
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue