]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/cmd/compile/internal/gc/plive.go
[dev.ssa] Merge remote-tracking branch 'origin/master' into mergebranch
[gostls13.git] / src / cmd / compile / internal / gc / plive.go
index 4d7f0f72a907579fb22e513c04cb04ced368ad17..00ae807609529db647e8d3fbbb6e2340809681ab 100644 (file)
@@ -410,7 +410,7 @@ func newcfg(firstp *obj.Prog) []*BasicBlock {
 
        bb := newblock(firstp)
        cfg = append(cfg, bb)
-       for p := firstp; p != nil; p = p.Link {
+       for p := firstp; p != nil && p.As != obj.AEND; p = p.Link {
                Thearch.Proginfo(p)
                if p.To.Type == obj.TYPE_BRANCH {
                        if p.To.Val == nil {
@@ -438,7 +438,7 @@ func newcfg(firstp *obj.Prog) []*BasicBlock {
        // contained instructions until a label is reached.  Add edges
        // for branches and fall-through instructions.
        for _, bb := range cfg {
-               for p := bb.last; p != nil; p = p.Link {
+               for p := bb.last; p != nil && p.As != obj.AEND; p = p.Link {
                        if p.Opt != nil && p != bb.last {
                                break
                        }
@@ -447,6 +447,8 @@ func newcfg(firstp *obj.Prog) []*BasicBlock {
                        // Stop before an unreachable RET, to avoid creating
                        // unreachable control flow nodes.
                        if p.Link != nil && p.Link.As == obj.ARET && p.Link.Mode == 1 {
+                               // TODO: remove after SSA is done.  SSA does not
+                               // generate any unreachable RET instructions.
                                break
                        }
 
@@ -1366,7 +1368,7 @@ func livenessepilogue(lv *Liveness) {
                                                }
                                                n = lv.vars[j]
                                                if n.Class != PPARAM {
-                                                       yyerrorl(int(p.Lineno), "internal error: %v %v recorded as live on entry", Curfn.Func.Nname, Nconv(n, obj.FmtLong))
+                                                       yyerrorl(int(p.Lineno), "internal error: %v %v recorded as live on entry, p.Pc=%v", Curfn.Func.Nname, Nconv(n, obj.FmtLong), p.Pc)
                                                }
                                        }
                                }