This patch to the Go frontend tweaks the existing error messages about
use of untyped nil to do a better job when nil appears as the first
argument to the builtin append function. This avoids an error about nil
not being a slice type--it's more useful to say that the problem is an
untyped nil. Bootstrapped and ran Go testsuite on
x86_64-unknown-linux-gnu. Committed to mainline.
Ian
diff -r 9931ebbea550 go/expressions.cc
--- a/go/expressions.cc Thu Dec 12 12:13:34 2013 -0800
+++ b/go/expressions.cc Thu Dec 12 12:40:57 2013 -0800
@@ -7310,7 +7310,11 @@
Type* slice_type = args->front()->type();
if (!slice_type->is_slice_type())
{
- error_at(args->front()->location(), "argument 1 must be a slice");
+ if (slice_type->is_nil_type())
+ error_at(args->front()->location(), "use of untyped nil");
+ else
+ error_at(args->front()->location(),
+ "argument 1 must be a slice");
this->set_is_error();
return this;
}
@@ -8008,7 +8012,10 @@
const Expression_list* args = this->args();
if (args == NULL || args->empty())
return Type::make_error_type();
- return args->front()->type();
+ Type *ret = args->front()->type();
+ if (!ret->is_slice_type())
+ return Type::make_error_type();
+ return ret;
}
case BUILTIN_REAL: