]> Cypherpunks repositories - gostls13.git/commitdiff
allow copy to be used without a return value
authorKen Thompson <ken@golang.org>
Wed, 18 Nov 2009 06:00:59 +0000 (22:00 -0800)
committerKen Thompson <ken@golang.org>
Wed, 18 Nov 2009 06:00:59 +0000 (22:00 -0800)
R=rsc
https://golang.org/cl/156060

src/cmd/gc/typecheck.c

index 86633b86d9602a91ce3fdbe8b09976c4e219c03f..3e8823785925fd8254a81d1de6758d52b35fb417 100644 (file)
@@ -762,7 +762,7 @@ reswitch:
                goto ret;
 
        case OCOPY:
-               ok |= Erv;
+               ok |= Etop|Erv;
                args = n->list;
                if(args == nil || args->next == nil) {
                        yyerror("missing arguments to copy");
@@ -772,19 +772,19 @@ reswitch:
                        yyerror("too many arguments to copy");
                        goto error;
                }
-               typecheck(&args->n, Erv);
-               typecheck(&args->next->n, Erv);
-               if(!isslice(args->n->type) || !isslice(args->next->n->type)) {
+               n->left = args->n;
+               n->right = args->next->n;
+               n->type = types[TINT];
+               typecheck(&n->left, Erv);
+               typecheck(&n->right, Erv);
+               if(!isslice(n->left->type) || !isslice(n->right->type)) {
                        yyerror("arguments to copy must be slices");
                        goto error;
                }
-               if(!eqtype(args->n->type, args->next->n->type)) {
+               if(!eqtype(n->left->type, n->right->type)) {
                        yyerror("arguments to copy must be slices of the same type");
                        goto error;
                }
-               n->left = args->n;
-               n->right = args->next->n;
-               n->type = types[TINT];
                goto ret;
 
        case OCONV: