}
i := s.expr(fn.Left)
itab := s.newValue1(ssa.OpITab, Types[TUINTPTR], i)
+ if k != callNormal {
+ s.nilCheck(itab)
+ }
itabidx := fn.Xoffset + 3*int64(Widthptr) + 8 // offset of fun field in runtime.itab
- itab = s.newValue1I(ssa.OpOffPtr, Types[TUINTPTR], itabidx, itab)
+ itab = s.newValue1I(ssa.OpOffPtr, Ptrto(Types[TUINTPTR]), itabidx, itab)
if k == callNormal {
codeptr = s.newValue2(ssa.OpLoad, Types[TUINTPTR], itab, s.mem())
} else {
s.boundsCheck(i, len)
}
p := s.newValue1(ssa.OpSlicePtr, t, a)
- return s.newValue2(ssa.OpPtrIndex, t, p, i)
+ return s.newValue2(ssa.OpPtrIndex, t, p, i), false
} else { // array
- a := s.addr(n.Left, bounded)
+ a, isVolatile := s.addr(n.Left, bounded)
i := s.expr(n.Right)
- i = s.extendIndex(i)
+ i = s.extendIndex(i, Panicindex)
len := s.constInt(Types[TINT], n.Left.Type.NumElem())
if !n.Bounded {
s.boundsCheck(i, len)