Fix error messages for invalid array subscripts. Previously the error for an out-of-range array subscript was off by one when indicating the valid range. Fix this, and print a different message for the case where the array is empty as this would not make sense for the existing error message. Change-Id: I2aba48c21559a47ce159d8dac2d0adc4fbcb310a Reviewed-on: https://gn-review.googlesource.com/2860 Reviewed-by: Scott Graham <scottmg@google.com> Commit-Queue: Scott Graham <scottmg@google.com>
diff --git a/tools/gn/parse_tree.cc b/tools/gn/parse_tree.cc index 20f272b..e2201d4 100644 --- a/tools/gn/parse_tree.cc +++ b/tools/gn/parse_tree.cc
@@ -269,12 +269,18 @@ "You gave me " + base::Int64ToString(index_int) + "."); return false; } + if (max_len == 0) { + *err = Err(index_->GetRange(), "Array subscript out of range.", + "You gave me " + base::Int64ToString(index_int) + " but the " + + "array has no elements."); + return false; + } size_t index_sizet = static_cast<size_t>(index_int); if (index_sizet >= max_len) { *err = Err(index_->GetRange(), "Array subscript out of range.", "You gave me " + base::Int64ToString(index_int) + " but I was expecting something from 0 to " + - base::NumberToString(max_len) + ", inclusive."); + base::NumberToString(max_len - 1) + ", inclusive."); return false; }