diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-12-22 16:43:28 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-12-22 16:43:28 +0000 |
commit | d7b24d5556b2dae71e1ed3c907d33db21cd2ce72 (patch) | |
tree | 6aafaec025a855ec9fa8bb9a0cce3a4fa9dcbb14 /gcc | |
parent | bb14e19c2be54dd10f40d705364e08524ec8310c (diff) | |
download | gcc-d7b24d5556b2dae71e1ed3c907d33db21cd2ce72.zip gcc-d7b24d5556b2dae71e1ed3c907d33db21cd2ce72.tar.gz gcc-d7b24d5556b2dae71e1ed3c907d33db21cd2ce72.tar.bz2 |
compiler: do not propagate address-taken of a slice element to the slice
Array_index_expression may be used for indexing/slicing array or
slice. If a slice element is address taken, the slice itself is
not necessarily address taken. Only propagate address-taken for
arrays.
Reviewed-on: https://go-review.googlesource.com/83877
From-SVN: r255977
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 8 | ||||
-rw-r--r-- | gcc/go/gofrontend/expressions.h | 3 |
3 files changed, 10 insertions, 3 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index b81922e..3ba3462 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -83fc0e440b8c151edc5b1c67006257aad522ca04 +9b9bece388d1bacdc9d1d0024e722ffe449d221d The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 8ae1013..f5adc18 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -10871,6 +10871,14 @@ Array_index_expression::do_is_addressable() const return this->array_->is_addressable(); } +void +Array_index_expression::do_address_taken(bool escapes) +{ + // In &x[0], if x is a slice, then x's address is not taken. + if (!this->array_->type()->is_slice_type()) + this->array_->address_taken(escapes); +} + // Get the backend representation for an array index. Bexpression* diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h index a4f6558..cb60890 100644 --- a/gcc/go/gofrontend/expressions.h +++ b/gcc/go/gofrontend/expressions.h @@ -2896,8 +2896,7 @@ class Array_index_expression : public Expression do_is_addressable() const; void - do_address_taken(bool escapes) - { this->array_->address_taken(escapes); } + do_address_taken(bool escapes); void do_issue_nil_check() |