diff options
author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-09-17 00:11:27 +0000 |
---|---|---|
committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-09-17 00:11:27 +0000 |
commit | 09add252bfa886bc38bca4922478ace9a0af4111 (patch) | |
tree | c6dc043d52112964dd9db2cb59534ee92901652a /gcc/go | |
parent | 967676377ba5ff5de0117fbc72a73900dff4d6a4 (diff) | |
download | gcc-09add252bfa886bc38bca4922478ace9a0af4111.tar.gz |
Improve errors for invalid use of [...]type.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178921 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/go')
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/parse.cc | 17 |
2 files changed, 16 insertions, 3 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 32f0612a1b0..70f5f7c4423 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -11789,7 +11789,7 @@ Array_construction_expression::do_check_types(Gogo*) } Expression* length = at->length(); - if (length != NULL) + if (length != NULL && !length->is_error_expression()) { mpz_t val; mpz_init(val); diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc index 059d9646f13..b18c9892285 100644 --- a/gcc/go/gofrontend/parse.cc +++ b/gcc/go/gofrontend/parse.cc @@ -2761,8 +2761,21 @@ Parse::primary_expr(bool may_be_sink, bool may_be_composite_lit, else this->advance_token(); if (expr->is_error_expression()) - return expr; - ret = Expression::make_cast(ret->type(), expr, loc); + ret = expr; + else + { + Type* t = ret->type(); + if (t->classification() == Type::TYPE_ARRAY + && t->array_type()->length() != NULL + && t->array_type()->length()->is_nil_expression()) + { + error_at(ret->location(), + "invalid use of %<...%> in type conversion"); + ret = Expression::make_error(loc); + } + else + ret = Expression::make_cast(t, expr, loc); + } } } |