Taking a slice of an array requires moving the array to the heap.
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 31 Mar 2011 16:47:17 +0000 (16:47 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 31 Mar 2011 16:47:17 +0000 (16:47 +0000)
From-SVN: r171792

gcc/go/gofrontend/expressions.cc

index 791ab073a440717fc5a8a8bed79c08bf21873da0..e295c7d6b2966590a568cb289d70c86fed6c2698 100644 (file)
@@ -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.