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
	
	 Ian Lance Taylor
						Ian Lance Taylor