]> Cypherpunks.ru repositories - gostls13.git/commitdiff
[dev.ssa] Merge remote-tracking branch 'origin/master' into mergebranch
authorKeith Randall <khr@golang.org>
Tue, 14 Jun 2016 14:33:48 +0000 (07:33 -0700)
committerKeith Randall <khr@golang.org>
Tue, 14 Jun 2016 14:34:09 +0000 (07:34 -0700)
Change-Id: Idd150294aaeced0176b53d6b95852f5d21ff4fdc

1  2 
src/cmd/compile/internal/gc/ssa.go

index 3bf60ef7780a15153a5950b633cfbb700afe4078,c0e6045216220bd48ffbb9025e4bd252d48bc003..f479900939b0b389e1fabfa6a7ffecefcfa57192
@@@ -2579,8 -2573,11 +2589,11 @@@ func (s *state) call(n *Node, k callKin
                }
                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 {
@@@ -2763,11 -2760,11 +2778,11 @@@ func (s *state) addr(n *Node, bounded b
                                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)