cmd/gc: fix method value closures on nacl amd64p32

The code was assuming that pointer alignment is the
maximum alignment, but on NaCl uint64 alignment is
even more strict.

Brad checked in the test earlier today; this fixes the build.

Fixes #7863.

TBR=iant
CC=golang-codereviews
https://golang.org/cl/98630046
This commit is contained in:
Russ Cox 2014-05-27 23:58:36 -04:00
parent eeb87c3660
commit 6c0bcb1863
2 changed files with 4 additions and 0 deletions

View File

@ -374,6 +374,8 @@ makepartialcall(Node *fn, Type *t0, Node *meth)
cv = nod(OCLOSUREVAR, N, N);
cv->xoffset = widthptr;
cv->type = rcvrtype;
if(cv->type->align > widthptr)
cv->xoffset = cv->type->align;
ptr = nod(ONAME, N, N);
ptr->sym = lookup("rcvr");
ptr->class = PAUTO;

View File

@ -1438,6 +1438,8 @@ funccompile(Node *n, int isclosure)
// record offset to actual frame pointer.
// for closure, have to skip over leading pointers and PC slot.
// TODO(rsc): this is the old jit closure handling code.
// with the new closures, isclosure is always 0; delete this block.
nodfp->xoffset = 0;
if(isclosure) {
NodeList *l;