mirror of
https://github.com/golang/go
synced 2024-11-23 04:30:03 -07:00
spec: clarify when constant slice indices must be in range
This documents the status quo for most implementations, with one exception: gc generates a run-time error for constant but out-of-range indices when slicing a constant string. See issue 7200 for a detailed discussion. LGTM=r R=r, rsc, iant, ken CC=golang-codereviews https://golang.org/cl/72160044
This commit is contained in:
parent
f4359afa7f
commit
6ffd235161
@ -1,6 +1,6 @@
|
|||||||
<!--{
|
<!--{
|
||||||
"Title": "The Go Programming Language Specification",
|
"Title": "The Go Programming Language Specification",
|
||||||
"Subtitle": "Version of March 6, 2014",
|
"Subtitle": "Version of March 7, 2014",
|
||||||
"Path": "/ref/spec"
|
"Path": "/ref/spec"
|
||||||
}-->
|
}-->
|
||||||
|
|
||||||
@ -2691,7 +2691,7 @@ For arrays or strings, the indices are <i>in range</i> if
|
|||||||
otherwise they are <i>out of range</i>.
|
otherwise they are <i>out of range</i>.
|
||||||
For slices, the upper index bound is the slice capacity <code>cap(a)</code> rather than the length.
|
For slices, the upper index bound is the slice capacity <code>cap(a)</code> rather than the length.
|
||||||
A <a href="#Constants">constant</a> index must be non-negative and representable by a value of type
|
A <a href="#Constants">constant</a> index must be non-negative and representable by a value of type
|
||||||
<code>int</code>.
|
<code>int</code>; for arrays or constant strings, constant indices must also be in range.
|
||||||
If both indices are constant, they must satisfy <code>low <= high</code>.
|
If both indices are constant, they must satisfy <code>low <= high</code>.
|
||||||
If the indices are out of range at run time, a <a href="#Run_time_panics">run-time panic</a> occurs.
|
If the indices are out of range at run time, a <a href="#Run_time_panics">run-time panic</a> occurs.
|
||||||
</p>
|
</p>
|
||||||
@ -2751,7 +2751,7 @@ If the sliced operand is an array, it must be <a href="#Address_operators">addre
|
|||||||
The indices are <i>in range</i> if <code>0 <= low <= high <= max <= cap(a)</code>,
|
The indices are <i>in range</i> if <code>0 <= low <= high <= max <= cap(a)</code>,
|
||||||
otherwise they are <i>out of range</i>.
|
otherwise they are <i>out of range</i>.
|
||||||
A <a href="#Constants">constant</a> index must be non-negative and representable by a value of type
|
A <a href="#Constants">constant</a> index must be non-negative and representable by a value of type
|
||||||
<code>int</code>.
|
<code>int</code>; for arrays, constant indices must also be in range.
|
||||||
If multiple indices are constant, the constants that are present must be in range relative to each
|
If multiple indices are constant, the constants that are present must be in range relative to each
|
||||||
other.
|
other.
|
||||||
If the indices are out of range at run time, a <a href="#Run_time_panics">run-time panic</a> occurs.
|
If the indices are out of range at run time, a <a href="#Run_time_panics">run-time panic</a> occurs.
|
||||||
|
Loading…
Reference in New Issue
Block a user