Because of the way we handle call expressions with multiple results,
it's possible for expressions to be flattened more than once. In the
case of Slice_construction_expression, allocating the slice storage
multiple times caused a compiler crash as one of the
Temporary_statement's wound up not getting a backend expression.
Test case is https://golang.org/cl/34020.
Reviewed-on: https://go-review.googlesource.com/34026
From-SVN: r243442
-08d221726e3f50cb197a931ba385fac67f66a028
+7a941ba323660ec7034cd92d4eab466024a3c72c
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
// Base class flattening first
this->Array_construction_expression::do_flatten(gogo, no, inserter);
- // Create an stack-allocated storage temp if storage won't escape
- if (!this->storage_escapes_)
+ // Create a stack-allocated storage temp if storage won't escape
+ if (!this->storage_escapes_ && this->slice_storage_ == NULL)
{
Location loc = this->location();
this->array_val_ = create_array_val();