len = s.constInt(Types[TINT], n.Left.Type.Bound)
elemtype = n.Left.Type.Type
}
- s.boundsCheck(i, len)
+ if !n.Bounded {
+ s.boundsCheck(i, len)
+ }
return s.newValue2(ssa.OpArrayIndex, elemtype, a, i)
} else { // slice
p := s.addr(n)
i := s.expr(n.Right)
i = s.extendIndex(i)
len := s.newValue1(ssa.OpSliceLen, Types[TUINTPTR], a)
- s.boundsCheck(i, len)
+ if !n.Bounded {
+ s.boundsCheck(i, len)
+ }
p := s.newValue1(ssa.OpSlicePtr, Ptrto(n.Left.Type.Type), a)
return s.newValue2(ssa.OpPtrIndex, Ptrto(n.Left.Type.Type), p, i)
} else { // array
i := s.expr(n.Right)
i = s.extendIndex(i)
len := s.constInt(Types[TINT], n.Left.Type.Bound)
- s.boundsCheck(i, len)
+ if !n.Bounded {
+ s.boundsCheck(i, len)
+ }
return s.newValue2(ssa.OpPtrIndex, Ptrto(n.Left.Type.Type), a, i)
}
case OIND:
}
}
+func emptyRange_ssa(b []byte) bool {
+ for _, x := range b {
+ _ = x
+ }
+ return true
+}
+
+func testEmptyRange() {
+ if !emptyRange_ssa([]byte{}) {
+ println("emptyRange_ssa([]byte{})=false, want true")
+ failed = true
+ }
+}
+
var failed = false
func main() {
testPhiControl()
+ testEmptyRange()
if failed {
panic("failed")
}