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;