From b10f32fb7bf113fda70c7b0e8f64d2c73cf05a9c Mon Sep 17 00:00:00 2001 From: ian Date: Tue, 25 Aug 2015 20:31:51 +0000 Subject: [PATCH] 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 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@227191 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/expressions.cc | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 1bde6690e2a6..86d163b1f52f 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -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. diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index c0e5fc53a822..f1873cd396c3 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -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(); -- 2.47.3