Commit 55dccc1e by Ian Lance Taylor

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
parent 04bfa1e4
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();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment