]> Cypherpunks repositories - gostls13.git/commitdiff
gc: be more specific about copy type errors
authorRuss Cox <rsc@golang.org>
Tue, 19 Jan 2010 00:00:13 +0000 (16:00 -0800)
committerRuss Cox <rsc@golang.org>
Tue, 19 Jan 2010 00:00:13 +0000 (16:00 -0800)
Fixes #539.

R=ken2
CC=golang-dev
https://golang.org/cl/190043

src/cmd/gc/typecheck.c

index c63480faa2dae8ebf46f6b3e2b705155bdea0488..0c18097dac54e016376c9c27aa2caef102cc95f3 100644 (file)
@@ -810,12 +810,19 @@ reswitch:
                        goto error;
                toslice(&n->left);
                toslice(&n->right);
+               defaultlit(&n->left, T);
+               defaultlit(&n->right, T);
                if(!isslice(n->left->type) || !isslice(n->right->type)) {
-                       yyerror("arguments to copy must be slices or array pointers");
+                       if(!isslice(n->left->type) && !isslice(n->right->type))
+                               yyerror("arguments to copy must be array pointer or slice; have %lT, %lT", n->left->type, n->right->type);
+                       else if(!isslice(n->left->type))
+                               yyerror("first argument to copy should be array pointer or slice; have %lT", n->left->type);
+                       else
+                               yyerror("second argument to copy should be array pointer or slice; have %lT", n->right->type);
                        goto error;
                }
                if(!eqtype(n->left->type, n->right->type)) {
-                       yyerror("arguments to copy must have the same type element type");
+                       yyerror("arguments to copy have different element types %lT and %lT", n->left->type, n->right->type);
                        goto error;
                }
                goto ret;