From 9ebd2806f6e3c71a62d6df28b978d6fec53b50fb Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 31 Mar 2011 16:47:17 +0000 Subject: [PATCH] Taking a slice of an array requires moving the array to the heap. From-SVN: r171792 --- gcc/go/gofrontend/expressions.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 791ab073a44..e295c7d6b29 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -9283,10 +9283,13 @@ Array_index_expression::do_check_types(Gogo*) // A slice of an array requires an addressable array. A slice of a // slice is always possible. - if (this->end_ != NULL - && !array_type->is_open_array_type() - && !this->array_->is_addressable()) - this->report_error(_("array is not addressable")); + if (this->end_ != NULL && !array_type->is_open_array_type()) + { + if (!this->array_->is_addressable()) + this->report_error(_("array is not addressable")); + else + this->array_->address_taken(true); + } } // Return whether this expression is addressable.