mirror of https://github.com/golang/go.git
cmd/compile/internal/gc: rename Fatal to Fatalf
This helps vet see a real issue:
cmd/internal/gc$ go vet
gen.go:1223: unreachable code
Fixes #12106.
Change-Id: I720868b07ae6b6d5a4dc6b238baa8c9c889da6d8
Reviewed-on: https://go-review.googlesource.com/14083
Reviewed-by: Minux Ma <minux@golang.org>
Run-TryBot: Minux Ma <minux@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
af799d94f9
commit
3c9fa388df
|
|
@ -36,10 +36,10 @@ func defframe(ptxt *obj.Prog) {
|
|||
continue
|
||||
}
|
||||
if n.Class != gc.PAUTO {
|
||||
gc.Fatal("needzero class %d", n.Class)
|
||||
gc.Fatalf("needzero class %d", n.Class)
|
||||
}
|
||||
if n.Type.Width%int64(gc.Widthptr) != 0 || n.Xoffset%int64(gc.Widthptr) != 0 || n.Type.Width == 0 {
|
||||
gc.Fatal("var %v has size %d offset %d", gc.Nconv(n, obj.FmtLong), int(n.Type.Width), int(n.Xoffset))
|
||||
gc.Fatalf("var %v has size %d offset %d", gc.Nconv(n, obj.FmtLong), int(n.Type.Width), int(n.Xoffset))
|
||||
}
|
||||
|
||||
if lo != hi && n.Xoffset+n.Type.Width >= lo-int64(2*gc.Widthreg) {
|
||||
|
|
@ -124,7 +124,7 @@ func zerorange(p *obj.Prog, frame int64, lo int64, hi int64, ax *uint32) *obj.Pr
|
|||
if cnt%int64(gc.Widthreg) != 0 {
|
||||
// should only happen with nacl
|
||||
if cnt%int64(gc.Widthptr) != 0 {
|
||||
gc.Fatal("zerorange count not a multiple of widthptr %d", cnt)
|
||||
gc.Fatalf("zerorange count not a multiple of widthptr %d", cnt)
|
||||
}
|
||||
p = appendpp(p, x86.AMOVL, obj.TYPE_REG, x86.REG_AX, 0, obj.TYPE_MEM, x86.REG_SP, frame+lo)
|
||||
lo += int64(gc.Widthptr)
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ func gmove(f *gc.Node, t *gc.Node) {
|
|||
|
||||
switch uint32(ft)<<16 | uint32(tt) {
|
||||
default:
|
||||
gc.Fatal("gmove %v -> %v", gc.Tconv(f.Type, obj.FmtLong), gc.Tconv(t.Type, obj.FmtLong))
|
||||
gc.Fatalf("gmove %v -> %v", gc.Tconv(f.Type, obj.FmtLong), gc.Tconv(t.Type, obj.FmtLong))
|
||||
|
||||
/*
|
||||
* integer copy and truncate
|
||||
|
|
@ -621,7 +621,7 @@ func gins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
|
||||
case x86.ALEAQ:
|
||||
if f != nil && gc.Isconst(f, gc.CTNIL) {
|
||||
gc.Fatal("gins LEAQ nil %v", f.Type)
|
||||
gc.Fatalf("gins LEAQ nil %v", f.Type)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -651,11 +651,11 @@ func gins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
if w != 0 && ((f != nil && p.From.Width < int64(w)) || (t != nil && p.To.Width > int64(w))) {
|
||||
gc.Dump("f", f)
|
||||
gc.Dump("t", t)
|
||||
gc.Fatal("bad width: %v (%d, %d)\n", p, p.From.Width, p.To.Width)
|
||||
gc.Fatalf("bad width: %v (%d, %d)\n", p, p.From.Width, p.To.Width)
|
||||
}
|
||||
|
||||
if p.To.Type == obj.TYPE_ADDR && w > 0 {
|
||||
gc.Fatal("bad use of addr: %v", p)
|
||||
gc.Fatalf("bad use of addr: %v", p)
|
||||
}
|
||||
|
||||
return p
|
||||
|
|
@ -675,13 +675,13 @@ func ginsnop() {
|
|||
*/
|
||||
func optoas(op int, t *gc.Type) int {
|
||||
if t == nil {
|
||||
gc.Fatal("optoas: t is nil")
|
||||
gc.Fatalf("optoas: t is nil")
|
||||
}
|
||||
|
||||
a := obj.AXXX
|
||||
switch uint32(op)<<16 | uint32(gc.Simtype[t.Etype]) {
|
||||
default:
|
||||
gc.Fatal("optoas: no entry %v-%v", gc.Oconv(int(op), 0), t)
|
||||
gc.Fatalf("optoas: no entry %v-%v", gc.Oconv(int(op), 0), t)
|
||||
|
||||
case gc.OADDR<<16 | gc.TPTR32:
|
||||
a = x86.ALEAL
|
||||
|
|
@ -1223,7 +1223,7 @@ func jmptoset(jmp int) int {
|
|||
case x86.AJPS:
|
||||
return x86.ASETPS
|
||||
}
|
||||
gc.Fatal("jmptoset: no entry for %v", gc.Oconv(jmp, 0))
|
||||
gc.Fatalf("jmptoset: no entry for %v", gc.Oconv(jmp, 0))
|
||||
panic("unreachable")
|
||||
}
|
||||
|
||||
|
|
@ -1359,7 +1359,7 @@ func sudoaddable(as int, n *gc.Node, a *obj.Addr) bool {
|
|||
|
||||
for i := 1; i < o; i++ {
|
||||
if oary[i] >= 0 {
|
||||
gc.Fatal("can't happen")
|
||||
gc.Fatalf("can't happen")
|
||||
}
|
||||
gins(movptr, &n1, reg)
|
||||
gc.Cgen_checknil(reg)
|
||||
|
|
|
|||
|
|
@ -873,10 +873,10 @@ func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int {
|
|||
*/
|
||||
func copyas(a *obj.Addr, v *obj.Addr) bool {
|
||||
if x86.REG_AL <= a.Reg && a.Reg <= x86.REG_R15B {
|
||||
gc.Fatal("use of byte register")
|
||||
gc.Fatalf("use of byte register")
|
||||
}
|
||||
if x86.REG_AL <= v.Reg && v.Reg <= x86.REG_R15B {
|
||||
gc.Fatal("use of byte register")
|
||||
gc.Fatalf("use of byte register")
|
||||
}
|
||||
|
||||
if a.Type != v.Type || a.Name != v.Name || a.Reg != v.Reg {
|
||||
|
|
|
|||
|
|
@ -264,7 +264,7 @@ func proginfo(p *obj.Prog) {
|
|||
info := &p.Info
|
||||
*info = progtable[p.As]
|
||||
if info.Flags == 0 {
|
||||
gc.Fatal("unknown instruction %v", p)
|
||||
gc.Fatalf("unknown instruction %v", p)
|
||||
}
|
||||
|
||||
if (info.Flags&gc.ShiftCX != 0) && p.From.Type != obj.TYPE_CONST {
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ func blockcopy(n, res *gc.Node, osrc, odst, w int64) {
|
|||
var op int
|
||||
switch align {
|
||||
default:
|
||||
gc.Fatal("sgen: invalid alignment %d for %v", align, n.Type)
|
||||
gc.Fatalf("sgen: invalid alignment %d for %v", align, n.Type)
|
||||
|
||||
case 1:
|
||||
op = arm.AMOVB
|
||||
|
|
@ -76,12 +76,12 @@ func blockcopy(n, res *gc.Node, osrc, odst, w int64) {
|
|||
}
|
||||
|
||||
if w%int64(align) != 0 {
|
||||
gc.Fatal("sgen: unaligned size %d (align=%d) for %v", w, align, n.Type)
|
||||
gc.Fatalf("sgen: unaligned size %d (align=%d) for %v", w, align, n.Type)
|
||||
}
|
||||
c := int32(w / int64(align))
|
||||
|
||||
if osrc%int64(align) != 0 || odst%int64(align) != 0 {
|
||||
gc.Fatal("sgen: unaligned offset src %d or dst %d (align %d)", osrc, odst, align)
|
||||
gc.Fatalf("sgen: unaligned offset src %d or dst %d (align %d)", osrc, odst, align)
|
||||
}
|
||||
|
||||
// if we are copying forward on the stack and
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ func cgen64(n *gc.Node, res *gc.Node) {
|
|||
if res.Op != gc.OINDREG && res.Op != gc.ONAME {
|
||||
gc.Dump("n", n)
|
||||
gc.Dump("res", res)
|
||||
gc.Fatal("cgen64 %v of %v", gc.Oconv(int(n.Op), 0), gc.Oconv(int(res.Op), 0))
|
||||
gc.Fatalf("cgen64 %v of %v", gc.Oconv(int(n.Op), 0), gc.Oconv(int(res.Op), 0))
|
||||
}
|
||||
|
||||
l := n.Left
|
||||
|
|
@ -35,7 +35,7 @@ func cgen64(n *gc.Node, res *gc.Node) {
|
|||
split64(l, &lo1, &hi1)
|
||||
switch n.Op {
|
||||
default:
|
||||
gc.Fatal("cgen64 %v", gc.Oconv(int(n.Op), 0))
|
||||
gc.Fatalf("cgen64 %v", gc.Oconv(int(n.Op), 0))
|
||||
|
||||
case gc.OMINUS:
|
||||
var lo2 gc.Node
|
||||
|
|
@ -129,7 +129,7 @@ func cgen64(n *gc.Node, res *gc.Node) {
|
|||
// Do op. Leave result in ah:al.
|
||||
switch n.Op {
|
||||
default:
|
||||
gc.Fatal("cgen64: not implemented: %v\n", n)
|
||||
gc.Fatalf("cgen64: not implemented: %v\n", n)
|
||||
|
||||
// TODO: Constants
|
||||
case gc.OADD:
|
||||
|
|
@ -793,7 +793,7 @@ func cmp64(nl *gc.Node, nr *gc.Node, op int, likely int, to *obj.Prog) {
|
|||
var br *obj.Prog
|
||||
switch op {
|
||||
default:
|
||||
gc.Fatal("cmp64 %v %v", gc.Oconv(int(op), 0), t)
|
||||
gc.Fatalf("cmp64 %v %v", gc.Oconv(int(op), 0), t)
|
||||
|
||||
// cmp hi
|
||||
// bne L
|
||||
|
|
|
|||
|
|
@ -34,10 +34,10 @@ func defframe(ptxt *obj.Prog) {
|
|||
continue
|
||||
}
|
||||
if n.Class != gc.PAUTO {
|
||||
gc.Fatal("needzero class %d", n.Class)
|
||||
gc.Fatalf("needzero class %d", n.Class)
|
||||
}
|
||||
if n.Type.Width%int64(gc.Widthptr) != 0 || n.Xoffset%int64(gc.Widthptr) != 0 || n.Type.Width == 0 {
|
||||
gc.Fatal("var %v has size %d offset %d", gc.Nconv(n, obj.FmtLong), int(n.Type.Width), int(n.Xoffset))
|
||||
gc.Fatalf("var %v has size %d offset %d", gc.Nconv(n, obj.FmtLong), int(n.Type.Width), int(n.Xoffset))
|
||||
}
|
||||
if lo != hi && n.Xoffset+n.Type.Width >= lo-int64(2*gc.Widthptr) {
|
||||
// merge with range we already have
|
||||
|
|
@ -162,7 +162,7 @@ func cgen_hmul(nl *gc.Node, nr *gc.Node, res *gc.Node) {
|
|||
p.To.Offset = int64(n2.Reg)
|
||||
|
||||
default:
|
||||
gc.Fatal("cgen_hmul %v", t)
|
||||
gc.Fatalf("cgen_hmul %v", t)
|
||||
}
|
||||
|
||||
gc.Cgen(&n1, res)
|
||||
|
|
@ -177,7 +177,7 @@ func cgen_hmul(nl *gc.Node, nr *gc.Node, res *gc.Node) {
|
|||
*/
|
||||
func cgen_shift(op int, bounded bool, nl *gc.Node, nr *gc.Node, res *gc.Node) {
|
||||
if nl.Type.Width > 4 {
|
||||
gc.Fatal("cgen_shift %v", nl.Type)
|
||||
gc.Fatalf("cgen_shift %v", nl.Type)
|
||||
}
|
||||
|
||||
w := int(nl.Type.Width * 8)
|
||||
|
|
@ -429,7 +429,7 @@ func expandchecks(firstp *obj.Prog) {
|
|||
gc.Warnl(int(p.Lineno), "generated nil check")
|
||||
}
|
||||
if p.From.Type != obj.TYPE_REG {
|
||||
gc.Fatal("invalid nil check %v", p)
|
||||
gc.Fatalf("invalid nil check %v", p)
|
||||
}
|
||||
reg = int(p.From.Reg)
|
||||
|
||||
|
|
|
|||
|
|
@ -66,11 +66,11 @@ var nsclean int
|
|||
*/
|
||||
func split64(n *gc.Node, lo *gc.Node, hi *gc.Node) {
|
||||
if !gc.Is64(n.Type) {
|
||||
gc.Fatal("split64 %v", n.Type)
|
||||
gc.Fatalf("split64 %v", n.Type)
|
||||
}
|
||||
|
||||
if nsclean >= len(sclean) {
|
||||
gc.Fatal("split64 clean")
|
||||
gc.Fatalf("split64 clean")
|
||||
}
|
||||
sclean[nsclean].Op = gc.OEMPTY
|
||||
nsclean++
|
||||
|
|
@ -125,7 +125,7 @@ func split64(n *gc.Node, lo *gc.Node, hi *gc.Node) {
|
|||
|
||||
func splitclean() {
|
||||
if nsclean <= 0 {
|
||||
gc.Fatal("splitclean")
|
||||
gc.Fatalf("splitclean")
|
||||
}
|
||||
nsclean--
|
||||
if sclean[nsclean].Op != gc.OEMPTY {
|
||||
|
|
@ -204,7 +204,7 @@ func gmove(f *gc.Node, t *gc.Node) {
|
|||
switch uint32(ft)<<16 | uint32(tt) {
|
||||
default:
|
||||
// should not happen
|
||||
gc.Fatal("gmove %v -> %v", f, t)
|
||||
gc.Fatalf("gmove %v -> %v", f, t)
|
||||
return
|
||||
|
||||
/*
|
||||
|
|
@ -546,7 +546,7 @@ func gmove(f *gc.Node, t *gc.Node) {
|
|||
|
||||
case gc.TUINT64<<16 | gc.TFLOAT32,
|
||||
gc.TUINT64<<16 | gc.TFLOAT64:
|
||||
gc.Fatal("gmove UINT64, TFLOAT not implemented")
|
||||
gc.Fatalf("gmove UINT64, TFLOAT not implemented")
|
||||
return
|
||||
|
||||
/*
|
||||
|
|
@ -641,7 +641,7 @@ func gins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
// int32 v;
|
||||
|
||||
if f != nil && f.Op == gc.OINDEX {
|
||||
gc.Fatal("gins OINDEX not implemented")
|
||||
gc.Fatalf("gins OINDEX not implemented")
|
||||
}
|
||||
|
||||
// gc.Regalloc(&nod, ®node, Z);
|
||||
|
|
@ -651,7 +651,7 @@ func gins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
// idx.reg = nod.reg;
|
||||
// gc.Regfree(&nod);
|
||||
if t != nil && t.Op == gc.OINDEX {
|
||||
gc.Fatal("gins OINDEX not implemented")
|
||||
gc.Fatalf("gins OINDEX not implemented")
|
||||
}
|
||||
|
||||
// gc.Regalloc(&nod, ®node, Z);
|
||||
|
|
@ -677,7 +677,7 @@ func gins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
/* generate a comparison
|
||||
TODO(kaib): one of the args can actually be a small constant. relax the constraint and fix call sites.
|
||||
*/
|
||||
gc.Fatal("bad operands to gcmp")
|
||||
gc.Fatalf("bad operands to gcmp")
|
||||
}
|
||||
p.From = p.To
|
||||
p.To = obj.Addr{}
|
||||
|
|
@ -686,22 +686,22 @@ func gins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
|
||||
case arm.AMULU:
|
||||
if f != nil && f.Op != gc.OREGISTER {
|
||||
gc.Fatal("bad operands to mul")
|
||||
gc.Fatalf("bad operands to mul")
|
||||
}
|
||||
|
||||
case arm.AMOVW:
|
||||
if (p.From.Type == obj.TYPE_MEM || p.From.Type == obj.TYPE_ADDR || p.From.Type == obj.TYPE_CONST) && (p.To.Type == obj.TYPE_MEM || p.To.Type == obj.TYPE_ADDR) {
|
||||
gc.Fatal("gins double memory")
|
||||
gc.Fatalf("gins double memory")
|
||||
}
|
||||
|
||||
case arm.AADD:
|
||||
if p.To.Type == obj.TYPE_MEM {
|
||||
gc.Fatal("gins arith to mem")
|
||||
gc.Fatalf("gins arith to mem")
|
||||
}
|
||||
|
||||
case arm.ARSB:
|
||||
if p.From.Type == obj.TYPE_NONE {
|
||||
gc.Fatal("rsb with no from")
|
||||
gc.Fatalf("rsb with no from")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -719,9 +719,9 @@ func raddr(n *gc.Node, p *obj.Prog) {
|
|||
gc.Naddr(&a, n)
|
||||
if a.Type != obj.TYPE_REG {
|
||||
if n != nil {
|
||||
gc.Fatal("bad in raddr: %v", gc.Oconv(int(n.Op), 0))
|
||||
gc.Fatalf("bad in raddr: %v", gc.Oconv(int(n.Op), 0))
|
||||
} else {
|
||||
gc.Fatal("bad in raddr: <null>")
|
||||
gc.Fatalf("bad in raddr: <null>")
|
||||
}
|
||||
p.Reg = 0
|
||||
} else {
|
||||
|
|
@ -734,7 +734,7 @@ func raddr(n *gc.Node, p *obj.Prog) {
|
|||
*/
|
||||
func gshift(as int, lhs *gc.Node, stype int32, sval int32, rhs *gc.Node) *obj.Prog {
|
||||
if sval <= 0 || sval > 32 {
|
||||
gc.Fatal("bad shift value: %d", sval)
|
||||
gc.Fatalf("bad shift value: %d", sval)
|
||||
}
|
||||
|
||||
sval = sval & 0x1f
|
||||
|
|
@ -759,13 +759,13 @@ func gregshift(as int, lhs *gc.Node, stype int32, reg *gc.Node, rhs *gc.Node) *o
|
|||
*/
|
||||
func optoas(op int, t *gc.Type) int {
|
||||
if t == nil {
|
||||
gc.Fatal("optoas: t is nil")
|
||||
gc.Fatalf("optoas: t is nil")
|
||||
}
|
||||
|
||||
a := obj.AXXX
|
||||
switch uint32(op)<<16 | uint32(gc.Simtype[t.Etype]) {
|
||||
default:
|
||||
gc.Fatal("optoas: no entry %v-%v etype %v simtype %v", gc.Oconv(int(op), 0), t, gc.Types[t.Etype], gc.Types[gc.Simtype[t.Etype]])
|
||||
gc.Fatalf("optoas: no entry %v-%v etype %v simtype %v", gc.Oconv(int(op), 0), t, gc.Types[t.Etype], gc.Types[gc.Simtype[t.Etype]])
|
||||
|
||||
/* case CASE(OADDR, TPTR32):
|
||||
a = ALEAL;
|
||||
|
|
@ -1188,7 +1188,7 @@ func sudoaddable(as int, n *gc.Node, a *obj.Addr) bool {
|
|||
|
||||
for i := 1; i < o; i++ {
|
||||
if oary[i] >= 0 {
|
||||
gc.Fatal("can't happen")
|
||||
gc.Fatalf("can't happen")
|
||||
}
|
||||
gins(arm.AMOVW, &n1, reg)
|
||||
gc.Cgen_checknil(reg)
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ func proginfo(p *obj.Prog) {
|
|||
info := &p.Info
|
||||
*info = progtable[p.As]
|
||||
if info.Flags == 0 {
|
||||
gc.Fatal("unknown instruction %v", p)
|
||||
gc.Fatalf("unknown instruction %v", p)
|
||||
}
|
||||
|
||||
if p.From.Type == obj.TYPE_ADDR && p.From.Sym != nil && (info.Flags&gc.LeftRead != 0) {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ func blockcopy(n, res *gc.Node, osrc, odst, w int64) {
|
|||
var op int
|
||||
switch align {
|
||||
default:
|
||||
gc.Fatal("sgen: invalid alignment %d for %v", align, n.Type)
|
||||
gc.Fatalf("sgen: invalid alignment %d for %v", align, n.Type)
|
||||
|
||||
case 1:
|
||||
op = arm64.AMOVB
|
||||
|
|
@ -36,12 +36,12 @@ func blockcopy(n, res *gc.Node, osrc, odst, w int64) {
|
|||
}
|
||||
|
||||
if w%int64(align) != 0 {
|
||||
gc.Fatal("sgen: unaligned size %d (align=%d) for %v", w, align, n.Type)
|
||||
gc.Fatalf("sgen: unaligned size %d (align=%d) for %v", w, align, n.Type)
|
||||
}
|
||||
c := int32(w / int64(align))
|
||||
|
||||
if osrc%int64(align) != 0 || odst%int64(align) != 0 {
|
||||
gc.Fatal("sgen: unaligned offset src %d or dst %d (align %d)", osrc, odst, align)
|
||||
gc.Fatalf("sgen: unaligned offset src %d or dst %d (align %d)", osrc, odst, align)
|
||||
}
|
||||
|
||||
// if we are copying forward on the stack and
|
||||
|
|
|
|||
|
|
@ -43,10 +43,10 @@ func defframe(ptxt *obj.Prog) {
|
|||
continue
|
||||
}
|
||||
if n.Class != gc.PAUTO {
|
||||
gc.Fatal("needzero class %d", n.Class)
|
||||
gc.Fatalf("needzero class %d", n.Class)
|
||||
}
|
||||
if n.Type.Width%int64(gc.Widthptr) != 0 || n.Xoffset%int64(gc.Widthptr) != 0 || n.Type.Width == 0 {
|
||||
gc.Fatal("var %v has size %d offset %d", gc.Nconv(n, obj.FmtLong), int(n.Type.Width), int(n.Xoffset))
|
||||
gc.Fatalf("var %v has size %d offset %d", gc.Nconv(n, obj.FmtLong), int(n.Type.Width), int(n.Xoffset))
|
||||
}
|
||||
|
||||
if lo != hi && n.Xoffset+n.Type.Width >= lo-int64(2*gc.Widthreg) {
|
||||
|
|
@ -299,7 +299,7 @@ func cgen_hmul(nl *gc.Node, nr *gc.Node, res *gc.Node) {
|
|||
}
|
||||
|
||||
default:
|
||||
gc.Fatal("cgen_hmul %v", t)
|
||||
gc.Fatalf("cgen_hmul %v", t)
|
||||
}
|
||||
|
||||
gc.Cgen(&n1, res)
|
||||
|
|
@ -499,7 +499,7 @@ func expandchecks(firstp *obj.Prog) {
|
|||
gc.Warnl(int(p.Lineno), "generated nil check")
|
||||
}
|
||||
if p.From.Type != obj.TYPE_REG {
|
||||
gc.Fatal("invalid nil check %v\n", p)
|
||||
gc.Fatalf("invalid nil check %v\n", p)
|
||||
}
|
||||
|
||||
// check is
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ func ginscon2(as int, n2 *gc.Node, c int64) {
|
|||
|
||||
switch as {
|
||||
default:
|
||||
gc.Fatal("ginscon2")
|
||||
gc.Fatalf("ginscon2")
|
||||
|
||||
case arm64.ACMP:
|
||||
if -arm64.BIG <= c && c <= arm64.BIG {
|
||||
|
|
@ -214,7 +214,7 @@ func gmove(f *gc.Node, t *gc.Node) {
|
|||
|
||||
switch uint32(ft)<<16 | uint32(tt) {
|
||||
default:
|
||||
gc.Fatal("gmove %v -> %v", gc.Tconv(f.Type, obj.FmtLong), gc.Tconv(t.Type, obj.FmtLong))
|
||||
gc.Fatalf("gmove %v -> %v", gc.Tconv(f.Type, obj.FmtLong), gc.Tconv(t.Type, obj.FmtLong))
|
||||
|
||||
/*
|
||||
* integer copy and truncate
|
||||
|
|
@ -514,7 +514,7 @@ func rawgins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
case arm64.ACMP, arm64.AFCMPS, arm64.AFCMPD:
|
||||
if t != nil {
|
||||
if f.Op != gc.OREGISTER {
|
||||
gc.Fatal("bad operands to gcmp")
|
||||
gc.Fatalf("bad operands to gcmp")
|
||||
}
|
||||
p.From = p.To
|
||||
p.To = obj.Addr{}
|
||||
|
|
@ -527,12 +527,12 @@ func rawgins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
case arm64.AAND, arm64.AMUL:
|
||||
if p.From.Type == obj.TYPE_CONST {
|
||||
gc.Debug['h'] = 1
|
||||
gc.Fatal("bad inst: %v", p)
|
||||
gc.Fatalf("bad inst: %v", p)
|
||||
}
|
||||
case arm64.ACMP:
|
||||
if p.From.Type == obj.TYPE_MEM || p.To.Type == obj.TYPE_MEM {
|
||||
gc.Debug['h'] = 1
|
||||
gc.Fatal("bad inst: %v", p)
|
||||
gc.Fatalf("bad inst: %v", p)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -564,7 +564,7 @@ func rawgins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
if w != 0 && ((f != nil && p.From.Width < int64(w)) || (t != nil && p.To.Type != obj.TYPE_REG && p.To.Width > int64(w))) {
|
||||
gc.Dump("f", f)
|
||||
gc.Dump("t", t)
|
||||
gc.Fatal("bad width: %v (%d, %d)\n", p, p.From.Width, p.To.Width)
|
||||
gc.Fatalf("bad width: %v (%d, %d)\n", p, p.From.Width, p.To.Width)
|
||||
}
|
||||
|
||||
return p
|
||||
|
|
@ -579,9 +579,9 @@ func raddr(n *gc.Node, p *obj.Prog) {
|
|||
gc.Naddr(&a, n)
|
||||
if a.Type != obj.TYPE_REG {
|
||||
if n != nil {
|
||||
gc.Fatal("bad in raddr: %v", gc.Oconv(int(n.Op), 0))
|
||||
gc.Fatalf("bad in raddr: %v", gc.Oconv(int(n.Op), 0))
|
||||
} else {
|
||||
gc.Fatal("bad in raddr: <null>")
|
||||
gc.Fatalf("bad in raddr: <null>")
|
||||
}
|
||||
p.Reg = 0
|
||||
} else {
|
||||
|
|
@ -591,7 +591,7 @@ func raddr(n *gc.Node, p *obj.Prog) {
|
|||
|
||||
func gcmp(as int, lhs *gc.Node, rhs *gc.Node) *obj.Prog {
|
||||
if lhs.Op != gc.OREGISTER {
|
||||
gc.Fatal("bad operands to gcmp: %v %v", gc.Oconv(int(lhs.Op), 0), gc.Oconv(int(rhs.Op), 0))
|
||||
gc.Fatalf("bad operands to gcmp: %v %v", gc.Oconv(int(lhs.Op), 0), gc.Oconv(int(rhs.Op), 0))
|
||||
}
|
||||
|
||||
p := rawgins(as, rhs, nil)
|
||||
|
|
@ -604,13 +604,13 @@ func gcmp(as int, lhs *gc.Node, rhs *gc.Node) *obj.Prog {
|
|||
*/
|
||||
func optoas(op int, t *gc.Type) int {
|
||||
if t == nil {
|
||||
gc.Fatal("optoas: t is nil")
|
||||
gc.Fatalf("optoas: t is nil")
|
||||
}
|
||||
|
||||
a := int(obj.AXXX)
|
||||
switch uint32(op)<<16 | uint32(gc.Simtype[t.Etype]) {
|
||||
default:
|
||||
gc.Fatal("optoas: no entry for op=%v type=%v", gc.Oconv(int(op), 0), t)
|
||||
gc.Fatalf("optoas: no entry for op=%v type=%v", gc.Oconv(int(op), 0), t)
|
||||
|
||||
case gc.OEQ<<16 | gc.TBOOL,
|
||||
gc.OEQ<<16 | gc.TINT8,
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ func proginfo(p *obj.Prog) {
|
|||
info := &p.Info
|
||||
*info = progtable[p.As]
|
||||
if info.Flags == 0 {
|
||||
gc.Fatal("proginfo: unknown instruction %v", p)
|
||||
gc.Fatalf("proginfo: unknown instruction %v", p)
|
||||
}
|
||||
|
||||
if (info.Flags&gc.RegRead != 0) && p.Reg == 0 {
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ var defercalc int
|
|||
|
||||
func Rnd(o int64, r int64) int64 {
|
||||
if r < 1 || r > 8 || r&(r-1) != 0 {
|
||||
Fatal("rnd %d", r)
|
||||
Fatalf("rnd %d", r)
|
||||
}
|
||||
return (o + r - 1) &^ (r - 1)
|
||||
}
|
||||
|
|
@ -25,7 +25,7 @@ func offmod(t *Type) {
|
|||
o := int32(0)
|
||||
for f := t.Type; f != nil; f = f.Down {
|
||||
if f.Etype != TFIELD {
|
||||
Fatal("offmod: not TFIELD: %v", Tconv(f, obj.FmtLong))
|
||||
Fatalf("offmod: not TFIELD: %v", Tconv(f, obj.FmtLong))
|
||||
}
|
||||
f.Width = int64(o)
|
||||
o += int32(Widthptr)
|
||||
|
|
@ -46,7 +46,7 @@ func widstruct(errtype *Type, t *Type, o int64, flag int) int64 {
|
|||
var w int64
|
||||
for f := t.Type; f != nil; f = f.Down {
|
||||
if f.Etype != TFIELD {
|
||||
Fatal("widstruct: not TFIELD: %v", Tconv(f, obj.FmtLong))
|
||||
Fatalf("widstruct: not TFIELD: %v", Tconv(f, obj.FmtLong))
|
||||
}
|
||||
if f.Type == nil {
|
||||
// broken field, just skip it so that other valid fields
|
||||
|
|
@ -59,7 +59,7 @@ func widstruct(errtype *Type, t *Type, o int64, flag int) int64 {
|
|||
maxalign = int32(f.Type.Align)
|
||||
}
|
||||
if f.Type.Width < 0 {
|
||||
Fatal("invalid width %d", f.Type.Width)
|
||||
Fatalf("invalid width %d", f.Type.Width)
|
||||
}
|
||||
w = f.Type.Width
|
||||
if f.Type.Align > 0 {
|
||||
|
|
@ -111,7 +111,7 @@ func widstruct(errtype *Type, t *Type, o int64, flag int) int64 {
|
|||
|
||||
func dowidth(t *Type) {
|
||||
if Widthptr == 0 {
|
||||
Fatal("dowidth without betypeinit")
|
||||
Fatalf("dowidth without betypeinit")
|
||||
}
|
||||
|
||||
if t == nil {
|
||||
|
|
@ -121,7 +121,7 @@ func dowidth(t *Type) {
|
|||
if t.Width > 0 {
|
||||
if t.Align == 0 {
|
||||
// See issue 11354
|
||||
Fatal("zero alignment with nonzero size %v", t)
|
||||
Fatalf("zero alignment with nonzero size %v", t)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
@ -168,7 +168,7 @@ func dowidth(t *Type) {
|
|||
w := int64(0)
|
||||
switch et {
|
||||
default:
|
||||
Fatal("dowidth: unknown type: %v", t)
|
||||
Fatalf("dowidth: unknown type: %v", t)
|
||||
|
||||
/* compiler-specific stuff */
|
||||
case TINT8, TUINT8, TBOOL:
|
||||
|
|
@ -241,13 +241,13 @@ func dowidth(t *Type) {
|
|||
// dummy type; should be replaced before use.
|
||||
case TANY:
|
||||
if Debug['A'] == 0 {
|
||||
Fatal("dowidth any")
|
||||
Fatalf("dowidth any")
|
||||
}
|
||||
w = 1 // anything will do
|
||||
|
||||
case TSTRING:
|
||||
if sizeof_String == 0 {
|
||||
Fatal("early dowidth string")
|
||||
Fatalf("early dowidth string")
|
||||
}
|
||||
w = int64(sizeof_String)
|
||||
t.Align = uint8(Widthptr)
|
||||
|
|
@ -277,12 +277,12 @@ func dowidth(t *Type) {
|
|||
t.Broke = 1
|
||||
}
|
||||
} else {
|
||||
Fatal("dowidth %v", t) // probably [...]T
|
||||
Fatalf("dowidth %v", t) // probably [...]T
|
||||
}
|
||||
|
||||
case TSTRUCT:
|
||||
if t.Funarg != 0 {
|
||||
Fatal("dowidth fn struct %v", t)
|
||||
Fatalf("dowidth fn struct %v", t)
|
||||
}
|
||||
w = widstruct(t, t, 0, 1)
|
||||
|
||||
|
|
@ -319,7 +319,7 @@ func dowidth(t *Type) {
|
|||
t.Width = w
|
||||
if t.Align == 0 {
|
||||
if w > 8 || w&(w-1) != 0 {
|
||||
Fatal("invalid alignment for %v", t)
|
||||
Fatalf("invalid alignment for %v", t)
|
||||
}
|
||||
t.Align = uint8(w)
|
||||
}
|
||||
|
|
@ -367,7 +367,7 @@ func checkwidth(t *Type) {
|
|||
// function arg structs should not be checked
|
||||
// outside of the enclosing function.
|
||||
if t.Funarg != 0 {
|
||||
Fatal("checkwidth %v", t)
|
||||
Fatalf("checkwidth %v", t)
|
||||
}
|
||||
|
||||
if defercalc == 0 {
|
||||
|
|
@ -395,14 +395,14 @@ func checkwidth(t *Type) {
|
|||
func defercheckwidth() {
|
||||
// we get out of sync on syntax errors, so don't be pedantic.
|
||||
if defercalc != 0 && nerrors == 0 {
|
||||
Fatal("defercheckwidth")
|
||||
Fatalf("defercheckwidth")
|
||||
}
|
||||
defercalc = 1
|
||||
}
|
||||
|
||||
func resumecheckwidth() {
|
||||
if defercalc == 0 {
|
||||
Fatal("resumecheckwidth")
|
||||
Fatalf("resumecheckwidth")
|
||||
}
|
||||
for l := tlq; l != nil; l = tlq {
|
||||
l.t.Deferwidth = 0
|
||||
|
|
@ -419,7 +419,7 @@ var itable *Type // distinguished *byte
|
|||
|
||||
func typeinit() {
|
||||
if Widthptr == 0 {
|
||||
Fatal("typeinit before betypeinit")
|
||||
Fatalf("typeinit before betypeinit")
|
||||
}
|
||||
|
||||
for i := 0; i < NTYPE; i++ {
|
||||
|
|
@ -637,11 +637,11 @@ func typeinit() {
|
|||
|
||||
etype = Thearch.Typedefs[i].Etype
|
||||
if etype < 0 || etype >= len(Types) {
|
||||
Fatal("typeinit: %s bad etype", s.Name)
|
||||
Fatalf("typeinit: %s bad etype", s.Name)
|
||||
}
|
||||
sameas = Thearch.Typedefs[i].Sameas
|
||||
if sameas < 0 || sameas >= len(Types) {
|
||||
Fatal("typeinit: %s bad sameas", s.Name)
|
||||
Fatalf("typeinit: %s bad sameas", s.Name)
|
||||
}
|
||||
Simtype[etype] = uint8(sameas)
|
||||
minfltval[etype] = minfltval[sameas]
|
||||
|
|
@ -651,7 +651,7 @@ func typeinit() {
|
|||
|
||||
t = Types[etype]
|
||||
if t != nil {
|
||||
Fatal("typeinit: %s already defined", s.Name)
|
||||
Fatalf("typeinit: %s already defined", s.Name)
|
||||
}
|
||||
|
||||
t = typ(etype)
|
||||
|
|
@ -707,7 +707,7 @@ func Argsize(t *Type) int {
|
|||
|
||||
w = (w + int64(Widthptr) - 1) &^ (int64(Widthptr) - 1)
|
||||
if int64(int(w)) != w {
|
||||
Fatal("argsize too big")
|
||||
Fatalf("argsize too big")
|
||||
}
|
||||
return int(w)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ func bvandnot(dst Bvec, src1 Bvec, src2 Bvec) {
|
|||
|
||||
func bvcmp(bv1 Bvec, bv2 Bvec) int {
|
||||
if bv1.n != bv2.n {
|
||||
Fatal("bvequal: lengths %d and %d are not equal", bv1.n, bv2.n)
|
||||
Fatalf("bvequal: lengths %d and %d are not equal", bv1.n, bv2.n)
|
||||
}
|
||||
for i, x := range bv1.b {
|
||||
if x != bv2.b[i] {
|
||||
|
|
@ -98,7 +98,7 @@ func bvconcat(src1 Bvec, src2 Bvec) Bvec {
|
|||
|
||||
func bvget(bv Bvec, i int32) int {
|
||||
if i < 0 || i >= bv.n {
|
||||
Fatal("bvget: index %d is out of bounds with length %d\n", i, bv.n)
|
||||
Fatalf("bvget: index %d is out of bounds with length %d\n", i, bv.n)
|
||||
}
|
||||
return int((bv.b[i>>WORDSHIFT] >> uint(i&WORDMASK)) & 1)
|
||||
}
|
||||
|
|
@ -174,7 +174,7 @@ func bvprint(bv Bvec) {
|
|||
|
||||
func bvreset(bv Bvec, i int32) {
|
||||
if i < 0 || i >= bv.n {
|
||||
Fatal("bvreset: index %d is out of bounds with length %d\n", i, bv.n)
|
||||
Fatalf("bvreset: index %d is out of bounds with length %d\n", i, bv.n)
|
||||
}
|
||||
mask := uint32(^(1 << uint(i%WORDBITS)))
|
||||
bv.b[i/WORDBITS] &= mask
|
||||
|
|
@ -188,7 +188,7 @@ func bvresetall(bv Bvec) {
|
|||
|
||||
func bvset(bv Bvec, i int32) {
|
||||
if i < 0 || i >= bv.n {
|
||||
Fatal("bvset: index %d is out of bounds with length %d\n", i, bv.n)
|
||||
Fatalf("bvset: index %d is out of bounds with length %d\n", i, bv.n)
|
||||
}
|
||||
mask := uint32(1 << uint(i%WORDBITS))
|
||||
bv.b[i/WORDBITS] |= mask
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ func cgen_wb(n, res *Node, wb bool) {
|
|||
}
|
||||
|
||||
if res == nil || res.Type == nil {
|
||||
Fatal("cgen: res nil")
|
||||
Fatalf("cgen: res nil")
|
||||
}
|
||||
|
||||
for n.Op == OCONVNOP {
|
||||
|
|
@ -68,7 +68,7 @@ func cgen_wb(n, res *Node, wb bool) {
|
|||
|
||||
if n.Ullman >= UINF {
|
||||
if n.Op == OINDREG {
|
||||
Fatal("cgen: this is going to miscompile")
|
||||
Fatalf("cgen: this is going to miscompile")
|
||||
}
|
||||
if res.Ullman >= UINF {
|
||||
var n1 Node
|
||||
|
|
@ -81,7 +81,7 @@ func cgen_wb(n, res *Node, wb bool) {
|
|||
|
||||
if Isfat(n.Type) {
|
||||
if n.Type.Width < 0 {
|
||||
Fatal("forgot to compute width for %v", n.Type)
|
||||
Fatalf("forgot to compute width for %v", n.Type)
|
||||
}
|
||||
sgen_wb(n, res, n.Type.Width, wb)
|
||||
return
|
||||
|
|
@ -103,7 +103,7 @@ func cgen_wb(n, res *Node, wb bool) {
|
|||
if n1.Ullman > res.Ullman {
|
||||
Dump("n1", &n1)
|
||||
Dump("res", res)
|
||||
Fatal("loop in cgen")
|
||||
Fatalf("loop in cgen")
|
||||
}
|
||||
|
||||
cgen_wb(&n1, res, wb)
|
||||
|
|
@ -191,7 +191,7 @@ func cgen_wb(n, res *Node, wb bool) {
|
|||
|
||||
if wb {
|
||||
if int(Simtype[res.Type.Etype]) != Tptr {
|
||||
Fatal("cgen_wb of type %v", res.Type)
|
||||
Fatalf("cgen_wb of type %v", res.Type)
|
||||
}
|
||||
if n.Ullman >= UINF {
|
||||
var n1 Node
|
||||
|
|
@ -362,7 +362,7 @@ func cgen_wb(n, res *Node, wb bool) {
|
|||
default:
|
||||
Dump("cgen", n)
|
||||
Dump("cgen-res", res)
|
||||
Fatal("cgen: unknown op %v", Nconv(n, obj.FmtShort|obj.FmtSign))
|
||||
Fatalf("cgen: unknown op %v", Nconv(n, obj.FmtShort|obj.FmtSign))
|
||||
|
||||
case OOROR, OANDAND,
|
||||
OEQ, ONE,
|
||||
|
|
@ -593,7 +593,7 @@ func cgen_wb(n, res *Node, wb bool) {
|
|||
break
|
||||
}
|
||||
|
||||
Fatal("cgen: OLEN: unknown type %v", Tconv(nl.Type, obj.FmtLong))
|
||||
Fatalf("cgen: OLEN: unknown type %v", Tconv(nl.Type, obj.FmtLong))
|
||||
|
||||
case OCAP:
|
||||
if Istype(nl.Type, TCHAN) {
|
||||
|
|
@ -631,7 +631,7 @@ func cgen_wb(n, res *Node, wb bool) {
|
|||
break
|
||||
}
|
||||
|
||||
Fatal("cgen: OCAP: unknown type %v", Tconv(nl.Type, obj.FmtLong))
|
||||
Fatalf("cgen: OCAP: unknown type %v", Tconv(nl.Type, obj.FmtLong))
|
||||
|
||||
case OADDR:
|
||||
if n.Bounded { // let race detector avoid nil checks
|
||||
|
|
@ -928,7 +928,7 @@ func Cgenr(n *Node, a *Node, res *Node) {
|
|||
}
|
||||
|
||||
if Isfat(n.Type) {
|
||||
Fatal("cgenr on fat node")
|
||||
Fatalf("cgenr on fat node")
|
||||
}
|
||||
|
||||
if n.Addable {
|
||||
|
|
@ -1034,7 +1034,7 @@ func Agenr(n *Node, a *Node, res *Node) {
|
|||
// constant index
|
||||
if Isconst(nr, CTINT) {
|
||||
if Isconst(nl, CTSTR) {
|
||||
Fatal("constant string constant index")
|
||||
Fatalf("constant string constant index")
|
||||
}
|
||||
v := uint64(Mpgetfix(nr.Val().U.(*Mpint)))
|
||||
var n2 Node
|
||||
|
|
@ -1186,7 +1186,7 @@ func Agenr(n *Node, a *Node, res *Node) {
|
|||
// constant index
|
||||
if Isconst(nr, CTINT) {
|
||||
if Isconst(nl, CTSTR) {
|
||||
Fatal("constant string constant index") // front end should handle
|
||||
Fatalf("constant string constant index") // front end should handle
|
||||
}
|
||||
v := uint64(Mpgetfix(nr.Val().U.(*Mpint)))
|
||||
if Isslice(nl.Type) || nl.Type.Etype == TSTRING {
|
||||
|
|
@ -1376,7 +1376,7 @@ func Agenr(n *Node, a *Node, res *Node) {
|
|||
index:
|
||||
if Isconst(nr, CTINT) {
|
||||
if Isconst(nl, CTSTR) {
|
||||
Fatal("constant string constant index") // front end should handle
|
||||
Fatalf("constant string constant index") // front end should handle
|
||||
}
|
||||
v := uint64(Mpgetfix(nr.Val().U.(*Mpint)))
|
||||
if Isslice(nl.Type) || nl.Type.Etype == TSTRING {
|
||||
|
|
@ -1529,7 +1529,7 @@ func Agen(n *Node, res *Node) {
|
|||
|
||||
if n.Addable {
|
||||
if n.Op == OREGISTER {
|
||||
Fatal("agen OREGISTER")
|
||||
Fatalf("agen OREGISTER")
|
||||
}
|
||||
var n1 Node
|
||||
n1.Op = OADDR
|
||||
|
|
@ -1546,7 +1546,7 @@ func Agen(n *Node, res *Node) {
|
|||
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("agen: unknown op %v", Nconv(n, obj.FmtShort|obj.FmtSign))
|
||||
Fatalf("agen: unknown op %v", Nconv(n, obj.FmtShort|obj.FmtSign))
|
||||
|
||||
case OCALLMETH:
|
||||
cgen_callmeth(n, 0)
|
||||
|
|
@ -1576,13 +1576,13 @@ func Agen(n *Node, res *Node) {
|
|||
// should only get here with names in this func.
|
||||
if n.Name.Funcdepth > 0 && n.Name.Funcdepth != Funcdepth {
|
||||
Dump("bad agen", n)
|
||||
Fatal("agen: bad ONAME funcdepth %d != %d", n.Name.Funcdepth, Funcdepth)
|
||||
Fatalf("agen: bad ONAME funcdepth %d != %d", n.Name.Funcdepth, Funcdepth)
|
||||
}
|
||||
|
||||
// should only get here for heap vars or paramref
|
||||
if n.Class&PHEAP == 0 && n.Class != PPARAMREF {
|
||||
Dump("bad agen", n)
|
||||
Fatal("agen: bad ONAME class %#x", n.Class)
|
||||
Fatalf("agen: bad ONAME class %#x", n.Class)
|
||||
}
|
||||
|
||||
Cgen(n.Name.Heapaddr, res)
|
||||
|
|
@ -1800,7 +1800,7 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) {
|
|||
}
|
||||
|
||||
if n.Type.Etype != TBOOL {
|
||||
Fatal("bgen: bad type %v for %v", n.Type, Oconv(int(n.Op), 0))
|
||||
Fatalf("bgen: bad type %v for %v", n.Type, Oconv(int(n.Op), 0))
|
||||
}
|
||||
|
||||
for n.Op == OCONVNOP {
|
||||
|
|
@ -1841,7 +1841,7 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) {
|
|||
// We can fix that as we go.
|
||||
switch Ctxt.Arch.Thechar {
|
||||
case '5', '7', '9':
|
||||
Fatal("genval 5g, 7g, 9g ONAMES not fully implemented")
|
||||
Fatalf("genval 5g, 7g, 9g ONAMES not fully implemented")
|
||||
}
|
||||
Cgen(n, res)
|
||||
if !wantTrue {
|
||||
|
|
@ -1865,7 +1865,7 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) {
|
|||
case OLITERAL:
|
||||
// n is a constant.
|
||||
if !Isconst(n, CTBOOL) {
|
||||
Fatal("bgen: non-bool const %v\n", Nconv(n, obj.FmtLong))
|
||||
Fatalf("bgen: non-bool const %v\n", Nconv(n, obj.FmtLong))
|
||||
}
|
||||
if genval {
|
||||
Cgen(Nodbool(wantTrue == n.Val().U.(bool)), res)
|
||||
|
|
@ -2068,7 +2068,7 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) {
|
|||
switch Ctxt.Arch.Thechar {
|
||||
case '5':
|
||||
if genval {
|
||||
Fatal("genval 5g Isfloat special cases not implemented")
|
||||
Fatalf("genval 5g Isfloat special cases not implemented")
|
||||
}
|
||||
switch n.Op {
|
||||
case ONE:
|
||||
|
|
@ -2116,7 +2116,7 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) {
|
|||
}
|
||||
case '7', '9':
|
||||
if genval {
|
||||
Fatal("genval 7g, 9g Isfloat special cases not implemented")
|
||||
Fatalf("genval 7g, 9g Isfloat special cases not implemented")
|
||||
}
|
||||
switch n.Op {
|
||||
// On arm64 and ppc64, <= and >= mishandle NaN. Must decompose into < or > and =.
|
||||
|
|
@ -2251,11 +2251,11 @@ func sgen_wb(n *Node, ns *Node, w int64, wb bool) {
|
|||
}
|
||||
|
||||
if n.Ullman >= UINF && ns.Ullman >= UINF {
|
||||
Fatal("sgen UINF")
|
||||
Fatalf("sgen UINF")
|
||||
}
|
||||
|
||||
if w < 0 {
|
||||
Fatal("sgen copy %d", w)
|
||||
Fatalf("sgen copy %d", w)
|
||||
}
|
||||
|
||||
// If copying .args, that's all the results, so record definition sites
|
||||
|
|
@ -2336,7 +2336,7 @@ func Ginscall(f *Node, proc int) {
|
|||
|
||||
switch proc {
|
||||
default:
|
||||
Fatal("Ginscall: bad proc %d", proc)
|
||||
Fatalf("Ginscall: bad proc %d", proc)
|
||||
|
||||
case 0, // normal call
|
||||
-1: // normal call but no return
|
||||
|
|
@ -2402,7 +2402,7 @@ func Ginscall(f *Node, proc int) {
|
|||
Ginscall(Newproc, 0)
|
||||
} else {
|
||||
if Hasdefer == 0 {
|
||||
Fatal("hasdefer=0 but has defer")
|
||||
Fatalf("hasdefer=0 but has defer")
|
||||
}
|
||||
Ginscall(Deferproc, 0)
|
||||
}
|
||||
|
|
@ -2423,12 +2423,12 @@ func Ginscall(f *Node, proc int) {
|
|||
func cgen_callinter(n *Node, res *Node, proc int) {
|
||||
i := n.Left
|
||||
if i.Op != ODOTINTER {
|
||||
Fatal("cgen_callinter: not ODOTINTER %v", Oconv(int(i.Op), 0))
|
||||
Fatalf("cgen_callinter: not ODOTINTER %v", Oconv(int(i.Op), 0))
|
||||
}
|
||||
|
||||
f := i.Right // field
|
||||
if f.Op != ONAME {
|
||||
Fatal("cgen_callinter: not ONAME %v", Oconv(int(f.Op), 0))
|
||||
Fatalf("cgen_callinter: not ONAME %v", Oconv(int(f.Op), 0))
|
||||
}
|
||||
|
||||
i = i.Left // interface
|
||||
|
|
@ -2471,7 +2471,7 @@ func cgen_callinter(n *Node, res *Node, proc int) {
|
|||
var nodr Node
|
||||
Regalloc(&nodr, Types[Tptr], &nodo)
|
||||
if n.Left.Xoffset == BADWIDTH {
|
||||
Fatal("cgen_callinter: badwidth")
|
||||
Fatalf("cgen_callinter: badwidth")
|
||||
}
|
||||
Cgen_checknil(&nodo) // in case offset is huge
|
||||
nodo.Op = OINDREG
|
||||
|
|
@ -2562,7 +2562,7 @@ func cgen_callret(n *Node, res *Node) {
|
|||
var flist Iter
|
||||
fp := Structfirst(&flist, Getoutarg(t))
|
||||
if fp == nil {
|
||||
Fatal("cgen_callret: nil")
|
||||
Fatalf("cgen_callret: nil")
|
||||
}
|
||||
|
||||
var nod Node
|
||||
|
|
@ -2592,7 +2592,7 @@ func cgen_aret(n *Node, res *Node) {
|
|||
var flist Iter
|
||||
fp := Structfirst(&flist, Getoutarg(t))
|
||||
if fp == nil {
|
||||
Fatal("cgen_aret: nil")
|
||||
Fatalf("cgen_aret: nil")
|
||||
}
|
||||
|
||||
var nod1 Node
|
||||
|
|
@ -2814,11 +2814,11 @@ func cgen_append(n, res *Node) {
|
|||
if res.Op != ONAME && !samesafeexpr(res, n.List.N) {
|
||||
Dump("cgen_append-n", n)
|
||||
Dump("cgen_append-res", res)
|
||||
Fatal("append not lowered")
|
||||
Fatalf("append not lowered")
|
||||
}
|
||||
for l := n.List; l != nil; l = l.Next {
|
||||
if l.N.Ullman >= UINF {
|
||||
Fatal("append with function call arguments")
|
||||
Fatalf("append with function call arguments")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3261,7 +3261,7 @@ func cgen_slice(n, res *Node, wb bool) {
|
|||
// but it will be represented in 32 bits.
|
||||
if Ctxt.Arch.Regsize == 4 && Is64(n1.Type) {
|
||||
if mpcmpfixc(n1.Val().U.(*Mpint), 1<<31) >= 0 {
|
||||
Fatal("missed slice out of bounds check")
|
||||
Fatalf("missed slice out of bounds check")
|
||||
}
|
||||
var tmp Node
|
||||
Nodconst(&tmp, indexRegType, Mpgetfix(n1.Val().U.(*Mpint)))
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ func typecheckclosure(func_ *Node, top int) {
|
|||
if !n.Name.Captured {
|
||||
n.Name.Captured = true
|
||||
if n.Name.Decldepth == 0 {
|
||||
Fatal("typecheckclosure: var %v does not have decldepth assigned", Nconv(n, obj.FmtShort))
|
||||
Fatalf("typecheckclosure: var %v does not have decldepth assigned", Nconv(n, obj.FmtShort))
|
||||
}
|
||||
|
||||
// Ignore assignments to the variable in straightline code
|
||||
|
|
@ -172,7 +172,7 @@ func closurename(n *Node) *Sym {
|
|||
n.Func.Outerfunc.Func.Closgen++
|
||||
gen = n.Func.Outerfunc.Func.Closgen
|
||||
} else {
|
||||
Fatal("closurename called for %v", Nconv(n, obj.FmtShort))
|
||||
Fatalf("closurename called for %v", Nconv(n, obj.FmtShort))
|
||||
}
|
||||
n.Sym = Lookupf("%s.%s%d", outer, prefix, gen)
|
||||
return n.Sym
|
||||
|
|
@ -204,7 +204,7 @@ func makeclosure(func_ *Node) *Node {
|
|||
xfunc.Nbody = func_.Nbody
|
||||
xfunc.Func.Dcl = concat(func_.Func.Dcl, xfunc.Func.Dcl)
|
||||
if xfunc.Nbody == nil {
|
||||
Fatal("empty body - won't generate any code")
|
||||
Fatalf("empty body - won't generate any code")
|
||||
}
|
||||
typecheck(&xfunc, Etop)
|
||||
|
||||
|
|
@ -355,7 +355,7 @@ func transformclosure(xfunc *Node) {
|
|||
|
||||
// Recalculate param offsets.
|
||||
if f.Type.Width > 0 {
|
||||
Fatal("transformclosure: width is already calculated")
|
||||
Fatalf("transformclosure: width is already calculated")
|
||||
}
|
||||
dowidth(f.Type)
|
||||
xfunc.Type = f.Type // update type of ODCLFUNC
|
||||
|
|
@ -491,7 +491,7 @@ func typecheckpartialcall(fn *Node, sym *Node) {
|
|||
break
|
||||
|
||||
default:
|
||||
Fatal("invalid typecheckpartialcall")
|
||||
Fatalf("invalid typecheckpartialcall")
|
||||
}
|
||||
|
||||
// Create top-level function.
|
||||
|
|
@ -518,7 +518,7 @@ func makepartialcall(fn *Node, t0 *Type, meth *Node) *Node {
|
|||
basetype = basetype.Type
|
||||
}
|
||||
if basetype.Etype != TINTER && basetype.Sym == nil {
|
||||
Fatal("missing base type for %v", rcvrtype)
|
||||
Fatalf("missing base type for %v", rcvrtype)
|
||||
}
|
||||
|
||||
var spkg *Pkg
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import (
|
|||
// n must be an integer constant.
|
||||
func (n *Node) Int() int64 {
|
||||
if !Isconst(n, CTINT) {
|
||||
Fatal("Int(%v)", n)
|
||||
Fatalf("Int(%v)", n)
|
||||
}
|
||||
return Mpgetfix(n.Val().U.(*Mpint))
|
||||
}
|
||||
|
|
@ -23,7 +23,7 @@ func (n *Node) Int() int64 {
|
|||
// n must be an integer constant.
|
||||
func (n *Node) SetInt(i int64) {
|
||||
if !Isconst(n, CTINT) {
|
||||
Fatal("SetInt(%v)", n)
|
||||
Fatalf("SetInt(%v)", n)
|
||||
}
|
||||
Mpmovecfix(n.Val().U.(*Mpint), i)
|
||||
}
|
||||
|
|
@ -32,7 +32,7 @@ func (n *Node) SetInt(i int64) {
|
|||
// n must be an integer constant.
|
||||
func (n *Node) SetBigInt(x *big.Int) {
|
||||
if !Isconst(n, CTINT) {
|
||||
Fatal("SetBigInt(%v)", n)
|
||||
Fatalf("SetBigInt(%v)", n)
|
||||
}
|
||||
n.Val().U.(*Mpint).Val.Set(x)
|
||||
}
|
||||
|
|
@ -41,7 +41,7 @@ func (n *Node) SetBigInt(x *big.Int) {
|
|||
// n must be an boolean constant.
|
||||
func (n *Node) Bool() bool {
|
||||
if !Isconst(n, CTBOOL) {
|
||||
Fatal("Int(%v)", n)
|
||||
Fatalf("Int(%v)", n)
|
||||
}
|
||||
return n.Val().U.(bool)
|
||||
}
|
||||
|
|
@ -396,7 +396,7 @@ func doesoverflow(v Val, t *Type) bool {
|
|||
switch v.Ctype() {
|
||||
case CTINT, CTRUNE:
|
||||
if !Isint[t.Etype] {
|
||||
Fatal("overflow: %v integer constant", t)
|
||||
Fatalf("overflow: %v integer constant", t)
|
||||
}
|
||||
if Mpcmpfixfix(v.U.(*Mpint), Minintval[t.Etype]) < 0 || Mpcmpfixfix(v.U.(*Mpint), Maxintval[t.Etype]) > 0 {
|
||||
return true
|
||||
|
|
@ -404,7 +404,7 @@ func doesoverflow(v Val, t *Type) bool {
|
|||
|
||||
case CTFLT:
|
||||
if !Isfloat[t.Etype] {
|
||||
Fatal("overflow: %v floating-point constant", t)
|
||||
Fatalf("overflow: %v floating-point constant", t)
|
||||
}
|
||||
if mpcmpfltflt(v.U.(*Mpflt), minfltval[t.Etype]) <= 0 || mpcmpfltflt(v.U.(*Mpflt), maxfltval[t.Etype]) >= 0 {
|
||||
return true
|
||||
|
|
@ -412,7 +412,7 @@ func doesoverflow(v Val, t *Type) bool {
|
|||
|
||||
case CTCPLX:
|
||||
if !Iscomplex[t.Etype] {
|
||||
Fatal("overflow: %v complex constant", t)
|
||||
Fatalf("overflow: %v complex constant", t)
|
||||
}
|
||||
if mpcmpfltflt(&v.U.(*Mpcplx).Real, minfltval[t.Etype]) <= 0 || mpcmpfltflt(&v.U.(*Mpcplx).Real, maxfltval[t.Etype]) >= 0 || mpcmpfltflt(&v.U.(*Mpcplx).Imag, minfltval[t.Etype]) <= 0 || mpcmpfltflt(&v.U.(*Mpcplx).Imag, maxfltval[t.Etype]) >= 0 {
|
||||
return true
|
||||
|
|
@ -787,7 +787,7 @@ func evconst(n *Node) {
|
|||
if (v.Ctype() == 0 || rv.Ctype() == 0) && nerrors > 0 {
|
||||
return
|
||||
}
|
||||
Fatal("constant type mismatch %v(%d) %v(%d)", nl.Type, v.Ctype(), nr.Type, rv.Ctype())
|
||||
Fatalf("constant type mismatch %v(%d) %v(%d)", nl.Type, v.Ctype(), nr.Type, rv.Ctype())
|
||||
}
|
||||
|
||||
// run op
|
||||
|
|
@ -1106,7 +1106,7 @@ func nodlit(v Val) *Node {
|
|||
n.SetVal(v)
|
||||
switch v.Ctype() {
|
||||
default:
|
||||
Fatal("nodlit ctype %d", v.Ctype())
|
||||
Fatalf("nodlit ctype %d", v.Ctype())
|
||||
|
||||
case CTSTR:
|
||||
n.Type = idealstring
|
||||
|
|
@ -1134,7 +1134,7 @@ func nodcplxlit(r Val, i Val) *Node {
|
|||
n.SetVal(Val{c})
|
||||
|
||||
if r.Ctype() != CTFLT || i.Ctype() != CTFLT {
|
||||
Fatal("nodcplxlit ctype %d/%d", r.Ctype(), i.Ctype())
|
||||
Fatalf("nodcplxlit ctype %d/%d", r.Ctype(), i.Ctype())
|
||||
}
|
||||
|
||||
mpmovefltflt(&c.Real, r.U.(*Mpflt))
|
||||
|
|
@ -1249,7 +1249,7 @@ func defaultlit(np **Node, t *Type) {
|
|||
Yyerror("defaultlit: unknown literal: %v", n)
|
||||
|
||||
case CTxxx:
|
||||
Fatal("defaultlit: idealkind is CTxxx: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("defaultlit: idealkind is CTxxx: %v", Nconv(n, obj.FmtSign))
|
||||
|
||||
case CTBOOL:
|
||||
t1 := Types[TBOOL]
|
||||
|
|
@ -1450,7 +1450,7 @@ func (n *Node) Convconst(con *Node, t *Type) {
|
|||
var i int64
|
||||
switch n.Val().Ctype() {
|
||||
default:
|
||||
Fatal("convconst ctype=%d %v", n.Val().Ctype(), Tconv(t, obj.FmtLong))
|
||||
Fatalf("convconst ctype=%d %v", n.Val().Ctype(), Tconv(t, obj.FmtLong))
|
||||
|
||||
case CTINT, CTRUNE:
|
||||
i = Mpgetfix(n.Val().U.(*Mpint))
|
||||
|
|
@ -1470,7 +1470,7 @@ func (n *Node) Convconst(con *Node, t *Type) {
|
|||
if Isfloat[tt] {
|
||||
con.SetVal(toflt(con.Val()))
|
||||
if con.Val().Ctype() != CTFLT {
|
||||
Fatal("convconst ctype=%d %v", con.Val().Ctype(), t)
|
||||
Fatalf("convconst ctype=%d %v", con.Val().Ctype(), t)
|
||||
}
|
||||
if tt == TFLOAT32 {
|
||||
con.SetVal(Val{truncfltlit(con.Val().U.(*Mpflt), t)})
|
||||
|
|
@ -1487,7 +1487,7 @@ func (n *Node) Convconst(con *Node, t *Type) {
|
|||
return
|
||||
}
|
||||
|
||||
Fatal("convconst %v constant", Tconv(t, obj.FmtLong))
|
||||
Fatalf("convconst %v constant", Tconv(t, obj.FmtLong))
|
||||
}
|
||||
|
||||
// complex multiply v *= rv
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ func complexbool(op int, nl, nr, res *Node, wantTrue bool, likely int, to *obj.P
|
|||
// break addable nc-complex into nr-real and ni-imaginary
|
||||
func subnode(nr *Node, ni *Node, nc *Node) {
|
||||
if !nc.Addable {
|
||||
Fatal("subnode not addable")
|
||||
Fatalf("subnode not addable")
|
||||
}
|
||||
|
||||
tc := Simsimtype(nc.Type)
|
||||
|
|
@ -230,7 +230,7 @@ func nodfconst(n *Node, t *Type, fval *Mpflt) {
|
|||
n.Type = t
|
||||
|
||||
if !Isfloat[t.Etype] {
|
||||
Fatal("nodfconst: bad type %v", t)
|
||||
Fatalf("nodfconst: bad type %v", t)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -288,14 +288,14 @@ func Complexmove(f *Node, t *Node) {
|
|||
}
|
||||
|
||||
if !t.Addable {
|
||||
Fatal("complexmove: to not addable")
|
||||
Fatalf("complexmove: to not addable")
|
||||
}
|
||||
|
||||
ft := Simsimtype(f.Type)
|
||||
tt := Simsimtype(t.Type)
|
||||
switch uint32(ft)<<16 | uint32(tt) {
|
||||
default:
|
||||
Fatal("complexmove: unknown conversion: %v -> %v\n", f.Type, t.Type)
|
||||
Fatalf("complexmove: unknown conversion: %v -> %v\n", f.Type, t.Type)
|
||||
|
||||
// complex to complex move/convert.
|
||||
// make f addable.
|
||||
|
|
@ -403,7 +403,7 @@ func Complexgen(n *Node, res *Node) {
|
|||
switch n.Op {
|
||||
default:
|
||||
Dump("complexgen: unknown op", n)
|
||||
Fatal("complexgen: unknown op %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("complexgen: unknown op %v", Oconv(int(n.Op), 0))
|
||||
|
||||
case ODOT,
|
||||
ODOTPTR,
|
||||
|
|
@ -462,7 +462,7 @@ func Complexgen(n *Node, res *Node) {
|
|||
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("complexgen: unknown op %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("complexgen: unknown op %v", Oconv(int(n.Op), 0))
|
||||
|
||||
case OCONV:
|
||||
Complexmove(nl, res)
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ func popdcl() {
|
|||
}
|
||||
|
||||
if d == nil {
|
||||
Fatal("popdcl: no mark")
|
||||
Fatalf("popdcl: no mark")
|
||||
}
|
||||
dclstack = d.Link
|
||||
block = d.Block
|
||||
|
|
@ -198,7 +198,7 @@ func declare(n *Node, ctxt uint8) {
|
|||
}
|
||||
} else {
|
||||
if Curfn == nil && ctxt == PAUTO {
|
||||
Fatal("automatic outside function")
|
||||
Fatalf("automatic outside function")
|
||||
}
|
||||
if Curfn != nil {
|
||||
Curfn.Func.Dcl = list(Curfn.Func.Dcl, n)
|
||||
|
|
@ -238,7 +238,7 @@ func declare(n *Node, ctxt uint8) {
|
|||
|
||||
func addvar(n *Node, t *Type, ctxt uint8) {
|
||||
if n == nil || n.Sym == nil || (n.Op != ONAME && n.Op != ONONAME) || t == nil {
|
||||
Fatal("addvar: n=%v t=%v nil", n, t)
|
||||
Fatalf("addvar: n=%v t=%v nil", n, t)
|
||||
}
|
||||
|
||||
n.Op = ONAME
|
||||
|
|
@ -366,7 +366,7 @@ func constiter(vl *NodeList, t *Node, cl *NodeList) *NodeList {
|
|||
*/
|
||||
func newname(s *Sym) *Node {
|
||||
if s == nil {
|
||||
Fatal("newname nil")
|
||||
Fatalf("newname nil")
|
||||
}
|
||||
|
||||
n := Nod(ONAME, nil, nil)
|
||||
|
|
@ -548,7 +548,7 @@ func colas(left *NodeList, right *NodeList, lno int32) *Node {
|
|||
*/
|
||||
func ifacedcl(n *Node) {
|
||||
if n.Op != ODCLFIELD || n.Right == nil {
|
||||
Fatal("ifacedcl")
|
||||
Fatalf("ifacedcl")
|
||||
}
|
||||
|
||||
if isblank(n.Left) {
|
||||
|
|
@ -582,7 +582,7 @@ func ifacedcl(n *Node) {
|
|||
func funchdr(n *Node) {
|
||||
// change the declaration context from extern to auto
|
||||
if Funcdepth == 0 && dclcontext != PEXTERN {
|
||||
Fatal("funchdr: dclcontext")
|
||||
Fatalf("funchdr: dclcontext")
|
||||
}
|
||||
|
||||
if importpkg == nil && n.Func.Nname != nil {
|
||||
|
|
@ -607,7 +607,7 @@ func funchdr(n *Node) {
|
|||
|
||||
func funcargs(nt *Node) {
|
||||
if nt.Op != OTFUNC {
|
||||
Fatal("funcargs %v", Oconv(int(nt.Op), 0))
|
||||
Fatalf("funcargs %v", Oconv(int(nt.Op), 0))
|
||||
}
|
||||
|
||||
// re-start the variable generation number
|
||||
|
|
@ -621,7 +621,7 @@ func funcargs(nt *Node) {
|
|||
if nt.Left != nil {
|
||||
n := nt.Left
|
||||
if n.Op != ODCLFIELD {
|
||||
Fatal("funcargs receiver %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("funcargs receiver %v", Oconv(int(n.Op), 0))
|
||||
}
|
||||
if n.Left != nil {
|
||||
n.Left.Op = ONAME
|
||||
|
|
@ -638,7 +638,7 @@ func funcargs(nt *Node) {
|
|||
for l := nt.List; l != nil; l = l.Next {
|
||||
n = l.N
|
||||
if n.Op != ODCLFIELD {
|
||||
Fatal("funcargs in %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("funcargs in %v", Oconv(int(n.Op), 0))
|
||||
}
|
||||
if n.Left != nil {
|
||||
n.Left.Op = ONAME
|
||||
|
|
@ -659,7 +659,7 @@ func funcargs(nt *Node) {
|
|||
n = l.N
|
||||
|
||||
if n.Op != ODCLFIELD {
|
||||
Fatal("funcargs out %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("funcargs out %v", Oconv(int(n.Op), 0))
|
||||
}
|
||||
|
||||
if n.Left == nil {
|
||||
|
|
@ -705,7 +705,7 @@ func funcargs(nt *Node) {
|
|||
*/
|
||||
func funcargs2(t *Type) {
|
||||
if t.Etype != TFUNC {
|
||||
Fatal("funcargs2 %v", t)
|
||||
Fatalf("funcargs2 %v", t)
|
||||
}
|
||||
|
||||
if t.Thistuple != 0 {
|
||||
|
|
@ -753,7 +753,7 @@ func funcargs2(t *Type) {
|
|||
func funcbody(n *Node) {
|
||||
// change the declaration context from auto to extern
|
||||
if dclcontext != PAUTO {
|
||||
Fatal("funcbody: dclcontext")
|
||||
Fatalf("funcbody: dclcontext")
|
||||
}
|
||||
popdcl()
|
||||
Funcdepth--
|
||||
|
|
@ -813,7 +813,7 @@ func structfield(n *Node) *Type {
|
|||
lineno = n.Lineno
|
||||
|
||||
if n.Op != ODCLFIELD {
|
||||
Fatal("structfield: oops %v\n", n)
|
||||
Fatalf("structfield: oops %v\n", n)
|
||||
}
|
||||
|
||||
f := typ(TFIELD)
|
||||
|
|
@ -943,7 +943,7 @@ func interfacefield(n *Node) *Type {
|
|||
lineno = n.Lineno
|
||||
|
||||
if n.Op != ODCLFIELD {
|
||||
Fatal("interfacefield: oops %v\n", n)
|
||||
Fatalf("interfacefield: oops %v\n", n)
|
||||
}
|
||||
|
||||
if n.Val().Ctype() != CTxxx {
|
||||
|
|
@ -1356,7 +1356,7 @@ func methodname1(n *Node, t *Node) *Node {
|
|||
func addmethod(sf *Sym, t *Type, local bool, nointerface bool) {
|
||||
// get field sym
|
||||
if sf == nil {
|
||||
Fatal("no method symbol")
|
||||
Fatalf("no method symbol")
|
||||
}
|
||||
|
||||
// get parent type sym
|
||||
|
|
@ -1433,7 +1433,7 @@ func addmethod(sf *Sym, t *Type, local bool, nointerface bool) {
|
|||
for f := pa.Method; f != nil; f = f.Down {
|
||||
d = f
|
||||
if f.Etype != TFIELD {
|
||||
Fatal("addmethod: not TFIELD: %v", Tconv(f, obj.FmtLong))
|
||||
Fatalf("addmethod: not TFIELD: %v", Tconv(f, obj.FmtLong))
|
||||
}
|
||||
if sf.Name != f.Sym.Name {
|
||||
continue
|
||||
|
|
@ -1449,7 +1449,7 @@ func addmethod(sf *Sym, t *Type, local bool, nointerface bool) {
|
|||
|
||||
// during import unexported method names should be in the type's package
|
||||
if importpkg != nil && f.Sym != nil && !exportname(f.Sym.Name) && f.Sym.Pkg != structpkg {
|
||||
Fatal("imported method name %v in wrong package %s\n", Sconv(f.Sym, obj.FmtSign), structpkg.Name)
|
||||
Fatalf("imported method name %v in wrong package %s\n", Sconv(f.Sym, obj.FmtSign), structpkg.Name)
|
||||
}
|
||||
|
||||
if d == nil {
|
||||
|
|
@ -1466,7 +1466,7 @@ func funccompile(n *Node) {
|
|||
|
||||
if n.Type == nil {
|
||||
if nerrors == 0 {
|
||||
Fatal("funccompile missing type")
|
||||
Fatalf("funccompile missing type")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
@ -1475,7 +1475,7 @@ func funccompile(n *Node) {
|
|||
checkwidth(n.Type)
|
||||
|
||||
if Curfn != nil {
|
||||
Fatal("funccompile %v inside %v", n.Func.Nname.Sym, Curfn.Func.Nname.Sym)
|
||||
Fatalf("funccompile %v inside %v", n.Func.Nname.Sym, Curfn.Func.Nname.Sym)
|
||||
}
|
||||
|
||||
Stksize = 0
|
||||
|
|
|
|||
|
|
@ -323,7 +323,7 @@ func (e *EscState) nodeEscState(n *Node) *NodeEscState {
|
|||
return nE
|
||||
}
|
||||
if n.Opt() != nil {
|
||||
Fatal("nodeEscState: opt in use (%T)", n.Opt())
|
||||
Fatalf("nodeEscState: opt in use (%T)", n.Opt())
|
||||
}
|
||||
nE := new(NodeEscState)
|
||||
nE.Curfn = Curfn
|
||||
|
|
@ -334,7 +334,7 @@ func (e *EscState) nodeEscState(n *Node) *NodeEscState {
|
|||
|
||||
func (e *EscState) track(n *Node) {
|
||||
if Curfn == nil {
|
||||
Fatal("EscState.track: Curfn nil")
|
||||
Fatalf("EscState.track: Curfn nil")
|
||||
}
|
||||
n.Esc = EscNone // until proven otherwise
|
||||
nE := e.nodeEscState(n)
|
||||
|
|
@ -368,7 +368,7 @@ func escMax(e, etype uint16) uint16 {
|
|||
if e&EscMask >= EscScope {
|
||||
// normalize
|
||||
if e&^EscMask != 0 {
|
||||
Fatal("Escape information had unexpected return encoding bits (w/ EscScope, EscHeap, EscNever), e&EscMask=%v", e&EscMask)
|
||||
Fatalf("Escape information had unexpected return encoding bits (w/ EscScope, EscHeap, EscNever), e&EscMask=%v", e&EscMask)
|
||||
}
|
||||
}
|
||||
if e&EscMask > etype {
|
||||
|
|
@ -478,7 +478,7 @@ func escAnalyze(all *NodeList, recursive bool) {
|
|||
func escfunc(e *EscState, func_ *Node) {
|
||||
// print("escfunc %N %s\n", func->nname, e->recursive?"(recursive)":"");
|
||||
if func_.Esc != 1 {
|
||||
Fatal("repeat escfunc %v", func_.Func.Nname)
|
||||
Fatalf("repeat escfunc %v", func_.Func.Nname)
|
||||
}
|
||||
func_.Esc = EscFuncStarted
|
||||
|
||||
|
|
@ -549,7 +549,7 @@ func escloopdepth(e *EscState, n *Node) {
|
|||
switch n.Op {
|
||||
case OLABEL:
|
||||
if n.Left == nil || n.Left.Sym == nil {
|
||||
Fatal("esc:label without label: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("esc:label without label: %v", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
|
||||
// Walk will complain about this label being already defined, but that's not until
|
||||
|
|
@ -560,7 +560,7 @@ func escloopdepth(e *EscState, n *Node) {
|
|||
|
||||
case OGOTO:
|
||||
if n.Left == nil || n.Left.Sym == nil {
|
||||
Fatal("esc:goto without label: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("esc:goto without label: %v", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
|
||||
// If we come past one that's uninitialized, this must be a (harmless) forward jump
|
||||
|
|
@ -766,7 +766,7 @@ func esc(e *EscState, n *Node, up *Node) {
|
|||
escassign(e, ll.N, lr.N)
|
||||
}
|
||||
if lr != nil || ll != nil {
|
||||
Fatal("esc oas2func")
|
||||
Fatalf("esc oas2func")
|
||||
}
|
||||
|
||||
case ORETURN:
|
||||
|
|
@ -787,7 +787,7 @@ func esc(e *EscState, n *Node, up *Node) {
|
|||
}
|
||||
|
||||
if ll != nil {
|
||||
Fatal("esc return list")
|
||||
Fatalf("esc return list")
|
||||
}
|
||||
|
||||
// Argument could leak through recover.
|
||||
|
|
@ -949,7 +949,7 @@ func escassign(e *EscState, dst *Node, src *Node) {
|
|||
switch dst.Op {
|
||||
default:
|
||||
Dump("dst", dst)
|
||||
Fatal("escassign: unexpected dst")
|
||||
Fatalf("escassign: unexpected dst")
|
||||
|
||||
case OARRAYLIT,
|
||||
OCLOSURE,
|
||||
|
|
@ -1112,7 +1112,7 @@ func mktag(mask int) *string {
|
|||
break
|
||||
|
||||
default:
|
||||
Fatal("escape mktag")
|
||||
Fatalf("escape mktag")
|
||||
}
|
||||
|
||||
if mask < len(tags) && tags[mask] != "" {
|
||||
|
|
@ -1239,7 +1239,7 @@ func escassignfromtag(e *EscState, note *string, dsts *NodeList, src *Node) uint
|
|||
// so there is no need to check here.
|
||||
|
||||
if em != 0 && dsts == nil {
|
||||
Fatal("corrupt esc tag %q or messed up escretval list\n", note)
|
||||
Fatalf("corrupt esc tag %q or messed up escretval list\n", note)
|
||||
}
|
||||
return em0
|
||||
}
|
||||
|
|
@ -1334,7 +1334,7 @@ func esccall(e *EscState, n *Node, up *Node) {
|
|||
var fn *Node
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("esccall")
|
||||
Fatalf("esccall")
|
||||
|
||||
case OCALLFUNC:
|
||||
fn = n.Left
|
||||
|
|
@ -1394,7 +1394,7 @@ func esccall(e *EscState, n *Node, up *Node) {
|
|||
// function in same mutually recursive group. Incorporate into flow graph.
|
||||
// print("esc local fn: %N\n", fn->ntype);
|
||||
if fn.Name.Defn.Esc == EscFuncUnknown || nE.Escretval != nil {
|
||||
Fatal("graph inconsistency")
|
||||
Fatalf("graph inconsistency")
|
||||
}
|
||||
|
||||
// set up out list on this call node
|
||||
|
|
@ -1443,7 +1443,7 @@ func esccall(e *EscState, n *Node, up *Node) {
|
|||
|
||||
// Imported or completely analyzed function. Use the escape tags.
|
||||
if nE.Escretval != nil {
|
||||
Fatal("esc already decorated call %v\n", Nconv(n, obj.FmtSign))
|
||||
Fatalf("esc already decorated call %v\n", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
|
||||
if Debug['m'] > 2 {
|
||||
|
|
|
|||
|
|
@ -209,7 +209,7 @@ func dumpexportconst(s *Sym) {
|
|||
n := s.Def
|
||||
typecheck(&n, Erv)
|
||||
if n == nil || n.Op != OLITERAL {
|
||||
Fatal("dumpexportconst: oconst nil: %v", s)
|
||||
Fatalf("dumpexportconst: oconst nil: %v", s)
|
||||
}
|
||||
|
||||
t := n.Type // may or may not be specified
|
||||
|
|
@ -532,7 +532,7 @@ func dumpasmhdr() {
|
|||
|
||||
b, err := obj.Bopenw(asmhdr)
|
||||
if err != nil {
|
||||
Fatal("%v", err)
|
||||
Fatalf("%v", err)
|
||||
}
|
||||
fmt.Fprintf(b, "// generated by %cg -asmhdr from package %s\n\n", Thearch.Thechar, localpkg.Name)
|
||||
var n *Node
|
||||
|
|
|
|||
|
|
@ -433,7 +433,7 @@ func symfmt(s *Sym, flag int) string {
|
|||
|
||||
case FExp:
|
||||
if s.Name != "" && s.Name[0] == '.' {
|
||||
Fatal("exporting synthetic symbol %s", s.Name)
|
||||
Fatalf("exporting synthetic symbol %s", s.Name)
|
||||
}
|
||||
if s.Pkg != builtinpkg {
|
||||
return fmt.Sprintf("@%q.%s", s.Pkg.Path, s.Name)
|
||||
|
|
@ -755,7 +755,7 @@ func typefmt(t *Type, flag int) string {
|
|||
}
|
||||
|
||||
if fmtmode == FExp {
|
||||
Fatal("missing %v case during export", Econv(int(t.Etype), 0))
|
||||
Fatalf("missing %v case during export", Econv(int(t.Etype), 0))
|
||||
}
|
||||
|
||||
// Don't know how to handle - fall back to detailed prints.
|
||||
|
|
@ -1672,7 +1672,7 @@ func Nconv(n *Node, flag int) string {
|
|||
dumpdepth--
|
||||
|
||||
default:
|
||||
Fatal("unhandled %%N mode")
|
||||
Fatalf("unhandled %%N mode")
|
||||
}
|
||||
|
||||
flag = sf
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ func addrescapes(n *Node) {
|
|||
n.Name.Param.Stackparam.Type = n.Type
|
||||
n.Name.Param.Stackparam.Addable = true
|
||||
if n.Xoffset == BADWIDTH {
|
||||
Fatal("addrescapes before param assignment")
|
||||
Fatalf("addrescapes before param assignment")
|
||||
}
|
||||
n.Name.Param.Stackparam.Xoffset = n.Xoffset
|
||||
fallthrough
|
||||
|
|
@ -226,7 +226,7 @@ func Genlist(l *NodeList) {
|
|||
func cgen_proc(n *Node, proc int) {
|
||||
switch n.Left.Op {
|
||||
default:
|
||||
Fatal("cgen_proc: unknown call %v", Oconv(int(n.Left.Op), 0))
|
||||
Fatalf("cgen_proc: unknown call %v", Oconv(int(n.Left.Op), 0))
|
||||
|
||||
case OCALLMETH:
|
||||
cgen_callmeth(n.Left, proc)
|
||||
|
|
@ -250,7 +250,7 @@ func cgen_dcl(n *Node) {
|
|||
}
|
||||
if n.Op != ONAME {
|
||||
Dump("cgen_dcl", n)
|
||||
Fatal("cgen_dcl")
|
||||
Fatalf("cgen_dcl")
|
||||
}
|
||||
|
||||
if n.Class&PHEAP == 0 {
|
||||
|
|
@ -360,7 +360,7 @@ func Clearslim(n *Node) {
|
|||
Mpmovecfix(z.Val().U.(*Mpint), 0)
|
||||
|
||||
default:
|
||||
Fatal("clearslim called on type %v", n.Type)
|
||||
Fatalf("clearslim called on type %v", n.Type)
|
||||
}
|
||||
|
||||
ullmancalc(&z)
|
||||
|
|
@ -561,7 +561,7 @@ func Dotoffset(n *Node, oary []int64, nn **Node) int {
|
|||
case ODOT:
|
||||
if n.Xoffset == BADWIDTH {
|
||||
Dump("bad width in dotoffset", n)
|
||||
Fatal("bad width in dotoffset")
|
||||
Fatalf("bad width in dotoffset")
|
||||
}
|
||||
|
||||
i = Dotoffset(n.Left, oary, nn)
|
||||
|
|
@ -582,7 +582,7 @@ func Dotoffset(n *Node, oary []int64, nn **Node) int {
|
|||
case ODOTPTR:
|
||||
if n.Xoffset == BADWIDTH {
|
||||
Dump("bad width in dotoffset", n)
|
||||
Fatal("bad width in dotoffset")
|
||||
Fatalf("bad width in dotoffset")
|
||||
}
|
||||
|
||||
i = Dotoffset(n.Left, oary, nn)
|
||||
|
|
@ -607,7 +607,7 @@ func Dotoffset(n *Node, oary []int64, nn **Node) int {
|
|||
*/
|
||||
func Tempname(nn *Node, t *Type) {
|
||||
if Curfn == nil {
|
||||
Fatal("no curfn for tempname")
|
||||
Fatalf("no curfn for tempname")
|
||||
}
|
||||
|
||||
if t == nil {
|
||||
|
|
@ -661,7 +661,7 @@ func gen(n *Node) {
|
|||
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("gen: unknown op %v", Nconv(n, obj.FmtShort|obj.FmtSign))
|
||||
Fatalf("gen: unknown op %v", Nconv(n, obj.FmtShort|obj.FmtSign))
|
||||
|
||||
case OCASE,
|
||||
OFALL,
|
||||
|
|
@ -897,7 +897,7 @@ func gen(n *Node) {
|
|||
ret:
|
||||
if Anyregalloc() != wasregalloc {
|
||||
Dump("node", n)
|
||||
Fatal("registers left allocated")
|
||||
Fatalf("registers left allocated")
|
||||
}
|
||||
|
||||
lineno = lno
|
||||
|
|
@ -963,7 +963,7 @@ func cgen_callmeth(n *Node, proc int) {
|
|||
l := n.Left
|
||||
|
||||
if l.Op != ODOTMETH {
|
||||
Fatal("cgen_callmeth: not dotmethod: %v", l)
|
||||
Fatalf("cgen_callmeth: not dotmethod: %v", l)
|
||||
}
|
||||
|
||||
n2 := *n
|
||||
|
|
@ -1002,7 +1002,7 @@ func checklabels() {
|
|||
}
|
||||
|
||||
if lab.Gotopc != nil {
|
||||
Fatal("label %v never resolved", lab.Sym)
|
||||
Fatalf("label %v never resolved", lab.Sym)
|
||||
}
|
||||
for l = lab.Use; l != nil; l = l.Next {
|
||||
checkgoto(l.N, lab.Def)
|
||||
|
|
@ -1136,7 +1136,7 @@ func componentgen_wb(nr, nl *Node, wb bool) bool {
|
|||
nodr = *nr
|
||||
if !cadable(nr) {
|
||||
if nr.Ullman >= UINF && nodl.Op == OINDREG {
|
||||
Fatal("miscompile")
|
||||
Fatalf("miscompile")
|
||||
}
|
||||
Igen(nr, &nodr, nil)
|
||||
defer Regfree(&nodr)
|
||||
|
|
@ -1157,7 +1157,7 @@ func componentgen_wb(nr, nl *Node, wb bool) bool {
|
|||
visitComponents(nl.Type, 0, func(t *Type, offset int64) bool {
|
||||
if wb && int(Simtype[t.Etype]) == Tptr && t != itable {
|
||||
if ptrType != nil {
|
||||
Fatal("componentgen_wb %v", Tconv(nl.Type, 0))
|
||||
Fatalf("componentgen_wb %v", Tconv(nl.Type, 0))
|
||||
}
|
||||
ptrType = t
|
||||
ptrOffset = offset
|
||||
|
|
@ -1197,7 +1197,7 @@ func visitComponents(t *Type, startOffset int64, f func(elem *Type, elemOffset i
|
|||
// NOTE: Assuming little endian (signed top half at offset 4).
|
||||
// We don't have any 32-bit big-endian systems.
|
||||
if Thearch.Thechar != '5' && Thearch.Thechar != '8' {
|
||||
Fatal("unknown 32-bit architecture")
|
||||
Fatalf("unknown 32-bit architecture")
|
||||
}
|
||||
return f(Types[TUINT32], startOffset) &&
|
||||
f(Types[TINT32], startOffset+4)
|
||||
|
|
@ -1254,12 +1254,12 @@ func visitComponents(t *Type, startOffset int64, f func(elem *Type, elemOffset i
|
|||
// in code introduced in CL 6932045 to fix issue #4518.
|
||||
// But the test case in issue 4518 does not trigger this anymore,
|
||||
// so maybe this complication is no longer needed.
|
||||
Fatal("struct not at offset 0")
|
||||
Fatalf("struct not at offset 0")
|
||||
}
|
||||
|
||||
for field := t.Type; field != nil; field = field.Down {
|
||||
if field.Etype != TFIELD {
|
||||
Fatal("bad struct")
|
||||
Fatalf("bad struct")
|
||||
}
|
||||
if !visitComponents(field.Type, startOffset+field.Width, f) {
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ type NilVal struct{}
|
|||
func (v Val) Ctype() int {
|
||||
switch x := v.U.(type) {
|
||||
default:
|
||||
Fatal("unexpected Ctype for %T", v.U)
|
||||
Fatalf("unexpected Ctype for %T", v.U)
|
||||
panic("not reached")
|
||||
case nil:
|
||||
return 0
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ func Prog(as int) *obj.Prog {
|
|||
|
||||
if as == obj.ADATA || as == obj.AGLOBL {
|
||||
if ddumped != 0 {
|
||||
Fatal("already dumped data")
|
||||
Fatalf("already dumped data")
|
||||
}
|
||||
if dpc == nil {
|
||||
dpc = Ctxt.NewProg()
|
||||
|
|
@ -132,7 +132,7 @@ func Prog(as int) *obj.Prog {
|
|||
|
||||
func Nodreg(n *Node, t *Type, r int) {
|
||||
if t == nil {
|
||||
Fatal("nodreg: t nil")
|
||||
Fatalf("nodreg: t nil")
|
||||
}
|
||||
|
||||
*n = Node{}
|
||||
|
|
@ -310,7 +310,7 @@ func Naddr(a *obj.Addr, n *Node) {
|
|||
a := a // copy to let escape into Ctxt.Dconv
|
||||
Debug['h'] = 1
|
||||
Dump("naddr", n)
|
||||
Fatal("naddr: bad %v %v", Oconv(int(n.Op), 0), Ctxt.Dconv(a))
|
||||
Fatalf("naddr: bad %v %v", Oconv(int(n.Op), 0), Ctxt.Dconv(a))
|
||||
|
||||
case OREGISTER:
|
||||
a.Type = obj.TYPE_REG
|
||||
|
|
@ -346,7 +346,7 @@ func Naddr(a *obj.Addr, n *Node) {
|
|||
|
||||
case OCLOSUREVAR:
|
||||
if !Curfn.Func.Needctxt {
|
||||
Fatal("closurevar without needctxt")
|
||||
Fatalf("closurevar without needctxt")
|
||||
}
|
||||
a.Type = obj.TYPE_MEM
|
||||
a.Reg = int16(Thearch.REGCTXT)
|
||||
|
|
@ -384,7 +384,7 @@ func Naddr(a *obj.Addr, n *Node) {
|
|||
a.Type = obj.TYPE_MEM
|
||||
switch n.Class {
|
||||
default:
|
||||
Fatal("naddr: ONAME class %v %d\n", n.Sym, n.Class)
|
||||
Fatalf("naddr: ONAME class %v %d\n", n.Sym, n.Class)
|
||||
|
||||
case PEXTERN:
|
||||
a.Name = obj.NAME_EXTERN
|
||||
|
|
@ -410,7 +410,7 @@ func Naddr(a *obj.Addr, n *Node) {
|
|||
}
|
||||
switch n.Val().Ctype() {
|
||||
default:
|
||||
Fatal("naddr: const %v", Tconv(n.Type, obj.FmtLong))
|
||||
Fatalf("naddr: const %v", Tconv(n.Type, obj.FmtLong))
|
||||
|
||||
case CTFLT:
|
||||
a.Type = obj.TYPE_FCONST
|
||||
|
|
@ -443,7 +443,7 @@ func Naddr(a *obj.Addr, n *Node) {
|
|||
}
|
||||
if a.Type != obj.TYPE_MEM {
|
||||
a := a // copy to let escape into Ctxt.Dconv
|
||||
Fatal("naddr: OADDR %v (from %v)", Ctxt.Dconv(a), Oconv(int(n.Left.Op), 0))
|
||||
Fatalf("naddr: OADDR %v (from %v)", Ctxt.Dconv(a), Oconv(int(n.Left.Op), 0))
|
||||
}
|
||||
a.Type = obj.TYPE_ADDR
|
||||
|
||||
|
|
@ -518,10 +518,10 @@ func nodarg(t *Type, fp int) *Node {
|
|||
var savet Iter
|
||||
first := Structfirst(&savet, &t)
|
||||
if first == nil {
|
||||
Fatal("nodarg: bad struct")
|
||||
Fatalf("nodarg: bad struct")
|
||||
}
|
||||
if first.Width == BADWIDTH {
|
||||
Fatal("nodarg: offset not computed for %v", t)
|
||||
Fatalf("nodarg: offset not computed for %v", t)
|
||||
}
|
||||
n.Xoffset = first.Width
|
||||
n.Addable = true
|
||||
|
|
@ -529,7 +529,7 @@ func nodarg(t *Type, fp int) *Node {
|
|||
}
|
||||
|
||||
if t.Etype != TFIELD {
|
||||
Fatal("nodarg: not field %v", t)
|
||||
Fatalf("nodarg: not field %v", t)
|
||||
}
|
||||
|
||||
if fp == 1 {
|
||||
|
|
@ -547,7 +547,7 @@ func nodarg(t *Type, fp int) *Node {
|
|||
n.Sym = t.Sym
|
||||
|
||||
if t.Width == BADWIDTH {
|
||||
Fatal("nodarg: offset not computed for %v", t)
|
||||
Fatalf("nodarg: offset not computed for %v", t)
|
||||
}
|
||||
n.Xoffset = t.Width
|
||||
n.Addable = true
|
||||
|
|
@ -574,7 +574,7 @@ fp:
|
|||
n.Class = PPARAM
|
||||
|
||||
case 2: // offset output arg
|
||||
Fatal("shouldn't be used")
|
||||
Fatalf("shouldn't be used")
|
||||
}
|
||||
|
||||
n.Typecheck = 1
|
||||
|
|
@ -583,7 +583,7 @@ fp:
|
|||
|
||||
func Patch(p *obj.Prog, to *obj.Prog) {
|
||||
if p.To.Type != obj.TYPE_BRANCH {
|
||||
Fatal("patch: not a branch")
|
||||
Fatalf("patch: not a branch")
|
||||
}
|
||||
p.To.Val = to
|
||||
p.To.Offset = to.Pc
|
||||
|
|
@ -591,7 +591,7 @@ func Patch(p *obj.Prog, to *obj.Prog) {
|
|||
|
||||
func unpatch(p *obj.Prog) *obj.Prog {
|
||||
if p.To.Type != obj.TYPE_BRANCH {
|
||||
Fatal("unpatch: not a branch")
|
||||
Fatalf("unpatch: not a branch")
|
||||
}
|
||||
q, _ := p.To.Val.(*obj.Prog)
|
||||
p.To.Val = nil
|
||||
|
|
@ -669,18 +669,18 @@ func Anyregalloc() bool {
|
|||
*/
|
||||
func Regalloc(n *Node, t *Type, o *Node) {
|
||||
if t == nil {
|
||||
Fatal("regalloc: t nil")
|
||||
Fatalf("regalloc: t nil")
|
||||
}
|
||||
et := int(Simtype[t.Etype])
|
||||
if Ctxt.Arch.Regsize == 4 && (et == TINT64 || et == TUINT64) {
|
||||
Fatal("regalloc 64bit")
|
||||
Fatalf("regalloc 64bit")
|
||||
}
|
||||
|
||||
var i int
|
||||
Switch:
|
||||
switch et {
|
||||
default:
|
||||
Fatal("regalloc: unknown type %v", t)
|
||||
Fatalf("regalloc: unknown type %v", t)
|
||||
|
||||
case TINT8, TUINT8, TINT16, TUINT16, TINT32, TUINT32, TINT64, TUINT64, TPTR32, TPTR64, TBOOL:
|
||||
if o != nil && o.Op == OREGISTER {
|
||||
|
|
@ -696,7 +696,7 @@ Switch:
|
|||
}
|
||||
Flusherrors()
|
||||
Regdump()
|
||||
Fatal("out of fixed registers")
|
||||
Fatalf("out of fixed registers")
|
||||
|
||||
case TFLOAT32, TFLOAT64:
|
||||
if Thearch.Use387 {
|
||||
|
|
@ -716,7 +716,7 @@ Switch:
|
|||
}
|
||||
Flusherrors()
|
||||
Regdump()
|
||||
Fatal("out of floating registers")
|
||||
Fatalf("out of floating registers")
|
||||
|
||||
case TCOMPLEX64, TCOMPLEX128:
|
||||
Tempname(n, t)
|
||||
|
|
@ -741,7 +741,7 @@ func Regfree(n *Node) {
|
|||
return
|
||||
}
|
||||
if n.Op != OREGISTER && n.Op != OINDREG {
|
||||
Fatal("regfree: not a register")
|
||||
Fatalf("regfree: not a register")
|
||||
}
|
||||
i := int(n.Reg)
|
||||
if i == Thearch.REGSP {
|
||||
|
|
@ -752,12 +752,12 @@ func Regfree(n *Node) {
|
|||
Thearch.FREGMIN <= i && i <= Thearch.FREGMAX:
|
||||
// ok
|
||||
default:
|
||||
Fatal("regfree: reg out of range")
|
||||
Fatalf("regfree: reg out of range")
|
||||
}
|
||||
|
||||
i -= Thearch.REGMIN
|
||||
if reg[i] <= 0 {
|
||||
Fatal("regfree: reg not allocated")
|
||||
Fatalf("regfree: reg not allocated")
|
||||
}
|
||||
reg[i]--
|
||||
if reg[i] == 0 {
|
||||
|
|
@ -772,7 +772,7 @@ func Reginuse(r int) bool {
|
|||
Thearch.FREGMIN <= r && r <= Thearch.FREGMAX:
|
||||
// ok
|
||||
default:
|
||||
Fatal("reginuse: reg out of range")
|
||||
Fatalf("reginuse: reg out of range")
|
||||
}
|
||||
|
||||
return reg[r-Thearch.REGMIN] > 0
|
||||
|
|
@ -782,7 +782,7 @@ func Reginuse(r int) bool {
|
|||
// so that a register can be given up but then reclaimed.
|
||||
func Regrealloc(n *Node) {
|
||||
if n.Op != OREGISTER && n.Op != OINDREG {
|
||||
Fatal("regrealloc: not a register")
|
||||
Fatalf("regrealloc: not a register")
|
||||
}
|
||||
i := int(n.Reg)
|
||||
if i == Thearch.REGSP {
|
||||
|
|
@ -793,7 +793,7 @@ func Regrealloc(n *Node) {
|
|||
Thearch.FREGMIN <= i && i <= Thearch.FREGMAX:
|
||||
// ok
|
||||
default:
|
||||
Fatal("regrealloc: reg out of range")
|
||||
Fatalf("regrealloc: reg out of range")
|
||||
}
|
||||
|
||||
i -= Thearch.REGMIN
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ func fnpkg(fn *Node) *Pkg {
|
|||
rcvr = rcvr.Type
|
||||
}
|
||||
if rcvr.Sym == nil {
|
||||
Fatal("receiver with no sym: [%v] %v (%v)", fn.Sym, Nconv(fn, obj.FmtLong), rcvr)
|
||||
Fatalf("receiver with no sym: [%v] %v (%v)", fn.Sym, Nconv(fn, obj.FmtLong), rcvr)
|
||||
}
|
||||
return rcvr.Sym.Pkg
|
||||
}
|
||||
|
|
@ -100,10 +100,10 @@ func typecheckinl(fn *Node) {
|
|||
// fn and ->nbody will already have been typechecked.
|
||||
func caninl(fn *Node) {
|
||||
if fn.Op != ODCLFUNC {
|
||||
Fatal("caninl %v", fn)
|
||||
Fatalf("caninl %v", fn)
|
||||
}
|
||||
if fn.Func.Nname == nil {
|
||||
Fatal("caninl no nname %v", Nconv(fn, obj.FmtSign))
|
||||
Fatalf("caninl no nname %v", Nconv(fn, obj.FmtSign))
|
||||
}
|
||||
|
||||
// If fn has no body (is defined outside of Go), cannot inline it.
|
||||
|
|
@ -112,7 +112,7 @@ func caninl(fn *Node) {
|
|||
}
|
||||
|
||||
if fn.Typecheck == 0 {
|
||||
Fatal("caninl on non-typechecked function %v", fn)
|
||||
Fatalf("caninl on non-typechecked function %v", fn)
|
||||
}
|
||||
|
||||
// can't handle ... args yet
|
||||
|
|
@ -196,10 +196,10 @@ func ishairy(n *Node, budget *int) bool {
|
|||
// Call is okay if inlinable and we have the budget for the body.
|
||||
case OCALLMETH:
|
||||
if n.Left.Type == nil {
|
||||
Fatal("no function type for [%p] %v\n", n.Left, Nconv(n.Left, obj.FmtSign))
|
||||
Fatalf("no function type for [%p] %v\n", n.Left, Nconv(n.Left, obj.FmtSign))
|
||||
}
|
||||
if n.Left.Type.Nname == nil {
|
||||
Fatal("no function definition for [%p] %v\n", n.Left.Type, Tconv(n.Left.Type, obj.FmtSign))
|
||||
Fatalf("no function definition for [%p] %v\n", n.Left.Type, Tconv(n.Left.Type, obj.FmtSign))
|
||||
}
|
||||
if n.Left.Type.Nname.Func.Inl != nil {
|
||||
*budget -= int(n.Left.Type.Nname.Func.InlCost)
|
||||
|
|
@ -277,7 +277,7 @@ func inlcalls(fn *Node) {
|
|||
Curfn = fn
|
||||
inlnode(&fn)
|
||||
if fn != Curfn {
|
||||
Fatal("inlnode replaced curfn")
|
||||
Fatalf("inlnode replaced curfn")
|
||||
}
|
||||
Curfn = savefn
|
||||
}
|
||||
|
|
@ -308,7 +308,7 @@ func inlconv2expr(np **Node) {
|
|||
// statements.
|
||||
func inlconv2list(n *Node) *NodeList {
|
||||
if n.Op != OINLCALL || n.Rlist == nil {
|
||||
Fatal("inlconv2list %v\n", Nconv(n, obj.FmtSign))
|
||||
Fatalf("inlconv2list %v\n", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
|
||||
l := n.Rlist
|
||||
|
|
@ -470,11 +470,11 @@ func inlnode(np **Node) {
|
|||
|
||||
// typecheck should have resolved ODOTMETH->type, whose nname points to the actual function.
|
||||
if n.Left.Type == nil {
|
||||
Fatal("no function type for [%p] %v\n", n.Left, Nconv(n.Left, obj.FmtSign))
|
||||
Fatalf("no function type for [%p] %v\n", n.Left, Nconv(n.Left, obj.FmtSign))
|
||||
}
|
||||
|
||||
if n.Left.Type.Nname == nil {
|
||||
Fatal("no function definition for [%p] %v\n", n.Left.Type, Tconv(n.Left.Type, obj.FmtSign))
|
||||
Fatalf("no function definition for [%p] %v\n", n.Left.Type, Tconv(n.Left.Type, obj.FmtSign))
|
||||
}
|
||||
|
||||
mkinlcall(np, n.Left.Type.Nname, n.Isddd)
|
||||
|
|
@ -500,7 +500,7 @@ func mkinlcall(np **Node, fn *Node, isddd bool) {
|
|||
func tinlvar(t *Type) *Node {
|
||||
if t.Nname != nil && !isblank(t.Nname) {
|
||||
if t.Nname.Name.Inlvar == nil {
|
||||
Fatal("missing inlvar for %v\n", t.Nname)
|
||||
Fatalf("missing inlvar for %v\n", t.Nname)
|
||||
}
|
||||
return t.Nname.Name.Inlvar
|
||||
}
|
||||
|
|
@ -600,13 +600,13 @@ func mkinlcall1(np **Node, fn *Node, isddd bool) {
|
|||
t := getthisx(fn.Type).Type
|
||||
|
||||
if t != nil && t.Nname != nil && !isblank(t.Nname) && t.Nname.Name.Inlvar == nil {
|
||||
Fatal("missing inlvar for %v\n", t.Nname)
|
||||
Fatalf("missing inlvar for %v\n", t.Nname)
|
||||
}
|
||||
if n.Left.Left == nil {
|
||||
Fatal("method call without receiver: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("method call without receiver: %v", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
if t == nil {
|
||||
Fatal("method call unknown receiver type: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("method call unknown receiver type: %v", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
as = Nod(OAS, tinlvar(t), n.Left.Left)
|
||||
if as != nil {
|
||||
|
|
@ -662,17 +662,17 @@ func mkinlcall1(np **Node, fn *Node, isddd bool) {
|
|||
if fn.Type.Thistuple != 0 && n.Left.Op != ODOTMETH {
|
||||
// non-method call to method
|
||||
if n.List == nil {
|
||||
Fatal("non-method call to method without first arg: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("non-method call to method without first arg: %v", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
|
||||
// append receiver inlvar to LHS.
|
||||
t := getthisx(fn.Type).Type
|
||||
|
||||
if t != nil && t.Nname != nil && !isblank(t.Nname) && t.Nname.Name.Inlvar == nil {
|
||||
Fatal("missing inlvar for %v\n", t.Nname)
|
||||
Fatalf("missing inlvar for %v\n", t.Nname)
|
||||
}
|
||||
if t == nil {
|
||||
Fatal("method call unknown receiver type: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("method call unknown receiver type: %v", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
as.List = list(as.List, tinlvar(t))
|
||||
ll = ll.Next // track argument count.
|
||||
|
|
@ -732,7 +732,7 @@ func mkinlcall1(np **Node, fn *Node, isddd bool) {
|
|||
}
|
||||
|
||||
if ll != nil || t != nil {
|
||||
Fatal("arg count mismatch: %v vs %v\n", Tconv(getinargx(fn.Type), obj.FmtSharp), Hconv(n.List, obj.FmtComma))
|
||||
Fatalf("arg count mismatch: %v vs %v\n", Tconv(getinargx(fn.Type), obj.FmtSharp), Hconv(n.List, obj.FmtComma))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -956,7 +956,7 @@ func inlsubst(n *Node) *Node {
|
|||
m.Ninit = nil
|
||||
|
||||
if n.Op == OCLOSURE {
|
||||
Fatal("cannot inline function containing closure: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("cannot inline function containing closure: %v", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
|
||||
m.Left = inlsubst(n.Left)
|
||||
|
|
|
|||
|
|
@ -305,7 +305,7 @@ func Main() {
|
|||
|
||||
Thearch.Betypeinit()
|
||||
if Widthptr == 0 {
|
||||
Fatal("betypeinit failed")
|
||||
Fatalf("betypeinit failed")
|
||||
}
|
||||
|
||||
lexinit()
|
||||
|
|
@ -2200,7 +2200,7 @@ func lexinit() {
|
|||
etype = syms[i].etype
|
||||
if etype != Txxx {
|
||||
if etype < 0 || etype >= len(Types) {
|
||||
Fatal("lexinit: %s bad etype", s.Name)
|
||||
Fatalf("lexinit: %s bad etype", s.Name)
|
||||
}
|
||||
s1 = Pkglookup(syms[i].name, builtinpkg)
|
||||
t = Types[etype]
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ func dumpglobls() {
|
|||
}
|
||||
|
||||
if n.Type == nil {
|
||||
Fatal("external %v nil type\n", n)
|
||||
Fatalf("external %v nil type\n", n)
|
||||
}
|
||||
if n.Class == PFUNC {
|
||||
continue
|
||||
|
|
@ -276,7 +276,7 @@ func slicebytes(nam *Node, s string, len int) {
|
|||
ggloblsym(sym, int32(off), obj.NOPTR|obj.LOCAL)
|
||||
|
||||
if nam.Op != ONAME {
|
||||
Fatal("slicebytes %v", nam)
|
||||
Fatalf("slicebytes %v", nam)
|
||||
}
|
||||
off = int(nam.Xoffset)
|
||||
off = dsymptr(nam.Sym, off, sym, 0)
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ func ordersafeexpr(n *Node, order *Order) *Node {
|
|||
return a
|
||||
}
|
||||
|
||||
Fatal("ordersafeexpr %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("ordersafeexpr %v", Oconv(int(n.Op), 0))
|
||||
return nil // not reached
|
||||
}
|
||||
|
||||
|
|
@ -337,7 +337,7 @@ func ismulticall(l *NodeList) bool {
|
|||
// and then returns the list t1, t2, ....
|
||||
func copyret(n *Node, order *Order) *NodeList {
|
||||
if n.Type.Etype != TSTRUCT || n.Type.Funarg == 0 {
|
||||
Fatal("copyret %v %d", n.Type, n.Left.Type.Outtuple)
|
||||
Fatalf("copyret %v %d", n.Type, n.Left.Type.Outtuple)
|
||||
}
|
||||
|
||||
var l1 *NodeList
|
||||
|
|
@ -403,7 +403,7 @@ func ordercall(n *Node, order *Order) {
|
|||
func ordermapassign(n *Node, order *Order) {
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("ordermapassign %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("ordermapassign %v", Oconv(int(n.Op), 0))
|
||||
|
||||
case OAS:
|
||||
order.out = list(order.out, n)
|
||||
|
|
@ -462,7 +462,7 @@ func orderstmt(n *Node, order *Order) {
|
|||
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("orderstmt %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("orderstmt %v", Oconv(int(n.Op), 0))
|
||||
|
||||
case OVARKILL:
|
||||
order.out = list(order.out, n)
|
||||
|
|
@ -704,7 +704,7 @@ func orderstmt(n *Node, order *Order) {
|
|||
orderexpr(&n.Right, order, nil)
|
||||
switch n.Type.Etype {
|
||||
default:
|
||||
Fatal("orderstmt range %v", n.Type)
|
||||
Fatalf("orderstmt range %v", n.Type)
|
||||
|
||||
// Mark []byte(str) range expression to reuse string backing storage.
|
||||
// It is safe because the storage cannot be mutated.
|
||||
|
|
@ -773,7 +773,7 @@ func orderstmt(n *Node, order *Order) {
|
|||
var r *Node
|
||||
for l := n.List; l != nil; l = l.Next {
|
||||
if l.N.Op != OXCASE {
|
||||
Fatal("order select case %v", Oconv(int(l.N.Op), 0))
|
||||
Fatalf("order select case %v", Oconv(int(l.N.Op), 0))
|
||||
}
|
||||
r = l.N.Left
|
||||
setlineno(l.N)
|
||||
|
|
@ -781,7 +781,7 @@ func orderstmt(n *Node, order *Order) {
|
|||
// Append any new body prologue to ninit.
|
||||
// The next loop will insert ninit into nbody.
|
||||
if l.N.Ninit != nil {
|
||||
Fatal("order select ninit")
|
||||
Fatalf("order select ninit")
|
||||
}
|
||||
if r != nil {
|
||||
switch r.Op {
|
||||
|
|
@ -927,7 +927,7 @@ func orderstmt(n *Node, order *Order) {
|
|||
orderexpr(&n.Left, order, nil)
|
||||
for l := n.List; l != nil; l = l.Next {
|
||||
if l.N.Op != OXCASE {
|
||||
Fatal("order switch case %v", Oconv(int(l.N.Op), 0))
|
||||
Fatalf("order switch case %v", Oconv(int(l.N.Op), 0))
|
||||
}
|
||||
orderexprlistinplace(l.N.List, order)
|
||||
orderblock(&l.N.Nbody)
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ func makefuncdatasym(namefmt string, funcdatakind int64) *Sym {
|
|||
|
||||
func gvardefx(n *Node, as int) {
|
||||
if n == nil {
|
||||
Fatal("gvardef nil")
|
||||
Fatalf("gvardef nil")
|
||||
}
|
||||
if n.Op != ONAME {
|
||||
Yyerror("gvardef %v; %v", Oconv(int(n.Op), obj.FmtSharp), n)
|
||||
|
|
@ -122,7 +122,7 @@ func removevardef(firstp *obj.Prog) {
|
|||
func gcsymdup(s *Sym) {
|
||||
ls := Linksym(s)
|
||||
if len(ls.R) > 0 {
|
||||
Fatal("cannot rosymdup %s with relocations", ls.Name)
|
||||
Fatalf("cannot rosymdup %s with relocations", ls.Name)
|
||||
}
|
||||
ls.Name = fmt.Sprintf("gclocals·%x", md5.Sum(ls.P))
|
||||
ls.Dupok = 1
|
||||
|
|
@ -273,7 +273,7 @@ func allocauto(ptxt *obj.Prog) {
|
|||
dowidth(n.Type)
|
||||
w = n.Type.Width
|
||||
if w >= Thearch.MAXWIDTH || w < 0 {
|
||||
Fatal("bad width")
|
||||
Fatalf("bad width")
|
||||
}
|
||||
Stksize += w
|
||||
Stksize = Rnd(Stksize, int64(n.Type.Align))
|
||||
|
|
@ -314,7 +314,7 @@ func Cgen_checknil(n *Node) {
|
|||
// Ideally we wouldn't see any integer types here, but we do.
|
||||
if n.Type == nil || (!Isptr[n.Type.Etype] && !Isint[n.Type.Etype] && n.Type.Etype != TUNSAFEPTR) {
|
||||
Dump("checknil", n)
|
||||
Fatal("bad checknil")
|
||||
Fatalf("bad checknil")
|
||||
}
|
||||
|
||||
if ((Thearch.Thechar == '5' || Thearch.Thechar == '7' || Thearch.Thechar == '9') && n.Op != OREGISTER) || !n.Addable || n.Op == OLITERAL {
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ type Liveness struct {
|
|||
func xmalloc(size uint32) interface{} {
|
||||
result := (interface{})(make([]byte, size))
|
||||
if result == nil {
|
||||
Fatal("malloc failed")
|
||||
Fatalf("malloc failed")
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
|
@ -103,7 +103,7 @@ func xmalloc(size uint32) interface{} {
|
|||
// Constructs a new basic block containing a single instruction.
|
||||
func newblock(prog *obj.Prog) *BasicBlock {
|
||||
if prog == nil {
|
||||
Fatal("newblock: prog cannot be nil")
|
||||
Fatalf("newblock: prog cannot be nil")
|
||||
}
|
||||
result := new(BasicBlock)
|
||||
result.rpo = -1
|
||||
|
|
@ -118,7 +118,7 @@ func newblock(prog *obj.Prog) *BasicBlock {
|
|||
// Frees a basic block and all of its leaf data structures.
|
||||
func freeblock(bb *BasicBlock) {
|
||||
if bb == nil {
|
||||
Fatal("freeblock: cannot free nil")
|
||||
Fatalf("freeblock: cannot free nil")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -126,10 +126,10 @@ func freeblock(bb *BasicBlock) {
|
|||
// to a successor of from.
|
||||
func addedge(from *BasicBlock, to *BasicBlock) {
|
||||
if from == nil {
|
||||
Fatal("addedge: from is nil")
|
||||
Fatalf("addedge: from is nil")
|
||||
}
|
||||
if to == nil {
|
||||
Fatal("addedge: to is nil")
|
||||
Fatalf("addedge: to is nil")
|
||||
}
|
||||
from.succ = append(from.succ, to)
|
||||
to.pred = append(to.pred, from)
|
||||
|
|
@ -290,10 +290,10 @@ func (x blockrpocmp) Less(i, j int) bool { return x[i].rpo < x[j].rpo }
|
|||
// is a call to a specific package qualified function name.
|
||||
func iscall(prog *obj.Prog, name *obj.LSym) bool {
|
||||
if prog == nil {
|
||||
Fatal("iscall: prog is nil")
|
||||
Fatalf("iscall: prog is nil")
|
||||
}
|
||||
if name == nil {
|
||||
Fatal("iscall: function name is nil")
|
||||
Fatalf("iscall: function name is nil")
|
||||
}
|
||||
if prog.As != obj.ACALL {
|
||||
return false
|
||||
|
|
@ -363,14 +363,14 @@ func addselectgosucc(selectgo *BasicBlock) {
|
|||
pred := selectgo
|
||||
for {
|
||||
if len(pred.pred) == 0 {
|
||||
Fatal("selectgo does not have a newselect")
|
||||
Fatalf("selectgo does not have a newselect")
|
||||
}
|
||||
pred = pred.pred[0]
|
||||
if blockany(pred, isselectcommcasecall) {
|
||||
// A select comm case block should have exactly one
|
||||
// successor.
|
||||
if len(pred.succ) != 1 {
|
||||
Fatal("select comm case has too many successors")
|
||||
Fatalf("select comm case has too many successors")
|
||||
}
|
||||
succ = pred.succ[0]
|
||||
|
||||
|
|
@ -379,7 +379,7 @@ func addselectgosucc(selectgo *BasicBlock) {
|
|||
// and the branch should lead to the select case
|
||||
// statements block.
|
||||
if len(succ.succ) != 2 {
|
||||
Fatal("select comm case successor has too many successors")
|
||||
Fatalf("select comm case successor has too many successors")
|
||||
}
|
||||
|
||||
// Add the block as a successor of the selectgo block.
|
||||
|
|
@ -429,7 +429,7 @@ func newcfg(firstp *obj.Prog) []*BasicBlock {
|
|||
Thearch.Proginfo(p)
|
||||
if p.To.Type == obj.TYPE_BRANCH {
|
||||
if p.To.Val == nil {
|
||||
Fatal("prog branch to nil")
|
||||
Fatalf("prog branch to nil")
|
||||
}
|
||||
if p.To.Val.(*obj.Prog).Opt == nil {
|
||||
p.To.Val.(*obj.Prog).Opt = newblock(p.To.Val.(*obj.Prog))
|
||||
|
|
@ -524,7 +524,7 @@ func newcfg(firstp *obj.Prog) []*BasicBlock {
|
|||
if bb.rpo == -1 {
|
||||
fmt.Printf("newcfg: unreachable basic block for %v\n", bb.last)
|
||||
printcfg(cfg)
|
||||
Fatal("newcfg: invalid control flow graph")
|
||||
Fatalf("newcfg: invalid control flow graph")
|
||||
}
|
||||
|
||||
return cfg
|
||||
|
|
@ -626,7 +626,7 @@ func progeffects(prog *obj.Prog, vars []*Node, uevar Bvec, varkill Bvec, avarini
|
|||
goto Next
|
||||
}
|
||||
if pos >= int32(len(vars)) || vars[pos] != from.Node {
|
||||
Fatal("bad bookkeeping in liveness %v %d", Nconv(from.Node.(*Node), 0), pos)
|
||||
Fatalf("bad bookkeeping in liveness %v %d", Nconv(from.Node.(*Node), 0), pos)
|
||||
}
|
||||
if ((from.Node).(*Node)).Addrtaken {
|
||||
bvset(avarinit, pos)
|
||||
|
|
@ -655,7 +655,7 @@ Next:
|
|||
return
|
||||
}
|
||||
if pos >= int32(len(vars)) || vars[pos] != to.Node {
|
||||
Fatal("bad bookkeeping in liveness %v %d", Nconv(to.Node.(*Node), 0), pos)
|
||||
Fatalf("bad bookkeeping in liveness %v %d", Nconv(to.Node.(*Node), 0), pos)
|
||||
}
|
||||
if ((to.Node).(*Node)).Addrtaken {
|
||||
if prog.As != obj.AVARKILL {
|
||||
|
|
@ -718,7 +718,7 @@ func newliveness(fn *Node, ptxt *obj.Prog, cfg []*BasicBlock, vars []*Node) *Liv
|
|||
// Frees the liveness structure and all of its leaf data structures.
|
||||
func freeliveness(lv *Liveness) {
|
||||
if lv == nil {
|
||||
Fatal("freeliveness: cannot free nil")
|
||||
Fatalf("freeliveness: cannot free nil")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -890,7 +890,7 @@ func checkptxt(fn *Node, firstp *obj.Prog) {
|
|||
// accounts for 40% of the 6g execution time.
|
||||
func onebitwalktype1(t *Type, xoffset *int64, bv Bvec) {
|
||||
if t.Align > 0 && *xoffset&int64(t.Align-1) != 0 {
|
||||
Fatal("onebitwalktype1: invalid initial alignment, %v", t)
|
||||
Fatalf("onebitwalktype1: invalid initial alignment, %v", t)
|
||||
}
|
||||
|
||||
switch t.Etype {
|
||||
|
|
@ -919,7 +919,7 @@ func onebitwalktype1(t *Type, xoffset *int64, bv Bvec) {
|
|||
TCHAN,
|
||||
TMAP:
|
||||
if *xoffset&int64(Widthptr-1) != 0 {
|
||||
Fatal("onebitwalktype1: invalid alignment, %v", t)
|
||||
Fatalf("onebitwalktype1: invalid alignment, %v", t)
|
||||
}
|
||||
bvset(bv, int32(*xoffset/int64(Widthptr))) // pointer
|
||||
*xoffset += t.Width
|
||||
|
|
@ -927,7 +927,7 @@ func onebitwalktype1(t *Type, xoffset *int64, bv Bvec) {
|
|||
case TSTRING:
|
||||
// struct { byte *str; intgo len; }
|
||||
if *xoffset&int64(Widthptr-1) != 0 {
|
||||
Fatal("onebitwalktype1: invalid alignment, %v", t)
|
||||
Fatalf("onebitwalktype1: invalid alignment, %v", t)
|
||||
}
|
||||
bvset(bv, int32(*xoffset/int64(Widthptr))) //pointer in first slot
|
||||
*xoffset += t.Width
|
||||
|
|
@ -937,7 +937,7 @@ func onebitwalktype1(t *Type, xoffset *int64, bv Bvec) {
|
|||
// or, when isnilinter(t)==true:
|
||||
// struct { Type *type; void *data; }
|
||||
if *xoffset&int64(Widthptr-1) != 0 {
|
||||
Fatal("onebitwalktype1: invalid alignment, %v", t)
|
||||
Fatalf("onebitwalktype1: invalid alignment, %v", t)
|
||||
}
|
||||
bvset(bv, int32(*xoffset/int64(Widthptr))) // pointer in first slot
|
||||
bvset(bv, int32(*xoffset/int64(Widthptr)+1)) // pointer in second slot
|
||||
|
|
@ -947,12 +947,12 @@ func onebitwalktype1(t *Type, xoffset *int64, bv Bvec) {
|
|||
// The value of t->bound is -1 for slices types and >=0 for
|
||||
// for fixed array types. All other values are invalid.
|
||||
if t.Bound < -1 {
|
||||
Fatal("onebitwalktype1: invalid bound, %v", t)
|
||||
Fatalf("onebitwalktype1: invalid bound, %v", t)
|
||||
}
|
||||
if Isslice(t) {
|
||||
// struct { byte *array; uintgo len; uintgo cap; }
|
||||
if *xoffset&int64(Widthptr-1) != 0 {
|
||||
Fatal("onebitwalktype1: invalid TARRAY alignment, %v", t)
|
||||
Fatalf("onebitwalktype1: invalid TARRAY alignment, %v", t)
|
||||
}
|
||||
bvset(bv, int32(*xoffset/int64(Widthptr))) // pointer in first slot (BitsPointer)
|
||||
*xoffset += t.Width
|
||||
|
|
@ -975,7 +975,7 @@ func onebitwalktype1(t *Type, xoffset *int64, bv Bvec) {
|
|||
*xoffset += t.Width - o
|
||||
|
||||
default:
|
||||
Fatal("onebitwalktype1: unexpected type, %v", t)
|
||||
Fatalf("onebitwalktype1: unexpected type, %v", t)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1346,7 +1346,7 @@ func livenessepilogue(lv *Liveness) {
|
|||
if pos < 0 {
|
||||
// the first block we encounter should have the ATEXT so
|
||||
// at no point should pos ever be less than zero.
|
||||
Fatal("livenessepilogue")
|
||||
Fatalf("livenessepilogue")
|
||||
}
|
||||
|
||||
bvcopy(livein, bb.liveout)
|
||||
|
|
|
|||
|
|
@ -306,11 +306,11 @@ func Flowstart(firstp *obj.Prog, newData func() interface{}) *Graph {
|
|||
|
||||
if p.To.Type == obj.TYPE_BRANCH {
|
||||
if p.To.Val == nil {
|
||||
Fatal("pnil %v", p)
|
||||
Fatalf("pnil %v", p)
|
||||
}
|
||||
f1 = p.To.Val.(*obj.Prog).Opt.(*Flow)
|
||||
if f1 == nil {
|
||||
Fatal("fnil %v / %v", p, p.To.Val.(*obj.Prog))
|
||||
Fatalf("fnil %v / %v", p, p.To.Val.(*obj.Prog))
|
||||
}
|
||||
if f1 == f {
|
||||
//fatal("self loop %v", p);
|
||||
|
|
@ -380,7 +380,7 @@ func rpolca(idom []int32, rpo1 int32, rpo2 int32) int32 {
|
|||
for rpo1 < rpo2 {
|
||||
t = idom[rpo2]
|
||||
if t >= rpo2 {
|
||||
Fatal("bad idom")
|
||||
Fatalf("bad idom")
|
||||
}
|
||||
rpo2 = t
|
||||
}
|
||||
|
|
@ -435,7 +435,7 @@ func flowrpo(g *Graph) {
|
|||
d := postorder(g.Start, rpo2r, 0)
|
||||
nr := int32(g.Num)
|
||||
if d > nr {
|
||||
Fatal("too many reg nodes %d %d", d, nr)
|
||||
Fatalf("too many reg nodes %d %d", d, nr)
|
||||
}
|
||||
nr = d
|
||||
var r1 *Flow
|
||||
|
|
@ -605,7 +605,7 @@ func mergetemp(firstp *obj.Prog) {
|
|||
for f := g.Start; f != nil; f = f.Link {
|
||||
p := f.Prog
|
||||
if p.From.Node != nil && ((p.From.Node).(*Node)).Opt() != nil && p.To.Node != nil && ((p.To.Node).(*Node)).Opt() != nil {
|
||||
Fatal("double node %v", p)
|
||||
Fatalf("double node %v", p)
|
||||
}
|
||||
v = nil
|
||||
n, _ = p.From.Node.(*Node)
|
||||
|
|
@ -655,7 +655,7 @@ func mergetemp(firstp *obj.Prog) {
|
|||
fmt.Printf("drop write-only %v\n", v.node.Sym)
|
||||
}
|
||||
} else {
|
||||
Fatal("temp used and not set: %v", p)
|
||||
Fatalf("temp used and not set: %v", p)
|
||||
}
|
||||
nkill++
|
||||
continue
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ func racewalknode(np **Node, init **NodeList, wr int, skip int) {
|
|||
}
|
||||
setlineno(n)
|
||||
if init == nil {
|
||||
Fatal("racewalk: bad init list")
|
||||
Fatalf("racewalk: bad init list")
|
||||
}
|
||||
if init == &n.Ninit {
|
||||
// If init == &n->ninit and n->ninit is non-nil,
|
||||
|
|
@ -136,7 +136,7 @@ func racewalknode(np **Node, init **NodeList, wr int, skip int) {
|
|||
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("racewalk: unknown node type %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("racewalk: unknown node type %v", Oconv(int(n.Op), 0))
|
||||
|
||||
case OAS, OASWB, OAS2FUNC:
|
||||
racewalknode(&n.Left, init, 1, 0)
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ func walkrange(n *Node) {
|
|||
var init *NodeList
|
||||
switch t.Etype {
|
||||
default:
|
||||
Fatal("walkrange")
|
||||
Fatalf("walkrange")
|
||||
|
||||
// Lower n into runtime·memclr if possible, for
|
||||
// fast zeroing of slices and arrays (issue 5373).
|
||||
|
|
|
|||
|
|
@ -364,13 +364,13 @@ func methods(t *Type) *Sig {
|
|||
var method *Sym
|
||||
for f := mt.Xmethod; f != nil; f = f.Down {
|
||||
if f.Etype != TFIELD {
|
||||
Fatal("methods: not field %v", f)
|
||||
Fatalf("methods: not field %v", f)
|
||||
}
|
||||
if f.Type.Etype != TFUNC || f.Type.Thistuple == 0 {
|
||||
Fatal("non-method on %v method %v %v\n", mt, f.Sym, f)
|
||||
Fatalf("non-method on %v method %v %v\n", mt, f.Sym, f)
|
||||
}
|
||||
if getthisx(f.Type).Type == nil {
|
||||
Fatal("receiver with no type on %v method %v %v\n", mt, f.Sym, f)
|
||||
Fatalf("receiver with no type on %v method %v %v\n", mt, f.Sym, f)
|
||||
}
|
||||
if f.Nointerface {
|
||||
continue
|
||||
|
|
@ -401,7 +401,7 @@ func methods(t *Type) *Sig {
|
|||
a.name = method.Name
|
||||
if !exportname(method.Name) {
|
||||
if method.Pkg == nil {
|
||||
Fatal("methods: missing package")
|
||||
Fatalf("methods: missing package")
|
||||
}
|
||||
a.pkg = method.Pkg
|
||||
}
|
||||
|
|
@ -445,7 +445,7 @@ func imethods(t *Type) *Sig {
|
|||
var last *Sig
|
||||
for f := t.Type; f != nil; f = f.Down {
|
||||
if f.Etype != TFIELD {
|
||||
Fatal("imethods: not field")
|
||||
Fatalf("imethods: not field")
|
||||
}
|
||||
if f.Type.Etype != TFUNC || f.Sym == nil {
|
||||
continue
|
||||
|
|
@ -455,7 +455,7 @@ func imethods(t *Type) *Sig {
|
|||
a.name = method.Name
|
||||
if !exportname(method.Name) {
|
||||
if method.Pkg == nil {
|
||||
Fatal("imethods: missing package")
|
||||
Fatalf("imethods: missing package")
|
||||
}
|
||||
a.pkg = method.Pkg
|
||||
}
|
||||
|
|
@ -465,7 +465,7 @@ func imethods(t *Type) *Sig {
|
|||
a.type_ = methodfunc(f.Type, nil)
|
||||
|
||||
if last != nil && sigcmp(last, a) >= 0 {
|
||||
Fatal("sigcmp vs sortinter %s %s", last.name, a.name)
|
||||
Fatalf("sigcmp vs sortinter %s %s", last.name, a.name)
|
||||
}
|
||||
if last == nil {
|
||||
all = a
|
||||
|
|
@ -707,7 +707,7 @@ func haspointers(t *Type) bool {
|
|||
ret = true
|
||||
|
||||
case TFIELD:
|
||||
Fatal("haspointers: unexpected type, %v", t)
|
||||
Fatalf("haspointers: unexpected type, %v", t)
|
||||
}
|
||||
|
||||
t.Haspointers = 1 + uint8(obj.Bool2int(ret))
|
||||
|
|
@ -758,7 +758,7 @@ func typeptrdata(t *Type) int64 {
|
|||
return lastPtrField.Width + typeptrdata(lastPtrField.Type)
|
||||
|
||||
default:
|
||||
Fatal("typeptrdata: unexpected type, %v", t)
|
||||
Fatalf("typeptrdata: unexpected type, %v", t)
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
|
@ -772,7 +772,7 @@ var dcommontype_algarray *Sym
|
|||
|
||||
func dcommontype(s *Sym, ot int, t *Type) int {
|
||||
if ot != 0 {
|
||||
Fatal("dcommontype %d", ot)
|
||||
Fatalf("dcommontype %d", ot)
|
||||
}
|
||||
|
||||
sizeofAlg := 2 * Widthptr
|
||||
|
|
@ -825,7 +825,7 @@ func dcommontype(s *Sym, ot int, t *Type) int {
|
|||
i = 1
|
||||
}
|
||||
if i&(i-1) != 0 {
|
||||
Fatal("invalid alignment %d for %v", t.Align, t)
|
||||
Fatalf("invalid alignment %d for %v", t.Align, t)
|
||||
}
|
||||
ot = duint8(s, ot, t.Align) // align
|
||||
ot = duint8(s, ot, t.Align) // fieldAlign
|
||||
|
|
@ -904,7 +904,7 @@ func typesymprefix(prefix string, t *Type) *Sym {
|
|||
|
||||
func typenamesym(t *Type) *Sym {
|
||||
if t == nil || (Isptr[t.Etype] && t.Type == nil) || isideal(t) {
|
||||
Fatal("typename %v", t)
|
||||
Fatalf("typename %v", t)
|
||||
}
|
||||
s := typesym(t)
|
||||
if s.Def == nil {
|
||||
|
|
@ -977,7 +977,7 @@ func isreflexive(t *Type) bool {
|
|||
|
||||
case TARRAY:
|
||||
if Isslice(t) {
|
||||
Fatal("slice can't be a map key: %v", t)
|
||||
Fatalf("slice can't be a map key: %v", t)
|
||||
}
|
||||
return isreflexive(t.Type)
|
||||
|
||||
|
|
@ -991,7 +991,7 @@ func isreflexive(t *Type) bool {
|
|||
return true
|
||||
|
||||
default:
|
||||
Fatal("bad type for map key: %v", t)
|
||||
Fatalf("bad type for map key: %v", t)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
@ -1005,7 +1005,7 @@ func dtypesym(t *Type) *Sym {
|
|||
}
|
||||
|
||||
if isideal(t) {
|
||||
Fatal("dtypesym %v", t)
|
||||
Fatalf("dtypesym %v", t)
|
||||
}
|
||||
|
||||
s := typesym(t)
|
||||
|
|
@ -1491,7 +1491,7 @@ func fillptrmask(t *Type, ptrmask []byte) {
|
|||
func dgcprog(t *Type) (*Sym, int64) {
|
||||
dowidth(t)
|
||||
if t.Width == BADWIDTH {
|
||||
Fatal("dgcprog: %v badwidth", t)
|
||||
Fatalf("dgcprog: %v badwidth", t)
|
||||
}
|
||||
sym := typesymprefix(".gcprog", t)
|
||||
var p GCProg
|
||||
|
|
@ -1500,7 +1500,7 @@ func dgcprog(t *Type) (*Sym, int64) {
|
|||
offset := p.w.BitIndex() * int64(Widthptr)
|
||||
p.end()
|
||||
if ptrdata := typeptrdata(t); offset < ptrdata || offset > t.Width {
|
||||
Fatal("dgcprog: %v: offset=%d but ptrdata=%d size=%d", t, offset, ptrdata, t.Width)
|
||||
Fatalf("dgcprog: %v: offset=%d but ptrdata=%d size=%d", t, offset, ptrdata, t.Width)
|
||||
}
|
||||
return sym, offset
|
||||
}
|
||||
|
|
@ -1547,7 +1547,7 @@ func (p *GCProg) emit(t *Type, offset int64) {
|
|||
}
|
||||
switch t.Etype {
|
||||
default:
|
||||
Fatal("GCProg.emit: unexpected type %v", t)
|
||||
Fatalf("GCProg.emit: unexpected type %v", t)
|
||||
|
||||
case TSTRING:
|
||||
p.w.Ptr(offset / int64(Widthptr))
|
||||
|
|
@ -1563,7 +1563,7 @@ func (p *GCProg) emit(t *Type, offset int64) {
|
|||
}
|
||||
if t.Bound == 0 {
|
||||
// should have been handled by haspointers check above
|
||||
Fatal("GCProg.emit: empty array")
|
||||
Fatalf("GCProg.emit: empty array")
|
||||
}
|
||||
|
||||
// Flatten array-of-array-of-array to just a big array by multiplying counts.
|
||||
|
|
|
|||
|
|
@ -351,7 +351,7 @@ func mkvar(f *Flow, a *obj.Addr) Bits {
|
|||
}
|
||||
node = node.Orig
|
||||
if node.Orig != node {
|
||||
Fatal("%v: bad node", Ctxt.Dconv(a))
|
||||
Fatalf("%v: bad node", Ctxt.Dconv(a))
|
||||
}
|
||||
if node.Sym == nil || node.Sym.Name[0] == '.' {
|
||||
return zbits
|
||||
|
|
@ -360,7 +360,7 @@ func mkvar(f *Flow, a *obj.Addr) Bits {
|
|||
o := a.Offset
|
||||
w := a.Width
|
||||
if w < 0 {
|
||||
Fatal("bad width %d for %v", w, Ctxt.Dconv(a))
|
||||
Fatalf("bad width %d for %v", w, Ctxt.Dconv(a))
|
||||
}
|
||||
|
||||
flag := 0
|
||||
|
|
@ -396,7 +396,7 @@ func mkvar(f *Flow, a *obj.Addr) Bits {
|
|||
|
||||
if nvar >= NVAR {
|
||||
if Debug['w'] > 1 && node != nil {
|
||||
Fatal("variable not optimized: %v", Nconv(node, obj.FmtSharp))
|
||||
Fatalf("variable not optimized: %v", Nconv(node, obj.FmtSharp))
|
||||
}
|
||||
if Debug['v'] > 0 {
|
||||
Warn("variable not optimized: %v", Nconv(node, obj.FmtSharp))
|
||||
|
|
@ -655,7 +655,7 @@ func allreg(b uint64, r *Rgn) uint64 {
|
|||
r.regno = 0
|
||||
switch v.etype {
|
||||
default:
|
||||
Fatal("unknown etype %d/%v", Bitno(b), Econv(int(v.etype), 0))
|
||||
Fatalf("unknown etype %d/%v", Bitno(b), Econv(int(v.etype), 0))
|
||||
|
||||
case TINT8,
|
||||
TUINT8,
|
||||
|
|
@ -1120,7 +1120,7 @@ func regopt(firstp *obj.Prog) {
|
|||
// Currently we never generate three register forms.
|
||||
// If we do, this will need to change.
|
||||
if p.From3Type() != obj.TYPE_NONE {
|
||||
Fatal("regopt not implemented for from3")
|
||||
Fatalf("regopt not implemented for from3")
|
||||
}
|
||||
|
||||
bit = mkvar(f, &p.To)
|
||||
|
|
@ -1472,7 +1472,7 @@ func bnum(a Bits) int {
|
|||
}
|
||||
}
|
||||
|
||||
Fatal("bad in bnum")
|
||||
Fatalf("bad in bnum")
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
@ -1499,10 +1499,10 @@ func biclr(a *Bits, n uint) {
|
|||
}
|
||||
|
||||
// Bitno reports the lowest index of a 1 bit in b.
|
||||
// It calls Fatal if there is no 1 bit.
|
||||
// It calls Fatalf if there is no 1 bit.
|
||||
func Bitno(b uint64) int {
|
||||
if b == 0 {
|
||||
Fatal("bad in bitno")
|
||||
Fatalf("bad in bitno")
|
||||
}
|
||||
n := 0
|
||||
if b&(1<<32-1) == 0 {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ func typecheckselect(sel *Node) {
|
|||
ncase = l.N
|
||||
setlineno(ncase)
|
||||
if ncase.Op != OXCASE {
|
||||
Fatal("typecheckselect %v", Oconv(int(ncase.Op), 0))
|
||||
Fatalf("typecheckselect %v", Oconv(int(ncase.Op), 0))
|
||||
}
|
||||
|
||||
if ncase.List == nil {
|
||||
|
|
@ -90,7 +90,7 @@ func typecheckselect(sel *Node) {
|
|||
|
||||
func walkselect(sel *Node) {
|
||||
if sel.List == nil && sel.Xoffset != 0 {
|
||||
Fatal("double walkselect") // already rewrote
|
||||
Fatalf("double walkselect") // already rewrote
|
||||
}
|
||||
|
||||
lno := int(setlineno(sel))
|
||||
|
|
@ -122,7 +122,7 @@ func walkselect(sel *Node) {
|
|||
var ch *Node
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("select %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("select %v", Oconv(int(n.Op), 0))
|
||||
|
||||
// ok already
|
||||
case OSEND:
|
||||
|
|
@ -218,7 +218,7 @@ func walkselect(sel *Node) {
|
|||
r.Ninit = cas.Ninit
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("select %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("select %v", Oconv(int(n.Op), 0))
|
||||
|
||||
// if selectnbsend(c, v) { body } else { default body }
|
||||
case OSEND:
|
||||
|
|
@ -284,7 +284,7 @@ func walkselect(sel *Node) {
|
|||
} else {
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("select %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("select %v", Oconv(int(n.Op), 0))
|
||||
|
||||
// selectsend(sel *byte, hchan *chan any, elem *any) (selected bool);
|
||||
case OSEND:
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ func init1(n *Node, out **NodeList) {
|
|||
l = initlist
|
||||
initlist = l.Next
|
||||
if l.N != n {
|
||||
Fatal("bad initlist")
|
||||
Fatalf("bad initlist")
|
||||
}
|
||||
|
||||
n.Initorder = InitDone
|
||||
|
|
@ -201,7 +201,7 @@ func init1(n *Node, out **NodeList) {
|
|||
|
||||
bad:
|
||||
Dump("defn", n.Name.Defn)
|
||||
Fatal("init1: bad defn")
|
||||
Fatalf("init1: bad defn")
|
||||
}
|
||||
|
||||
// recurse over n, doing init1 everywhere.
|
||||
|
|
@ -211,7 +211,7 @@ func init2(n *Node, out **NodeList) {
|
|||
}
|
||||
|
||||
if n.Op == ONAME && n.Ninit != nil {
|
||||
Fatal("name %v with ninit: %v\n", n.Sym, Nconv(n, obj.FmtSign))
|
||||
Fatalf("name %v with ninit: %v\n", n.Sym, Nconv(n, obj.FmtSign))
|
||||
}
|
||||
|
||||
init1(n, out)
|
||||
|
|
@ -271,7 +271,7 @@ func initfix(l *NodeList) *NodeList {
|
|||
*/
|
||||
func staticinit(n *Node, out **NodeList) bool {
|
||||
if n.Op != ONAME || n.Class != PEXTERN || n.Name.Defn == nil || n.Name.Defn.Op != OAS {
|
||||
Fatal("staticinit")
|
||||
Fatalf("staticinit")
|
||||
}
|
||||
|
||||
lineno = n.Lineno
|
||||
|
|
@ -607,7 +607,7 @@ func structlit(ctxt int, pass int, n *Node, var_ *Node, init **NodeList) {
|
|||
for nl := n.List; nl != nil; nl = nl.Next {
|
||||
r = nl.N
|
||||
if r.Op != OKEY {
|
||||
Fatal("structlit: rhs not OKEY: %v", r)
|
||||
Fatalf("structlit: rhs not OKEY: %v", r)
|
||||
}
|
||||
index = r.Left
|
||||
value = r.Right
|
||||
|
|
@ -654,7 +654,7 @@ func structlit(ctxt int, pass int, n *Node, var_ *Node, init **NodeList) {
|
|||
if pass == 1 {
|
||||
walkexpr(&a, init) // add any assignments in r to top
|
||||
if a.Op != OAS {
|
||||
Fatal("structlit: not as")
|
||||
Fatalf("structlit: not as")
|
||||
}
|
||||
a.Dodata = 2
|
||||
} else {
|
||||
|
|
@ -675,7 +675,7 @@ func arraylit(ctxt int, pass int, n *Node, var_ *Node, init **NodeList) {
|
|||
for l := n.List; l != nil; l = l.Next {
|
||||
r = l.N
|
||||
if r.Op != OKEY {
|
||||
Fatal("arraylit: rhs not OKEY: %v", r)
|
||||
Fatalf("arraylit: rhs not OKEY: %v", r)
|
||||
}
|
||||
index = r.Left
|
||||
value = r.Right
|
||||
|
|
@ -722,7 +722,7 @@ func arraylit(ctxt int, pass int, n *Node, var_ *Node, init **NodeList) {
|
|||
if pass == 1 {
|
||||
walkexpr(&a, init)
|
||||
if a.Op != OAS {
|
||||
Fatal("arraylit: not as")
|
||||
Fatalf("arraylit: not as")
|
||||
}
|
||||
a.Dodata = 2
|
||||
} else {
|
||||
|
|
@ -851,7 +851,7 @@ func slicelit(ctxt int, n *Node, var_ *Node, init **NodeList) {
|
|||
for l := n.List; l != nil; l = l.Next {
|
||||
r = l.N
|
||||
if r.Op != OKEY {
|
||||
Fatal("slicelit: rhs not OKEY: %v", r)
|
||||
Fatalf("slicelit: rhs not OKEY: %v", r)
|
||||
}
|
||||
index = r.Left
|
||||
value = r.Right
|
||||
|
|
@ -909,7 +909,7 @@ func maplit(ctxt int, n *Node, var_ *Node, init **NodeList) {
|
|||
r = l.N
|
||||
|
||||
if r.Op != OKEY {
|
||||
Fatal("maplit: rhs not OKEY: %v", r)
|
||||
Fatalf("maplit: rhs not OKEY: %v", r)
|
||||
}
|
||||
index = r.Left
|
||||
value = r.Right
|
||||
|
|
@ -960,7 +960,7 @@ func maplit(ctxt int, n *Node, var_ *Node, init **NodeList) {
|
|||
r = l.N
|
||||
|
||||
if r.Op != OKEY {
|
||||
Fatal("maplit: rhs not OKEY: %v", r)
|
||||
Fatalf("maplit: rhs not OKEY: %v", r)
|
||||
}
|
||||
index = r.Left
|
||||
value = r.Right
|
||||
|
|
@ -1031,7 +1031,7 @@ func maplit(ctxt int, n *Node, var_ *Node, init **NodeList) {
|
|||
r = l.N
|
||||
|
||||
if r.Op != OKEY {
|
||||
Fatal("maplit: rhs not OKEY: %v", r)
|
||||
Fatalf("maplit: rhs not OKEY: %v", r)
|
||||
}
|
||||
index = r.Left
|
||||
value = r.Right
|
||||
|
|
@ -1083,11 +1083,11 @@ func anylit(ctxt int, n *Node, var_ *Node, init **NodeList) {
|
|||
t := n.Type
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("anylit: not lit")
|
||||
Fatalf("anylit: not lit")
|
||||
|
||||
case OPTRLIT:
|
||||
if !Isptr[t.Etype] {
|
||||
Fatal("anylit: not ptr")
|
||||
Fatalf("anylit: not ptr")
|
||||
}
|
||||
|
||||
var r *Node
|
||||
|
|
@ -1113,7 +1113,7 @@ func anylit(ctxt int, n *Node, var_ *Node, init **NodeList) {
|
|||
|
||||
case OSTRUCTLIT:
|
||||
if t.Etype != TSTRUCT {
|
||||
Fatal("anylit: not struct")
|
||||
Fatalf("anylit: not struct")
|
||||
}
|
||||
|
||||
if simplename(var_) && count(n.List) > 4 {
|
||||
|
|
@ -1153,7 +1153,7 @@ func anylit(ctxt int, n *Node, var_ *Node, init **NodeList) {
|
|||
|
||||
case OARRAYLIT:
|
||||
if t.Etype != TARRAY {
|
||||
Fatal("anylit: not array")
|
||||
Fatalf("anylit: not array")
|
||||
}
|
||||
if t.Bound < 0 {
|
||||
slicelit(ctxt, n, var_, init)
|
||||
|
|
@ -1197,7 +1197,7 @@ func anylit(ctxt int, n *Node, var_ *Node, init **NodeList) {
|
|||
|
||||
case OMAPLIT:
|
||||
if t.Etype != TMAP {
|
||||
Fatal("anylit: not map")
|
||||
Fatalf("anylit: not map")
|
||||
}
|
||||
maplit(ctxt, n, var_, init)
|
||||
}
|
||||
|
|
@ -1304,14 +1304,14 @@ func initplan(n *Node) {
|
|||
initplans[n] = p
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("initplan")
|
||||
Fatalf("initplan")
|
||||
|
||||
case OARRAYLIT:
|
||||
var a *Node
|
||||
for l := n.List; l != nil; l = l.Next {
|
||||
a = l.N
|
||||
if a.Op != OKEY || !Smallintconst(a.Left) {
|
||||
Fatal("initplan arraylit")
|
||||
Fatalf("initplan arraylit")
|
||||
}
|
||||
addvalue(p, n.Type.Type.Width*Mpgetfix(a.Left.Val().U.(*Mpint)), nil, a.Right)
|
||||
}
|
||||
|
|
@ -1321,7 +1321,7 @@ func initplan(n *Node) {
|
|||
for l := n.List; l != nil; l = l.Next {
|
||||
a = l.N
|
||||
if a.Op != OKEY || a.Left.Type == nil {
|
||||
Fatal("initplan structlit")
|
||||
Fatalf("initplan structlit")
|
||||
}
|
||||
addvalue(p, a.Left.Type.Width, nil, a.Right)
|
||||
}
|
||||
|
|
@ -1331,7 +1331,7 @@ func initplan(n *Node) {
|
|||
for l := n.List; l != nil; l = l.Next {
|
||||
a = l.N
|
||||
if a.Op != OKEY {
|
||||
Fatal("initplan maplit")
|
||||
Fatalf("initplan maplit")
|
||||
}
|
||||
addvalue(p, -1, a.Left, a.Right)
|
||||
}
|
||||
|
|
@ -1377,7 +1377,7 @@ func iszero(n *Node) bool {
|
|||
switch n.Val().Ctype() {
|
||||
default:
|
||||
Dump("unexpected literal", n)
|
||||
Fatal("iszero")
|
||||
Fatalf("iszero")
|
||||
|
||||
case CTNIL:
|
||||
return true
|
||||
|
|
@ -1544,7 +1544,7 @@ func gen_as_init(n *Node) bool {
|
|||
no:
|
||||
if n.Dodata == 2 {
|
||||
Dump("\ngen_as_init", n)
|
||||
Fatal("gen_as_init couldnt make data statement")
|
||||
Fatalf("gen_as_init couldnt make data statement")
|
||||
}
|
||||
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ func Warnl(line int, fmt_ string, args ...interface{}) {
|
|||
}
|
||||
}
|
||||
|
||||
func Fatal(fmt_ string, args ...interface{}) {
|
||||
func Fatalf(fmt_ string, args ...interface{}) {
|
||||
Flusherrors()
|
||||
|
||||
fmt.Printf("%v: internal compiler error: ", Ctxt.Line(int(lineno)))
|
||||
|
|
@ -339,7 +339,7 @@ func importdot(opkg *Pkg, pack *Node) {
|
|||
s1.Block = s.Block
|
||||
if s1.Def.Name == nil {
|
||||
Dump("s1def", s1.Def)
|
||||
Fatal("missing Name")
|
||||
Fatalf("missing Name")
|
||||
}
|
||||
s1.Def.Name.Pack = pack
|
||||
s1.Origpkg = opkg
|
||||
|
|
@ -414,7 +414,7 @@ func saveorignode(n *Node) {
|
|||
// the last field, total gives the size of the enclosing struct.
|
||||
func ispaddedfield(t *Type, total int64) bool {
|
||||
if t.Etype != TFIELD {
|
||||
Fatal("ispaddedfield called non-field %v", t)
|
||||
Fatalf("ispaddedfield called non-field %v", t)
|
||||
}
|
||||
if t.Down == nil {
|
||||
return t.Width+t.Type.Width != total
|
||||
|
|
@ -530,7 +530,7 @@ func algtype1(t *Type, bad **Type) int {
|
|||
return ret
|
||||
}
|
||||
|
||||
Fatal("algtype1: unexpected type %v", t)
|
||||
Fatalf("algtype1: unexpected type %v", t)
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
@ -709,7 +709,7 @@ func Nodconst(n *Node, t *Type, v int64) {
|
|||
n.Type = t
|
||||
|
||||
if Isfloat[t.Etype] {
|
||||
Fatal("nodconst: bad type %v", t)
|
||||
Fatalf("nodconst: bad type %v", t)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -775,7 +775,7 @@ func treecopy(n *Node, lineno int32) *Node {
|
|||
}
|
||||
if m.Name != nil && n.Op != ODCLFIELD {
|
||||
Dump("treecopy", n)
|
||||
Fatal("treecopy Name")
|
||||
Fatalf("treecopy Name")
|
||||
}
|
||||
|
||||
case ONONAME:
|
||||
|
|
@ -938,7 +938,7 @@ func cplxsubtype(et int) int {
|
|||
return TFLOAT64
|
||||
}
|
||||
|
||||
Fatal("cplxsubtype: %v\n", Econv(int(et), 0))
|
||||
Fatalf("cplxsubtype: %v\n", Econv(int(et), 0))
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
@ -1010,7 +1010,7 @@ func eqtype1(t1 *Type, t2 *Type, assumed_equal *TypePairList) bool {
|
|||
t2 = t2.Type
|
||||
for ; t1 != nil && t2 != nil; t1, t2 = t1.Down, t2.Down {
|
||||
if t1.Etype != TFIELD || t2.Etype != TFIELD {
|
||||
Fatal("struct/interface missing field: %v %v", t1, t2)
|
||||
Fatalf("struct/interface missing field: %v %v", t1, t2)
|
||||
}
|
||||
if t1.Sym != t2.Sym || t1.Embedded != t2.Embedded || !eqtype1(t1.Type, t2.Type, &l) || !eqnote(t1.Note, t2.Note) {
|
||||
return false
|
||||
|
|
@ -1028,7 +1028,7 @@ func eqtype1(t1 *Type, t2 *Type, assumed_equal *TypePairList) bool {
|
|||
t2 = t2.Type
|
||||
for ; t1 != nil && t2 != nil; t1, t2 = t1.Down, t2.Down {
|
||||
if t1.Etype != TSTRUCT || t2.Etype != TSTRUCT {
|
||||
Fatal("func missing struct: %v %v", t1, t2)
|
||||
Fatalf("func missing struct: %v %v", t1, t2)
|
||||
}
|
||||
|
||||
// Loop over fields in structs, ignoring argument names.
|
||||
|
|
@ -1036,7 +1036,7 @@ func eqtype1(t1 *Type, t2 *Type, assumed_equal *TypePairList) bool {
|
|||
tb := t2.Type
|
||||
for ; ta != nil && tb != nil; ta, tb = ta.Down, tb.Down {
|
||||
if ta.Etype != TFIELD || tb.Etype != TFIELD {
|
||||
Fatal("func struct missing field: %v %v", ta, tb)
|
||||
Fatalf("func struct missing field: %v %v", ta, tb)
|
||||
}
|
||||
if ta.Isddd != tb.Isddd || !eqtype1(ta.Type, tb.Type, &l) {
|
||||
return false
|
||||
|
|
@ -1378,7 +1378,7 @@ func substArgTypes(n *Node, types ...*Type) {
|
|||
}
|
||||
substAny(&n.Type, &types)
|
||||
if len(types) > 0 {
|
||||
Fatal("substArgTypes: too many argument types")
|
||||
Fatalf("substArgTypes: too many argument types")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1392,7 +1392,7 @@ func substAny(tp **Type, types *[]*Type) {
|
|||
}
|
||||
if t.Etype == TANY && t.Copyany != 0 {
|
||||
if len(*types) == 0 {
|
||||
Fatal("substArgTypes: not enough argument types")
|
||||
Fatalf("substArgTypes: not enough argument types")
|
||||
}
|
||||
*tp = (*types)[0]
|
||||
*types = (*types)[1:]
|
||||
|
|
@ -1526,7 +1526,7 @@ func deep(t *Type) *Type {
|
|||
func syslook(name string, copy int) *Node {
|
||||
s := Pkglookup(name, Runtimepkg)
|
||||
if s == nil || s.Def == nil {
|
||||
Fatal("syslook: can't find runtime.%s", name)
|
||||
Fatalf("syslook: can't find runtime.%s", name)
|
||||
}
|
||||
|
||||
if copy == 0 {
|
||||
|
|
@ -1600,7 +1600,7 @@ func ptrto1(t *Type) *Type {
|
|||
// The returned struct must not be modified.
|
||||
func Ptrto(t *Type) *Type {
|
||||
if Tptr == 0 {
|
||||
Fatal("ptrto: no tptr")
|
||||
Fatalf("ptrto: no tptr")
|
||||
}
|
||||
// Reduce allocations by pre-creating common cases.
|
||||
if !initPtrtoDone {
|
||||
|
|
@ -1760,14 +1760,14 @@ func Structfirst(s *Iter, nn **Type) *Type {
|
|||
}
|
||||
|
||||
if t.Etype != TFIELD {
|
||||
Fatal("structfirst: not field %v", t)
|
||||
Fatalf("structfirst: not field %v", t)
|
||||
}
|
||||
|
||||
s.T = t
|
||||
return t
|
||||
|
||||
bad:
|
||||
Fatal("structfirst: not struct %v", n)
|
||||
Fatalf("structfirst: not struct %v", n)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
@ -1780,7 +1780,7 @@ func structnext(s *Iter) *Type {
|
|||
}
|
||||
|
||||
if t.Etype != TFIELD {
|
||||
Fatal("structnext: not struct %v", n)
|
||||
Fatalf("structnext: not struct %v", n)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
@ -1814,7 +1814,7 @@ func funcfirst(s *Iter, t *Type) *Type {
|
|||
return fp
|
||||
|
||||
bad:
|
||||
Fatal("funcfirst: not func %v", t)
|
||||
Fatalf("funcfirst: not func %v", t)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -1830,21 +1830,21 @@ func funcnext(s *Iter) *Type {
|
|||
|
||||
func getthis(t *Type) **Type {
|
||||
if t.Etype != TFUNC {
|
||||
Fatal("getthis: not a func %v", t)
|
||||
Fatalf("getthis: not a func %v", t)
|
||||
}
|
||||
return &t.Type
|
||||
}
|
||||
|
||||
func Getoutarg(t *Type) **Type {
|
||||
if t.Etype != TFUNC {
|
||||
Fatal("getoutarg: not a func %v", t)
|
||||
Fatalf("getoutarg: not a func %v", t)
|
||||
}
|
||||
return &t.Type.Down
|
||||
}
|
||||
|
||||
func getinarg(t *Type) **Type {
|
||||
if t.Etype != TFUNC {
|
||||
Fatal("getinarg: not a func %v", t)
|
||||
Fatalf("getinarg: not a func %v", t)
|
||||
}
|
||||
return &t.Type.Down.Down
|
||||
}
|
||||
|
|
@ -1878,7 +1878,7 @@ func Brcom(a int) int {
|
|||
case OGE:
|
||||
return OLT
|
||||
}
|
||||
Fatal("brcom: no com for %v\n", Oconv(a, 0))
|
||||
Fatalf("brcom: no com for %v\n", Oconv(a, 0))
|
||||
return a
|
||||
}
|
||||
|
||||
|
|
@ -1899,7 +1899,7 @@ func Brrev(a int) int {
|
|||
case OGE:
|
||||
return OLE
|
||||
}
|
||||
Fatal("brrev: no rev for %v\n", Oconv(a, 0))
|
||||
Fatalf("brrev: no rev for %v\n", Oconv(a, 0))
|
||||
return a
|
||||
}
|
||||
|
||||
|
|
@ -1961,7 +1961,7 @@ func safeexpr(n *Node, init **NodeList) *Node {
|
|||
|
||||
// make a copy; must not be used as an lvalue
|
||||
if islvalue(n) {
|
||||
Fatal("missing lvalue case in safeexpr: %v", n)
|
||||
Fatalf("missing lvalue case in safeexpr: %v", n)
|
||||
}
|
||||
return cheapexpr(n, init)
|
||||
}
|
||||
|
|
@ -2005,11 +2005,11 @@ func Setmaxarg(t *Type, extra int32) {
|
|||
dowidth(t)
|
||||
w := t.Argwid
|
||||
if w >= Thearch.MAXWIDTH {
|
||||
Fatal("bad argwid %v", t)
|
||||
Fatalf("bad argwid %v", t)
|
||||
}
|
||||
w += int64(extra)
|
||||
if w >= Thearch.MAXWIDTH {
|
||||
Fatal("bad argwid %d + %v", extra, t)
|
||||
Fatalf("bad argwid %d + %v", extra, t)
|
||||
}
|
||||
if w > Maxarg {
|
||||
Maxarg = w
|
||||
|
|
@ -2526,7 +2526,7 @@ func hashfor(t *Type) *Node {
|
|||
a := algtype1(t, nil)
|
||||
switch a {
|
||||
case AMEM:
|
||||
Fatal("hashfor with AMEM type")
|
||||
Fatalf("hashfor with AMEM type")
|
||||
|
||||
case AINTER:
|
||||
sym = Pkglookup("interhash", Runtimepkg)
|
||||
|
|
@ -2601,11 +2601,11 @@ func genhash(sym *Sym, t *Type) {
|
|||
// so t must be either an array or a struct.
|
||||
switch t.Etype {
|
||||
default:
|
||||
Fatal("genhash %v", t)
|
||||
Fatalf("genhash %v", t)
|
||||
|
||||
case TARRAY:
|
||||
if Isslice(t) {
|
||||
Fatal("genhash %v", t)
|
||||
Fatalf("genhash %v", t)
|
||||
}
|
||||
|
||||
// An array of pure memory would be handled by the
|
||||
|
|
@ -2852,11 +2852,11 @@ func geneq(sym *Sym, t *Type) {
|
|||
// so t must be either an array or a struct.
|
||||
switch t.Etype {
|
||||
default:
|
||||
Fatal("geneq %v", t)
|
||||
Fatalf("geneq %v", t)
|
||||
|
||||
case TARRAY:
|
||||
if Isslice(t) {
|
||||
Fatal("geneq %v", t)
|
||||
Fatalf("geneq %v", t)
|
||||
}
|
||||
|
||||
// An array of pure memory would be handled by the
|
||||
|
|
|
|||
|
|
@ -348,7 +348,7 @@ func casebody(sw *Node, typeswvar *Node) {
|
|||
n := l.N
|
||||
setlineno(n)
|
||||
if n.Op != OXCASE {
|
||||
Fatal("casebody %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("casebody %v", Oconv(int(n.Op), 0))
|
||||
}
|
||||
n.Op = OCASE
|
||||
needvar := count(n.List) != 1 || n.List.N.Op == OLITERAL
|
||||
|
|
@ -679,7 +679,7 @@ func (s *typeSwitch) walkCases(cc []*caseClause) *Node {
|
|||
for _, c := range cc {
|
||||
n := c.node
|
||||
if c.typ != caseKindTypeConst {
|
||||
Fatal("typeSwitch walkCases")
|
||||
Fatalf("typeSwitch walkCases")
|
||||
}
|
||||
a := Nod(OIF, nil, nil)
|
||||
a.Left = Nod(OEQ, s.hashname, Nodintconst(int64(c.hash)))
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ func (n *Node) SetVal(v Val) {
|
|||
if n.hasVal == -1 {
|
||||
Debug['h'] = 1
|
||||
Dump("have Opt", n)
|
||||
Fatal("have Opt")
|
||||
Fatalf("have Opt")
|
||||
}
|
||||
n.hasVal = +1
|
||||
n.E = v.U
|
||||
|
|
@ -104,7 +104,7 @@ func (n *Node) SetOpt(x interface{}) {
|
|||
if n.hasVal == +1 {
|
||||
Debug['h'] = 1
|
||||
Dump("have Val", n)
|
||||
Fatal("have Val")
|
||||
Fatalf("have Val")
|
||||
}
|
||||
n.hasVal = -1
|
||||
n.E = x
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ var typecheck_tcfree *NodeList
|
|||
func typecheck(np **Node, top int) *Node {
|
||||
// cannot type check until all the source has been parsed
|
||||
if typecheckok == 0 {
|
||||
Fatal("early typecheck")
|
||||
Fatalf("early typecheck")
|
||||
}
|
||||
|
||||
n := *np
|
||||
|
|
@ -204,7 +204,7 @@ func typecheck(np **Node, top int) *Node {
|
|||
n.Typecheck = 1
|
||||
|
||||
if typecheck_tcstack != l {
|
||||
Fatal("typecheck stack out of sync")
|
||||
Fatalf("typecheck stack out of sync")
|
||||
}
|
||||
typecheck_tcstack = l.Next
|
||||
l.Next = typecheck_tcfree
|
||||
|
|
@ -293,7 +293,7 @@ OpSwitch:
|
|||
default:
|
||||
Dump("typecheck", n)
|
||||
|
||||
Fatal("typecheck %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("typecheck %v", Oconv(int(n.Op), 0))
|
||||
|
||||
/*
|
||||
* names
|
||||
|
|
@ -820,7 +820,7 @@ OpSwitch:
|
|||
}
|
||||
|
||||
if l.Orig != l && l.Op == ONAME {
|
||||
Fatal("found non-orig name node %v", l)
|
||||
Fatalf("found non-orig name node %v", l)
|
||||
}
|
||||
l.Addrtaken = true
|
||||
if l.Name != nil && l.Name.Param != nil && l.Name.Param.Closure != nil {
|
||||
|
|
@ -1354,7 +1354,7 @@ OpSwitch:
|
|||
tp := getthisx(t).Type.Type
|
||||
|
||||
if l.Left == nil || !Eqtype(l.Left.Type, tp) {
|
||||
Fatal("method receiver")
|
||||
Fatalf("method receiver")
|
||||
}
|
||||
|
||||
default:
|
||||
|
|
@ -2008,7 +2008,7 @@ OpSwitch:
|
|||
return
|
||||
}
|
||||
if t.Etype != TINTER {
|
||||
Fatal("OITAB of %v", t)
|
||||
Fatalf("OITAB of %v", t)
|
||||
}
|
||||
n.Type = Ptrto(Types[TUINTPTR])
|
||||
break OpSwitch
|
||||
|
|
@ -2022,7 +2022,7 @@ OpSwitch:
|
|||
return
|
||||
}
|
||||
if !Isslice(t) && t.Etype != TSTRING {
|
||||
Fatal("OSPTR of %v", t)
|
||||
Fatalf("OSPTR of %v", t)
|
||||
}
|
||||
if t.Etype == TSTRING {
|
||||
n.Type = Ptrto(Types[TUINT8])
|
||||
|
|
@ -2527,7 +2527,7 @@ func lookdot(n *Node, t *Type, dostrcmp int) *Type {
|
|||
Yyerror("%v is both field and method", n.Right.Sym)
|
||||
}
|
||||
if f1.Width == BADWIDTH {
|
||||
Fatal("lookdot badwidth %v %p", f1, f1)
|
||||
Fatalf("lookdot badwidth %v %p", f1, f1)
|
||||
}
|
||||
n.Xoffset = f1.Width
|
||||
n.Type = f1.Type
|
||||
|
|
@ -2578,7 +2578,7 @@ func lookdot(n *Node, t *Type, dostrcmp int) *Type {
|
|||
tt = tt.Type
|
||||
}
|
||||
} else {
|
||||
Fatal("method mismatch: %v for %v", rcvr, tt)
|
||||
Fatalf("method mismatch: %v for %v", rcvr, tt)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2820,7 +2820,7 @@ toomany:
|
|||
*/
|
||||
func fielddup(n *Node, hash map[string]bool) {
|
||||
if n.Op != ONAME {
|
||||
Fatal("fielddup: not ONAME")
|
||||
Fatalf("fielddup: not ONAME")
|
||||
}
|
||||
name := n.Sym.Name
|
||||
if hash[name] {
|
||||
|
|
@ -2893,7 +2893,7 @@ func keydup(n *Node, hash map[uint32][]*Node) {
|
|||
|
||||
func indexdup(n *Node, hash map[int64]*Node) {
|
||||
if n.Op != OLITERAL {
|
||||
Fatal("indexdup: not OLITERAL")
|
||||
Fatalf("indexdup: not OLITERAL")
|
||||
}
|
||||
|
||||
v := Mpgetfix(n.Val().U.(*Mpint))
|
||||
|
|
@ -3497,7 +3497,7 @@ func typecheckfunc(n *Node) {
|
|||
func stringtoarraylit(np **Node) {
|
||||
n := *np
|
||||
if n.Left.Op != OLITERAL || n.Left.Val().Ctype() != CTSTR {
|
||||
Fatal("stringtoarraylit %v", n)
|
||||
Fatalf("stringtoarraylit %v", n)
|
||||
}
|
||||
|
||||
s := n.Left.Val().U.(string)
|
||||
|
|
@ -3709,7 +3709,7 @@ func typecheckdef(n *Node) *Node {
|
|||
fmt.Printf(" %v", l.N.Sym)
|
||||
}
|
||||
fmt.Printf("\n")
|
||||
Fatal("typecheckdef loop")
|
||||
Fatalf("typecheckdef loop")
|
||||
}
|
||||
|
||||
n.Walkdef = 2
|
||||
|
|
@ -3720,7 +3720,7 @@ func typecheckdef(n *Node) *Node {
|
|||
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("typecheckdef %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("typecheckdef %v", Oconv(int(n.Op), 0))
|
||||
|
||||
// not really syms
|
||||
case OGOTO, OLABEL:
|
||||
|
|
@ -3803,7 +3803,7 @@ func typecheckdef(n *Node) *Node {
|
|||
break
|
||||
}
|
||||
|
||||
Fatal("var without type, init: %v", n.Sym)
|
||||
Fatalf("var without type, init: %v", n.Sym)
|
||||
}
|
||||
|
||||
if n.Name.Defn.Op == ONAME {
|
||||
|
|
@ -3840,10 +3840,10 @@ func typecheckdef(n *Node) *Node {
|
|||
|
||||
ret:
|
||||
if n.Op != OLITERAL && n.Type != nil && isideal(n.Type) {
|
||||
Fatal("got %v for %v", n.Type, n)
|
||||
Fatalf("got %v for %v", n.Type, n)
|
||||
}
|
||||
if typecheckdefstack.N != n {
|
||||
Fatal("typecheckdefstack mismatch")
|
||||
Fatalf("typecheckdefstack mismatch")
|
||||
}
|
||||
l = typecheckdefstack
|
||||
typecheckdefstack = l.Next
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ func unsafenmagic(nn *Node) *Node {
|
|||
|
||||
default:
|
||||
Dump("unsafenmagic", r)
|
||||
Fatal("impossible %v node after dot insertion", Oconv(int(r1.Op), obj.FmtSharp))
|
||||
Fatalf("impossible %v node after dot insertion", Oconv(int(r1.Op), obj.FmtSharp))
|
||||
goto bad
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,10 +78,10 @@ func startProfile() {
|
|||
if cpuprofile != "" {
|
||||
f, err := os.Create(cpuprofile)
|
||||
if err != nil {
|
||||
Fatal("%v", err)
|
||||
Fatalf("%v", err)
|
||||
}
|
||||
if err := pprof.StartCPUProfile(f); err != nil {
|
||||
Fatal("%v", err)
|
||||
Fatalf("%v", err)
|
||||
}
|
||||
AtExit(pprof.StopCPUProfile)
|
||||
}
|
||||
|
|
@ -91,12 +91,12 @@ func startProfile() {
|
|||
}
|
||||
f, err := os.Create(memprofile)
|
||||
if err != nil {
|
||||
Fatal("%v", err)
|
||||
Fatalf("%v", err)
|
||||
}
|
||||
AtExit(func() {
|
||||
runtime.GC() // profile all outstanding allocations
|
||||
if err := pprof.WriteHeapProfile(f); err != nil {
|
||||
Fatal("%v", err)
|
||||
Fatalf("%v", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ func walkstmt(np **Node) {
|
|||
ORECOVER,
|
||||
OGETG:
|
||||
if n.Typecheck == 0 {
|
||||
Fatal("missing typecheck: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("missing typecheck: %v", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
init := n.Ninit
|
||||
n.Ninit = nil
|
||||
|
|
@ -196,7 +196,7 @@ func walkstmt(np **Node) {
|
|||
// the value received.
|
||||
case ORECV:
|
||||
if n.Typecheck == 0 {
|
||||
Fatal("missing typecheck: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("missing typecheck: %v", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
init := n.Ninit
|
||||
n.Ninit = nil
|
||||
|
|
@ -311,7 +311,7 @@ func walkstmt(np **Node) {
|
|||
f := n.List.N
|
||||
|
||||
if f.Op != OCALLFUNC && f.Op != OCALLMETH && f.Op != OCALLINTER {
|
||||
Fatal("expected return of call, have %v", f)
|
||||
Fatalf("expected return of call, have %v", f)
|
||||
}
|
||||
n.List = concat(list1(f), ascompatet(int(n.Op), rl, &f.Type, 0, &n.Ninit))
|
||||
break
|
||||
|
|
@ -346,7 +346,7 @@ func walkstmt(np **Node) {
|
|||
}
|
||||
|
||||
if n.Op == ONAME {
|
||||
Fatal("walkstmt ended up with name: %v", Nconv(n, obj.FmtSign))
|
||||
Fatalf("walkstmt ended up with name: %v", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
|
||||
*np = n
|
||||
|
|
@ -404,7 +404,7 @@ func walkexpr(np **Node, init **NodeList) {
|
|||
// not okay to use n->ninit when walking n,
|
||||
// because we might replace n with some other node
|
||||
// and would lose the init list.
|
||||
Fatal("walkexpr init == &n->ninit")
|
||||
Fatalf("walkexpr init == &n->ninit")
|
||||
}
|
||||
|
||||
if n.Ninit != nil {
|
||||
|
|
@ -427,13 +427,13 @@ func walkexpr(np **Node, init **NodeList) {
|
|||
}
|
||||
|
||||
if n.Typecheck != 1 {
|
||||
Fatal("missed typecheck: %v\n", Nconv(n, obj.FmtSign))
|
||||
Fatalf("missed typecheck: %v\n", Nconv(n, obj.FmtSign))
|
||||
}
|
||||
|
||||
switch n.Op {
|
||||
default:
|
||||
Dump("walk", n)
|
||||
Fatal("walkexpr: switch 1 unknown op %v", Nconv(n, obj.FmtShort|obj.FmtSign))
|
||||
Fatalf("walkexpr: switch 1 unknown op %v", Nconv(n, obj.FmtShort|obj.FmtSign))
|
||||
|
||||
case OTYPE,
|
||||
ONONAME,
|
||||
|
|
@ -968,7 +968,7 @@ func walkexpr(np **Node, init **NodeList) {
|
|||
|
||||
case ODOTTYPE, ODOTTYPE2:
|
||||
if !isdirectiface(n.Type) || Isfat(n.Type) {
|
||||
Fatal("walkexpr ODOTTYPE") // should see inside OAS only
|
||||
Fatalf("walkexpr ODOTTYPE") // should see inside OAS only
|
||||
}
|
||||
walkexpr(&n.Left, init)
|
||||
goto ret
|
||||
|
|
@ -1283,7 +1283,7 @@ func walkexpr(np **Node, init **NodeList) {
|
|||
goto ret
|
||||
|
||||
case ORECV:
|
||||
Fatal("walkexpr ORECV") // should see inside OAS only
|
||||
Fatalf("walkexpr ORECV") // should see inside OAS only
|
||||
|
||||
case OSLICE, OSLICEARR, OSLICESTR:
|
||||
walkexpr(&n.Left, init)
|
||||
|
|
@ -1327,7 +1327,7 @@ func walkexpr(np **Node, init **NodeList) {
|
|||
case ONEW:
|
||||
if n.Esc == EscNone {
|
||||
if n.Type.Type.Width >= 1<<16 {
|
||||
Fatal("large ONEW with EscNone: %v", n)
|
||||
Fatalf("large ONEW with EscNone: %v", n)
|
||||
}
|
||||
r := temp(n.Type.Type)
|
||||
r = Nod(OAS, r, nil) // zero temp
|
||||
|
|
@ -1397,7 +1397,7 @@ func walkexpr(np **Node, init **NodeList) {
|
|||
|
||||
typecheck(&r, Erv)
|
||||
if n.Type.Etype != TBOOL {
|
||||
Fatal("cmp %v", n.Type)
|
||||
Fatalf("cmp %v", n.Type)
|
||||
}
|
||||
r.Type = n.Type
|
||||
n = r
|
||||
|
|
@ -1409,7 +1409,7 @@ func walkexpr(np **Node, init **NodeList) {
|
|||
|
||||
case OAPPEND:
|
||||
// order should make sure we only see OAS(node, OAPPEND), which we handle above.
|
||||
Fatal("append outside assignment")
|
||||
Fatalf("append outside assignment")
|
||||
|
||||
case OCOPY:
|
||||
n = copyany(n, init, flag_race)
|
||||
|
|
@ -1468,7 +1468,7 @@ func walkexpr(np **Node, init **NodeList) {
|
|||
t := n.Type
|
||||
if n.Esc == EscNone {
|
||||
if !isSmallMakeSlice(n) {
|
||||
Fatal("non-small OMAKESLICE with EscNone: %v", n)
|
||||
Fatalf("non-small OMAKESLICE with EscNone: %v", n)
|
||||
}
|
||||
// var arr [r]T
|
||||
// n = arr[:l]
|
||||
|
|
@ -1576,7 +1576,7 @@ func walkexpr(np **Node, init **NodeList) {
|
|||
// ifaceeq(i1 any-1, i2 any-2) (ret bool);
|
||||
case OCMPIFACE:
|
||||
if !Eqtype(n.Left.Type, n.Right.Type) {
|
||||
Fatal("ifaceeq %v %v %v", Oconv(int(n.Op), 0), n.Left.Type, n.Right.Type)
|
||||
Fatalf("ifaceeq %v %v %v", Oconv(int(n.Op), 0), n.Left.Type, n.Right.Type)
|
||||
}
|
||||
var fn *Node
|
||||
if isnilinter(n.Left.Type) {
|
||||
|
|
@ -1628,7 +1628,7 @@ func walkexpr(np **Node, init **NodeList) {
|
|||
goto ret
|
||||
}
|
||||
|
||||
Fatal("missing switch %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("missing switch %v", Oconv(int(n.Op), 0))
|
||||
|
||||
// Expressions that are constant at run time but not
|
||||
// considered const by the language spec are not turned into
|
||||
|
|
@ -1791,7 +1791,7 @@ func ascompatet(op int, nl *NodeList, nr **Type, fp int, init **NodeList) *NodeL
|
|||
}
|
||||
|
||||
if ucount != 0 {
|
||||
Fatal("ascompatet: too many function calls evaluating parameters")
|
||||
Fatalf("ascompatet: too many function calls evaluating parameters")
|
||||
}
|
||||
return concat(nn, mm)
|
||||
}
|
||||
|
|
@ -1822,7 +1822,7 @@ func mkdotargslice(lr0 *NodeList, nn *NodeList, l *Type, fp int, init **NodeList
|
|||
n.Esc = esc
|
||||
typecheck(&n, Erv)
|
||||
if n.Type == nil {
|
||||
Fatal("mkdotargslice: typecheck failed")
|
||||
Fatalf("mkdotargslice: typecheck failed")
|
||||
}
|
||||
walkexpr(&n, init)
|
||||
}
|
||||
|
|
@ -2240,7 +2240,7 @@ func applywritebarrier(n *Node, init **NodeList) *Node {
|
|||
|
||||
func convas(n *Node, init **NodeList) *Node {
|
||||
if n.Op != OAS {
|
||||
Fatal("convas: not OAS %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("convas: not OAS %v", Oconv(int(n.Op), 0))
|
||||
}
|
||||
|
||||
n.Typecheck = 1
|
||||
|
|
@ -2391,7 +2391,7 @@ func reorder3(all *NodeList) *NodeList {
|
|||
|
||||
switch l.Op {
|
||||
default:
|
||||
Fatal("reorder3 unexpected lvalue %v", Oconv(int(l.Op), obj.FmtSharp))
|
||||
Fatalf("reorder3 unexpected lvalue %v", Oconv(int(l.Op), obj.FmtSharp))
|
||||
|
||||
case ONAME:
|
||||
break
|
||||
|
|
@ -2441,7 +2441,7 @@ func reorder3save(np **Node, all *NodeList, stop *NodeList, early **NodeList) {
|
|||
func outervalue(n *Node) *Node {
|
||||
for {
|
||||
if n.Op == OXDOT {
|
||||
Fatal("OXDOT in walk")
|
||||
Fatalf("OXDOT in walk")
|
||||
}
|
||||
if n.Op == ODOT || n.Op == OPAREN || n.Op == OCONVNOP {
|
||||
n = n.Left
|
||||
|
|
@ -2739,7 +2739,7 @@ func heapmoves() {
|
|||
|
||||
func vmkcall(fn *Node, t *Type, init **NodeList, va []*Node) *Node {
|
||||
if fn.Type == nil || fn.Type.Etype != TFUNC {
|
||||
Fatal("mkcall %v %v", fn, fn.Type)
|
||||
Fatalf("mkcall %v %v", fn, fn.Type)
|
||||
}
|
||||
|
||||
var args *NodeList
|
||||
|
|
@ -2780,12 +2780,12 @@ func conv(n *Node, t *Type) *Node {
|
|||
|
||||
func chanfn(name string, n int, t *Type) *Node {
|
||||
if t.Etype != TCHAN {
|
||||
Fatal("chanfn %v", t)
|
||||
Fatalf("chanfn %v", t)
|
||||
}
|
||||
fn := syslook(name, 1)
|
||||
switch n {
|
||||
default:
|
||||
Fatal("chanfn %d", n)
|
||||
Fatalf("chanfn %d", n)
|
||||
case 1:
|
||||
substArgTypes(fn, t.Type)
|
||||
case 2:
|
||||
|
|
@ -2796,7 +2796,7 @@ func chanfn(name string, n int, t *Type) *Node {
|
|||
|
||||
func mapfn(name string, t *Type) *Node {
|
||||
if t.Etype != TMAP {
|
||||
Fatal("mapfn %v", t)
|
||||
Fatalf("mapfn %v", t)
|
||||
}
|
||||
fn := syslook(name, 1)
|
||||
substArgTypes(fn, t.Down, t.Type, t.Down, t.Type)
|
||||
|
|
@ -2805,7 +2805,7 @@ func mapfn(name string, t *Type) *Node {
|
|||
|
||||
func mapfndel(name string, t *Type) *Node {
|
||||
if t.Etype != TMAP {
|
||||
Fatal("mapfn %v", t)
|
||||
Fatalf("mapfn %v", t)
|
||||
}
|
||||
fn := syslook(name, 1)
|
||||
substArgTypes(fn, t.Down, t.Type, t.Down)
|
||||
|
|
@ -3156,7 +3156,7 @@ func eqfor(t *Type, needsize *int) *Node {
|
|||
a := algtype1(t, nil)
|
||||
|
||||
if a != AMEM && a != -1 {
|
||||
Fatal("eqfor %v", t)
|
||||
Fatalf("eqfor %v", t)
|
||||
}
|
||||
|
||||
if a == AMEM {
|
||||
|
|
@ -3268,7 +3268,7 @@ func walkcompare(np **Node, init **NodeList) {
|
|||
}
|
||||
|
||||
if !islvalue(cmpl) || !islvalue(cmpr) {
|
||||
Fatal("arguments of comparison must be lvalues - %v %v", cmpl, cmpr)
|
||||
Fatalf("arguments of comparison must be lvalues - %v %v", cmpl, cmpr)
|
||||
}
|
||||
|
||||
l = temp(Ptrto(t))
|
||||
|
|
@ -3859,7 +3859,7 @@ func usefield(n *Node) {
|
|||
|
||||
switch n.Op {
|
||||
default:
|
||||
Fatal("usefield %v", Oconv(int(n.Op), 0))
|
||||
Fatalf("usefield %v", Oconv(int(n.Op), 0))
|
||||
|
||||
case ODOT, ODOTPTR:
|
||||
break
|
||||
|
|
@ -3871,7 +3871,7 @@ func usefield(n *Node) {
|
|||
}
|
||||
field := dotField[typeSym{t.Orig, n.Right.Sym}]
|
||||
if field == nil {
|
||||
Fatal("usefield %v %v without paramfld", n.Left.Type, n.Right.Sym)
|
||||
Fatalf("usefield %v %v without paramfld", n.Left.Type, n.Right.Sym)
|
||||
}
|
||||
if field.Note == nil || !strings.Contains(*field.Note, "go:\"track\"") {
|
||||
return
|
||||
|
|
|
|||
|
|
@ -1313,7 +1313,7 @@ yydefault:
|
|||
// no package statement. This allows us to test more
|
||||
// than one invalid import statement in a single file.
|
||||
if nerrors == 0 {
|
||||
Fatal("phase error in import")
|
||||
Fatalf("phase error in import")
|
||||
}
|
||||
}
|
||||
case 15:
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ func blockcopy(n, res *gc.Node, osrc, odst, w int64) {
|
|||
var op int
|
||||
switch align {
|
||||
default:
|
||||
gc.Fatal("sgen: invalid alignment %d for %v", align, n.Type)
|
||||
gc.Fatalf("sgen: invalid alignment %d for %v", align, n.Type)
|
||||
|
||||
case 1:
|
||||
op = ppc64.AMOVBU
|
||||
|
|
@ -36,7 +36,7 @@ func blockcopy(n, res *gc.Node, osrc, odst, w int64) {
|
|||
}
|
||||
|
||||
if w%int64(align) != 0 {
|
||||
gc.Fatal("sgen: unaligned size %d (align=%d) for %v", w, align, n.Type)
|
||||
gc.Fatalf("sgen: unaligned size %d (align=%d) for %v", w, align, n.Type)
|
||||
}
|
||||
c := int32(w / int64(align))
|
||||
|
||||
|
|
|
|||
|
|
@ -36,10 +36,10 @@ func defframe(ptxt *obj.Prog) {
|
|||
continue
|
||||
}
|
||||
if n.Class != gc.PAUTO {
|
||||
gc.Fatal("needzero class %d", n.Class)
|
||||
gc.Fatalf("needzero class %d", n.Class)
|
||||
}
|
||||
if n.Type.Width%int64(gc.Widthptr) != 0 || n.Xoffset%int64(gc.Widthptr) != 0 || n.Type.Width == 0 {
|
||||
gc.Fatal("var %v has size %d offset %d", gc.Nconv(n, obj.FmtLong), int(n.Type.Width), int(n.Xoffset))
|
||||
gc.Fatalf("var %v has size %d offset %d", gc.Nconv(n, obj.FmtLong), int(n.Type.Width), int(n.Xoffset))
|
||||
}
|
||||
|
||||
if lo != hi && n.Xoffset+n.Type.Width >= lo-int64(2*gc.Widthreg) {
|
||||
|
|
@ -291,7 +291,7 @@ func cgen_hmul(nl *gc.Node, nr *gc.Node, res *gc.Node) {
|
|||
}
|
||||
|
||||
default:
|
||||
gc.Fatal("cgen_hmul %v", t)
|
||||
gc.Fatalf("cgen_hmul %v", t)
|
||||
}
|
||||
|
||||
gc.Cgen(&n1, res)
|
||||
|
|
@ -411,7 +411,7 @@ func clearfat(nl *gc.Node) {
|
|||
q := uint64(w / 8) // dwords
|
||||
|
||||
if gc.Reginuse(ppc64.REGRT1) {
|
||||
gc.Fatal("%v in use during clearfat", obj.Rconv(ppc64.REGRT1))
|
||||
gc.Fatalf("%v in use during clearfat", obj.Rconv(ppc64.REGRT1))
|
||||
}
|
||||
|
||||
var r0 gc.Node
|
||||
|
|
@ -499,7 +499,7 @@ func expandchecks(firstp *obj.Prog) {
|
|||
gc.Warnl(int(p.Lineno), "generated nil check")
|
||||
}
|
||||
if p.From.Type != obj.TYPE_REG {
|
||||
gc.Fatal("invalid nil check %v\n", p)
|
||||
gc.Fatalf("invalid nil check %v\n", p)
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ func ginscon2(as int, n2 *gc.Node, c int64) {
|
|||
|
||||
switch as {
|
||||
default:
|
||||
gc.Fatal("ginscon2")
|
||||
gc.Fatalf("ginscon2")
|
||||
|
||||
case ppc64.ACMP:
|
||||
if -ppc64.BIG <= c && c <= ppc64.BIG {
|
||||
|
|
@ -261,7 +261,7 @@ func gmove(f *gc.Node, t *gc.Node) {
|
|||
|
||||
switch uint32(ft)<<16 | uint32(tt) {
|
||||
default:
|
||||
gc.Fatal("gmove %v -> %v", gc.Tconv(f.Type, obj.FmtLong), gc.Tconv(t.Type, obj.FmtLong))
|
||||
gc.Fatalf("gmove %v -> %v", gc.Tconv(f.Type, obj.FmtLong), gc.Tconv(t.Type, obj.FmtLong))
|
||||
|
||||
/*
|
||||
* integer copy and truncate
|
||||
|
|
@ -614,12 +614,12 @@ func rawgins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
case ppc64.AAND, ppc64.AMULLD:
|
||||
if p.From.Type == obj.TYPE_CONST {
|
||||
gc.Debug['h'] = 1
|
||||
gc.Fatal("bad inst: %v", p)
|
||||
gc.Fatalf("bad inst: %v", p)
|
||||
}
|
||||
case ppc64.ACMP, ppc64.ACMPU:
|
||||
if p.From.Type == obj.TYPE_MEM || p.To.Type == obj.TYPE_MEM {
|
||||
gc.Debug['h'] = 1
|
||||
gc.Fatal("bad inst: %v", p)
|
||||
gc.Fatalf("bad inst: %v", p)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -658,7 +658,7 @@ func rawgins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
if w != 0 && ((f != nil && p.From.Width < int64(w)) || (t != nil && p.To.Type != obj.TYPE_REG && p.To.Width > int64(w))) {
|
||||
gc.Dump("f", f)
|
||||
gc.Dump("t", t)
|
||||
gc.Fatal("bad width: %v (%d, %d)\n", p, p.From.Width, p.To.Width)
|
||||
gc.Fatalf("bad width: %v (%d, %d)\n", p, p.From.Width, p.To.Width)
|
||||
}
|
||||
|
||||
return p
|
||||
|
|
@ -669,13 +669,13 @@ func rawgins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
*/
|
||||
func optoas(op int, t *gc.Type) int {
|
||||
if t == nil {
|
||||
gc.Fatal("optoas: t is nil")
|
||||
gc.Fatalf("optoas: t is nil")
|
||||
}
|
||||
|
||||
a := int(obj.AXXX)
|
||||
switch uint32(op)<<16 | uint32(gc.Simtype[t.Etype]) {
|
||||
default:
|
||||
gc.Fatal("optoas: no entry for op=%v type=%v", gc.Oconv(int(op), 0), t)
|
||||
gc.Fatalf("optoas: no entry for op=%v type=%v", gc.Oconv(int(op), 0), t)
|
||||
|
||||
case gc.OEQ<<16 | gc.TBOOL,
|
||||
gc.OEQ<<16 | gc.TINT8,
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ func proginfo(p *obj.Prog) {
|
|||
info := &p.Info
|
||||
*info = progtable[p.As]
|
||||
if info.Flags == 0 {
|
||||
gc.Fatal("proginfo: unknown instruction %v", p)
|
||||
gc.Fatalf("proginfo: unknown instruction %v", p)
|
||||
}
|
||||
|
||||
if (info.Flags&gc.RegRead != 0) && p.Reg == 0 {
|
||||
|
|
@ -302,7 +302,7 @@ func as2variant(as int) int {
|
|||
return i
|
||||
}
|
||||
}
|
||||
gc.Fatal("as2variant: instruction %v is not a variant of itself", obj.Aconv(as))
|
||||
gc.Fatalf("as2variant: instruction %v is not a variant of itself", obj.Aconv(as))
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,12 +19,12 @@ func cgen64(n *gc.Node, res *gc.Node) {
|
|||
if res.Op != gc.OINDREG && res.Op != gc.ONAME {
|
||||
gc.Dump("n", n)
|
||||
gc.Dump("res", res)
|
||||
gc.Fatal("cgen64 %v of %v", gc.Oconv(int(n.Op), 0), gc.Oconv(int(res.Op), 0))
|
||||
gc.Fatalf("cgen64 %v of %v", gc.Oconv(int(n.Op), 0), gc.Oconv(int(res.Op), 0))
|
||||
}
|
||||
|
||||
switch n.Op {
|
||||
default:
|
||||
gc.Fatal("cgen64 %v", gc.Oconv(int(n.Op), 0))
|
||||
gc.Fatalf("cgen64 %v", gc.Oconv(int(n.Op), 0))
|
||||
|
||||
case gc.OMINUS:
|
||||
gc.Cgen(n.Left, res)
|
||||
|
|
@ -531,7 +531,7 @@ func cmp64(nl *gc.Node, nr *gc.Node, op int, likely int, to *obj.Prog) {
|
|||
var br *obj.Prog
|
||||
switch op {
|
||||
default:
|
||||
gc.Fatal("cmp64 %v %v", gc.Oconv(int(op), 0), t)
|
||||
gc.Fatalf("cmp64 %v %v", gc.Oconv(int(op), 0), t)
|
||||
|
||||
// cmp hi
|
||||
// jne L
|
||||
|
|
|
|||
|
|
@ -34,10 +34,10 @@ func defframe(ptxt *obj.Prog) {
|
|||
continue
|
||||
}
|
||||
if n.Class != gc.PAUTO {
|
||||
gc.Fatal("needzero class %d", n.Class)
|
||||
gc.Fatalf("needzero class %d", n.Class)
|
||||
}
|
||||
if n.Type.Width%int64(gc.Widthptr) != 0 || n.Xoffset%int64(gc.Widthptr) != 0 || n.Type.Width == 0 {
|
||||
gc.Fatal("var %v has size %d offset %d", gc.Nconv(n, obj.FmtLong), int(n.Type.Width), int(n.Xoffset))
|
||||
gc.Fatalf("var %v has size %d offset %d", gc.Nconv(n, obj.FmtLong), int(n.Type.Width), int(n.Xoffset))
|
||||
}
|
||||
if lo != hi && n.Xoffset+n.Type.Width == lo-int64(2*gc.Widthptr) {
|
||||
// merge with range we already have
|
||||
|
|
@ -350,7 +350,7 @@ func restx(x *gc.Node, oldx *gc.Node) {
|
|||
*/
|
||||
func cgen_div(op int, nl *gc.Node, nr *gc.Node, res *gc.Node) {
|
||||
if gc.Is64(nl.Type) {
|
||||
gc.Fatal("cgen_div %v", nl.Type)
|
||||
gc.Fatalf("cgen_div %v", nl.Type)
|
||||
}
|
||||
|
||||
var t *gc.Type
|
||||
|
|
@ -377,7 +377,7 @@ func cgen_div(op int, nl *gc.Node, nr *gc.Node, res *gc.Node) {
|
|||
*/
|
||||
func cgen_shift(op int, bounded bool, nl *gc.Node, nr *gc.Node, res *gc.Node) {
|
||||
if nl.Type.Width > 4 {
|
||||
gc.Fatal("cgen_shift %v", nl.Type)
|
||||
gc.Fatalf("cgen_shift %v", nl.Type)
|
||||
}
|
||||
|
||||
w := int(nl.Type.Width * 8)
|
||||
|
|
@ -677,7 +677,7 @@ func cgen_floatsse(n *gc.Node, res *gc.Node) {
|
|||
switch n.Op {
|
||||
default:
|
||||
gc.Dump("cgen_floatsse", n)
|
||||
gc.Fatal("cgen_floatsse %v", gc.Oconv(int(n.Op), 0))
|
||||
gc.Fatalf("cgen_floatsse %v", gc.Oconv(int(n.Op), 0))
|
||||
return
|
||||
|
||||
case gc.OMINUS,
|
||||
|
|
|
|||
|
|
@ -55,13 +55,13 @@ const (
|
|||
*/
|
||||
func optoas(op int, t *gc.Type) int {
|
||||
if t == nil {
|
||||
gc.Fatal("optoas: t is nil")
|
||||
gc.Fatalf("optoas: t is nil")
|
||||
}
|
||||
|
||||
a := obj.AXXX
|
||||
switch uint32(op)<<16 | uint32(gc.Simtype[t.Etype]) {
|
||||
default:
|
||||
gc.Fatal("optoas: no entry %v-%v", gc.Oconv(int(op), 0), t)
|
||||
gc.Fatalf("optoas: no entry %v-%v", gc.Oconv(int(op), 0), t)
|
||||
|
||||
case gc.OADDR<<16 | gc.TPTR32:
|
||||
a = x86.ALEAL
|
||||
|
|
@ -413,7 +413,7 @@ func foptoas(op int, t *gc.Type, flg int) int {
|
|||
if !gc.Thearch.Use387 {
|
||||
switch uint32(op)<<16 | uint32(et) {
|
||||
default:
|
||||
gc.Fatal("foptoas-sse: no entry %v-%v", gc.Oconv(int(op), 0), t)
|
||||
gc.Fatalf("foptoas-sse: no entry %v-%v", gc.Oconv(int(op), 0), t)
|
||||
|
||||
case gc.OCMP<<16 | gc.TFLOAT32:
|
||||
a = x86.AUCOMISS
|
||||
|
|
@ -546,7 +546,7 @@ func foptoas(op int, t *gc.Type, flg int) int {
|
|||
return x86.AFCHS
|
||||
}
|
||||
|
||||
gc.Fatal("foptoas %v %v %#x", gc.Oconv(int(op), 0), t, flg)
|
||||
gc.Fatalf("foptoas %v %v %#x", gc.Oconv(int(op), 0), t, flg)
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
@ -655,11 +655,11 @@ var nsclean int
|
|||
*/
|
||||
func split64(n *gc.Node, lo *gc.Node, hi *gc.Node) {
|
||||
if !gc.Is64(n.Type) {
|
||||
gc.Fatal("split64 %v", n.Type)
|
||||
gc.Fatalf("split64 %v", n.Type)
|
||||
}
|
||||
|
||||
if nsclean >= len(sclean) {
|
||||
gc.Fatal("split64 clean")
|
||||
gc.Fatalf("split64 clean")
|
||||
}
|
||||
sclean[nsclean].Op = gc.OEMPTY
|
||||
nsclean++
|
||||
|
|
@ -714,7 +714,7 @@ func split64(n *gc.Node, lo *gc.Node, hi *gc.Node) {
|
|||
|
||||
func splitclean() {
|
||||
if nsclean <= 0 {
|
||||
gc.Fatal("splitclean")
|
||||
gc.Fatalf("splitclean")
|
||||
}
|
||||
nsclean--
|
||||
if sclean[nsclean].Op != gc.OEMPTY {
|
||||
|
|
@ -805,7 +805,7 @@ func gmove(f *gc.Node, t *gc.Node) {
|
|||
switch uint32(ft)<<16 | uint32(tt) {
|
||||
default:
|
||||
// should not happen
|
||||
gc.Fatal("gmove %v -> %v", f, t)
|
||||
gc.Fatalf("gmove %v -> %v", f, t)
|
||||
return
|
||||
|
||||
/*
|
||||
|
|
@ -1372,7 +1372,7 @@ func floatmove_387(f *gc.Node, t *gc.Node) {
|
|||
gmove(f, &t1)
|
||||
switch tt {
|
||||
default:
|
||||
gc.Fatal("gmove %v", t)
|
||||
gc.Fatalf("gmove %v", t)
|
||||
|
||||
case gc.TINT8:
|
||||
gins(x86.ACMPL, &t1, ncon(-0x80&(1<<32-1)))
|
||||
|
|
@ -1483,7 +1483,7 @@ func floatmove_387(f *gc.Node, t *gc.Node) {
|
|||
}
|
||||
if gc.Ismem(t) {
|
||||
if f.Op != gc.OREGISTER || f.Reg != x86.REG_F0 {
|
||||
gc.Fatal("gmove %v", f)
|
||||
gc.Fatalf("gmove %v", f)
|
||||
}
|
||||
a = x86.AFMOVFP
|
||||
if ft == gc.TFLOAT64 {
|
||||
|
|
@ -1551,7 +1551,7 @@ hardmem:
|
|||
|
||||
// should not happen
|
||||
fatal:
|
||||
gc.Fatal("gmove %v -> %v", gc.Nconv(f, obj.FmtLong), gc.Nconv(t, obj.FmtLong))
|
||||
gc.Fatalf("gmove %v -> %v", gc.Nconv(f, obj.FmtLong), gc.Nconv(t, obj.FmtLong))
|
||||
|
||||
return
|
||||
}
|
||||
|
|
@ -1567,7 +1567,7 @@ func floatmove_sse(f *gc.Node, t *gc.Node) {
|
|||
switch uint32(ft)<<16 | uint32(tt) {
|
||||
// should not happen
|
||||
default:
|
||||
gc.Fatal("gmove %v -> %v", f, t)
|
||||
gc.Fatalf("gmove %v -> %v", f, t)
|
||||
|
||||
return
|
||||
|
||||
|
|
@ -1703,13 +1703,13 @@ func samaddr(f *gc.Node, t *gc.Node) bool {
|
|||
*/
|
||||
func gins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
||||
if as == x86.AFMOVF && f != nil && f.Op == gc.OREGISTER && t != nil && t.Op == gc.OREGISTER {
|
||||
gc.Fatal("gins MOVF reg, reg")
|
||||
gc.Fatalf("gins MOVF reg, reg")
|
||||
}
|
||||
if as == x86.ACVTSD2SS && f != nil && f.Op == gc.OLITERAL {
|
||||
gc.Fatal("gins CVTSD2SS const")
|
||||
gc.Fatalf("gins CVTSD2SS const")
|
||||
}
|
||||
if as == x86.AMOVSD && t != nil && t.Op == gc.OREGISTER && t.Reg == x86.REG_F0 {
|
||||
gc.Fatal("gins MOVSD into F0")
|
||||
gc.Fatalf("gins MOVSD into F0")
|
||||
}
|
||||
|
||||
if as == x86.AMOVL && f != nil && f.Op == gc.OADDR && f.Left.Op == gc.ONAME && f.Left.Class != gc.PEXTERN && f.Left.Class != gc.PFUNC {
|
||||
|
|
@ -1731,7 +1731,7 @@ func gins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
|
||||
case x86.ALEAL:
|
||||
if f != nil && gc.Isconst(f, gc.CTNIL) {
|
||||
gc.Fatal("gins LEAL nil %v", f.Type)
|
||||
gc.Fatalf("gins LEAL nil %v", f.Type)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1758,11 +1758,11 @@ func gins(as int, f *gc.Node, t *gc.Node) *obj.Prog {
|
|||
if true && w != 0 && f != nil && (p.From.Width > int64(w) || p.To.Width > int64(w)) {
|
||||
gc.Dump("bad width from:", f)
|
||||
gc.Dump("bad width to:", t)
|
||||
gc.Fatal("bad width: %v (%d, %d)\n", p, p.From.Width, p.To.Width)
|
||||
gc.Fatalf("bad width: %v (%d, %d)\n", p, p.From.Width, p.To.Width)
|
||||
}
|
||||
|
||||
if p.To.Type == obj.TYPE_ADDR && w > 0 {
|
||||
gc.Fatal("bad use of addr: %v", p)
|
||||
gc.Fatalf("bad use of addr: %v", p)
|
||||
}
|
||||
|
||||
return p
|
||||
|
|
|
|||
|
|
@ -660,10 +660,10 @@ func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int {
|
|||
*/
|
||||
func copyas(a *obj.Addr, v *obj.Addr) bool {
|
||||
if x86.REG_AL <= a.Reg && a.Reg <= x86.REG_BL {
|
||||
gc.Fatal("use of byte register")
|
||||
gc.Fatalf("use of byte register")
|
||||
}
|
||||
if x86.REG_AL <= v.Reg && v.Reg <= x86.REG_BL {
|
||||
gc.Fatal("use of byte register")
|
||||
gc.Fatalf("use of byte register")
|
||||
}
|
||||
|
||||
if a.Type != v.Type || a.Name != v.Name || a.Reg != v.Reg {
|
||||
|
|
|
|||
|
|
@ -260,7 +260,7 @@ func proginfo(p *obj.Prog) {
|
|||
info := &p.Info
|
||||
*info = progtable[p.As]
|
||||
if info.Flags == 0 {
|
||||
gc.Fatal("unknown instruction %v", p)
|
||||
gc.Fatalf("unknown instruction %v", p)
|
||||
}
|
||||
|
||||
if (info.Flags&gc.ShiftCX != 0) && p.From.Type != obj.TYPE_CONST {
|
||||
|
|
|
|||
Loading…
Reference in New Issue