mirror of git://gcc.gnu.org/git/gcc.git
compiler: make Slice_construction_expression::do_flatten idempotent
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
This commit is contained in:
parent
04bfa1e469
commit
55dccc1e0d
|
|
@ -1,4 +1,4 @@
|
|||
08d221726e3f50cb197a931ba385fac67f66a028
|
||||
7a941ba323660ec7034cd92d4eab466024a3c72c
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
|
|
|||
|
|
@ -12951,8 +12951,8 @@ Slice_construction_expression::do_flatten(Gogo* gogo, Named_object* no,
|
|||
// 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();
|
||||
|
|
|
|||
Loading…
Reference in New Issue