]> Cypherpunks repositories - gostls13.git/commitdiff
order of evaluation in function args
authorKen Thompson <ken@golang.org>
Wed, 3 Sep 2008 00:12:32 +0000 (17:12 -0700)
committerKen Thompson <ken@golang.org>
Wed, 3 Sep 2008 00:12:32 +0000 (17:12 -0700)
R=r
OCL=14733
CL=14733

src/cmd/gc/walk.c

index f44106695c157f4c80f998b389c26e3ce0df1777..3f2e856fd88971c63f51bf6a605deead806b3dae 100644 (file)
@@ -2392,57 +2392,59 @@ convas(Node *n)
        if(n->op != OAS)
                fatal("convas: not OAS %O", n->op);
 
-       ullmancalc(n);
        l = n->left;
        r = n->right;
        if(l == N || r == N)
-               return n;
+               goto out;
 
        lt = l->type;
        rt = r->type;
        if(lt == T || rt == T)
-               return n;
+               goto out;
 
        if(n->left->op == OINDEX)
        if(isptrto(n->left->left->type, TMAP)) {
                *n = *mapop(n, Elv);
-               return n;
+               goto out;
        }
 
        if(n->left->op == OINDEXPTR)
        if(n->left->left->type->etype == TMAP) {
                *n = *mapop(n, Elv);
-               return n;
+               goto out;
        }
 
        if(n->left->op == OSEND)
        if(n->left->type != T) {
                *n = *chanop(n, Elv);
-               return n;
+               goto out;
        }
 
        if(eqtype(lt, rt, 0))
-               return n;
+               goto out;
 
        r = isandss(lt, r);
        if(r != N) {
                n->right = r;
                walktype(n, Etop);
-               return n;
+               goto out;
        }
 
        if(isptrdarray(lt) && isptrarray(rt)) {
                if(!eqtype(lt->type->type, rt->type->type, 0))
                        goto bad;
                *n = *arrayop(n, Etop);
-               return n;
+               goto out;
        }
 
        if(ascompat(lt, rt))
-               return n;
+               goto out;
 
 bad:
        badtype(n->op, lt, rt);
+
+out:
+       ullmancalc(n);
        return n;
 }