compiler: Allow string slices with start index == length.

Avoid an off-by-one error when checking the start index of a string
    slice by allowing the start index to be the string length instead
    of the string length - 1.
    
    Fixes golang/go#11522.
    
    Reviewed-on: https://go-review.googlesource.com/13030

From-SVN: r227191
This commit is contained in:
Ian Lance Taylor 2015-08-25 20:31:51 +00:00
parent c316b5e4f1
commit 60c47c0073
2 changed files with 5 additions and 2 deletions

View File

@ -1,4 +1,4 @@
d6d59d5927c4ea0c02468ebc6a2df431fb64595a
14ca4b6130b9a7132d132f418e9ea283b3a52c08
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -10341,7 +10341,10 @@ String_index_expression::do_check_types(Gogo*)
{
ival_valid = true;
if (mpz_sgn(ival) < 0
|| (sval_valid && mpz_cmp_ui(ival, sval.length()) >= 0))
|| (sval_valid
&& (this->end_ == NULL
? mpz_cmp_ui(ival, sval.length()) >= 0
: mpz_cmp_ui(ival, sval.length()) > 0)))
{
error_at(this->start_->location(), "string index out of bounds");
this->set_is_error();