diff options
Diffstat (limited to 'src/cmd/6g/cgen.c')
-rw-r--r-- | src/cmd/6g/cgen.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/cmd/6g/cgen.c b/src/cmd/6g/cgen.c index 43bec0059..fd8493231 100644 --- a/src/cmd/6g/cgen.c +++ b/src/cmd/6g/cgen.c @@ -717,6 +717,7 @@ bgen(Node *n, int true, Prog *to) int et, a; Node *nl, *nr, *l, *r; Node n1, n2, tmp; + NodeList *ll; Prog *p1, *p2; if(debug['g']) { @@ -834,7 +835,10 @@ bgen(Node *n, int true, Prog *to) p1 = gbranch(AJMP, T); p2 = gbranch(AJMP, T); patch(p1, pc); + ll = n->ninit; // avoid re-genning ninit + n->ninit = nil; bgen(n, 1, p2); + n->ninit = ll; patch(gbranch(AJMP, T), to); patch(p2, pc); goto ret; @@ -1019,13 +1023,13 @@ stkof(Node *n) * memmove(&ns, &n, w); */ void -sgen(Node *n, Node *ns, int32 w) +sgen(Node *n, Node *ns, int64 w) { Node nodl, nodr, oldl, oldr, cx, oldcx, tmp; int32 c, q, odst, osrc; if(debug['g']) { - print("\nsgen w=%d\n", w); + print("\nsgen w=%lld\n", w); dump("r", n); dump("res", ns); } @@ -1034,7 +1038,7 @@ sgen(Node *n, Node *ns, int32 w) fatal("sgen UINF"); if(w < 0) - fatal("sgen copy %d", w); + fatal("sgen copy %lld", w); if(w == 16) if(componentgen(n, ns)) |