1
0
mirror of https://github.com/golang/go synced 2024-10-05 16:41:21 -06:00

[dev.ssa] cmd/compile/internal/ssa: fix string slice types.

Change-Id: I28bc6373bb42d9abf4f179664dbaab8d514a6ab9
Reviewed-on: https://go-review.googlesource.com/14376
Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
Alexandru Moșoi 2015-09-08 18:18:59 +02:00 committed by Keith Randall
parent ca9e450bed
commit c684d4d26c
2 changed files with 32 additions and 2 deletions

View File

@ -1722,12 +1722,12 @@ func (s *state) expr(n *Node) *ssa.Value {
if n.Right.Left == nil {
low = zero
} else {
low = s.expr(n.Right.Left)
low = s.extendIndex(s.expr(n.Right.Left))
}
if n.Right.Right == nil {
high = len
} else {
high = s.expr(n.Right.Right)
high = s.extendIndex(s.expr(n.Right.Right))
}
// Panic if slice indices are not in bounds.

View File

@ -86,9 +86,39 @@ func testStringSlicePanic() {
failed = true
}
const _Accuracy_name = "BelowExactAbove"
var _Accuracy_index = [...]uint8{0, 5, 10, 15}
func testSmallIndexType_ssa(i int) string {
switch { // prevent inlining
}
return _Accuracy_name[_Accuracy_index[i]:_Accuracy_index[i+1]]
}
func testSmallIndexType() {
tests := []struct {
i int
want string
}{
{0, "Below"},
{1, "Exact"},
{2, "Above"},
}
for i, t := range tests {
if got := testSmallIndexType_ssa(t.i); got != t.want {
println("#", i, "got ", got, ", wanted", t.want)
failed = true
}
}
}
func main() {
testStringSlice()
testStringSlicePanic()
testStructSlice()
testSmallIndexType()
if failed {
panic("failed")