From: Ken Thompson Date: Sat, 28 Jun 2008 00:53:23 +0000 (-0700) Subject: another both sides functions X-Git-Tag: weekly.2009-11-06~3593 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ca029d34b659c2086ea6f9c84fd9281f2b9bd5ad;p=gostls13.git another both sides functions SVN=125230 --- diff --git a/src/cmd/6g/cgen.c b/src/cmd/6g/cgen.c index c0e685318d..b8c49b4f92 100644 --- a/src/cmd/6g/cgen.c +++ b/src/cmd/6g/cgen.c @@ -29,8 +29,10 @@ cgen(Node *n, Node *res) if(n->op == OINDREG) fatal("cgen: this is going to misscompile"); if(res->ullman >= UINF) { - dump("fncalls", n); - fatal("cgen: node and result functions"); + tempname(&n1, n->type); + cgen(n, &n1); + cgen(&n1, res); + goto ret; } } @@ -45,7 +47,7 @@ cgen(Node *n, Node *res) cgen(n, &n1); cgen(&n1, res); regfree(&n1); - return; + goto ret; } igen(res, &n1, N); diff --git a/src/cmd/6g/gen.c b/src/cmd/6g/gen.c index 36e0ea9060..f4b8652f6a 100644 --- a/src/cmd/6g/gen.c +++ b/src/cmd/6g/gen.c @@ -746,7 +746,12 @@ cgen_asop(Node *n) nr = n->right; if(nr->ullman >= UINF && nl->ullman >= UINF) { - fatal("cgen_asop: both sides call"); + tempname(&n1, nr->type); + cgen(nr, &n1); + n2 = *n; + n2.right = &n1; + cgen_asop(&n2); + return; } if(nr->ullman > nl->ullman) { @@ -881,9 +886,6 @@ cgen_as(Node *nl, Node *nr, int op) ullmancalc(nr); } - if(nr->ullman >= UINF && nl->ullman >= UINF) { - fatal("cgen_as both sides call"); - } cgen(nr, nl); ret: