n.Left = orderexpr(n.Left, order, nil)
n.Left = ordersafeexpr(n.Left, order)
- tmp1 := treecopy(n.Left, src.Pos{})
+ tmp1 := treecopy(n.Left, src.NoPos)
if tmp1.Op == OINDEXMAP {
tmp1.Etype = 0 // now an rvalue not an lvalue
}
*np = n
}
- n = treecopy(n, src.Pos{})
+ n = treecopy(n, src.NoPos)
makeaddable(n)
var f *Node
if flag_msan {
fi, err := os.Create(fname)
if err != nil {
- f.Config.Warnl(src.Pos{}, "Unable to create after-phase dump file %s", fname)
+ f.Config.Warnl(src.NoPos, "Unable to create after-phase dump file %s", fname)
return
}
c.hasGReg = true
c.noDuffDevice = true
default:
- fe.Fatalf(src.Pos{}, "arch %s not implemented", arch)
+ fe.Fatalf(src.NoPos, "arch %s not implemented", arch)
}
c.ctxt = ctxt
c.optimize = optimize
if ev != "" {
v, err := strconv.ParseInt(ev, 10, 64)
if err != nil {
- fe.Fatalf(src.Pos{}, "Environment variable GO_SSA_PHI_LOC_CUTOFF (value '%s') did not parse as a number", ev)
+ fe.Fatalf(src.NoPos, "Environment variable GO_SSA_PHI_LOC_CUTOFF (value '%s') did not parse as a number", ev)
}
c.sparsePhiCutoff = uint64(v) // convert -1 to maxint, for never use sparse
}
func (c *Config) NewFunc() *Func {
// TODO(khr): should this function take name, type, etc. as arguments?
if c.curFunc != nil {
- c.Fatalf(src.Pos{}, "NewFunc called without previous Free")
+ c.Fatalf(src.NoPos, "NewFunc called without previous Free")
}
f := &Func{Config: c, NamedValues: map[LocalSlot][]*Value{}}
c.curFunc = f
var ok error
file, ok = os.Create(tmpfile)
if ok != nil {
- c.Fatalf(src.Pos{}, "Could not open hash-testing logfile %s", tmpfile)
+ c.Fatalf(src.NoPos, "Could not open hash-testing logfile %s", tmpfile)
}
}
c.logfiles[evname] = file
if sz > 0x7fffffff { // work around sparseMap's int32 value type
sz = 0x7fffffff
}
- shadowed.set(v.Args[0].ID, int32(sz), src.Pos{})
+ shadowed.set(v.Args[0].ID, int32(sz), src.NoPos)
}
}
// walk to previous store
blocks[bloc.name] = b
for _, valu := range bloc.valus {
// args are filled in the second pass.
- values[valu.name] = b.NewValue0IA(src.Pos{}, valu.op, valu.t, valu.auxint, valu.aux)
+ values[valu.name] = b.NewValue0IA(src.NoPos, valu.op, valu.t, valu.auxint, valu.aux)
}
}
// Connect the blocks together and specify control values.
Bloc("entry",
Valu("mem", OpInitMem, TypeMem, 0, nil),
Exit("mem")))
- v1 := f.f.ConstBool(src.Pos{}, TypeBool, false)
- v2 := f.f.ConstBool(src.Pos{}, TypeBool, true)
+ v1 := f.f.ConstBool(src.NoPos, TypeBool, false)
+ v2 := f.f.ConstBool(src.NoPos, TypeBool, true)
f.f.freeValue(v1)
f.f.freeValue(v2)
- v3 := f.f.ConstBool(src.Pos{}, TypeBool, false)
- v4 := f.f.ConstBool(src.Pos{}, TypeBool, true)
+ v3 := f.f.ConstBool(src.NoPos, TypeBool, false)
+ v4 := f.f.ConstBool(src.NoPos, TypeBool, true)
if v3.AuxInt != 0 {
t.Errorf("expected %s to have auxint of 0\n", v3.LongString())
}
func NewHTMLWriter(path string, logger Logger, funcname string) *HTMLWriter {
out, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
- logger.Fatalf(src.Pos{}, "%v", err)
+ logger.Fatalf(src.NoPos, "%v", err)
}
html := HTMLWriter{File: out, Logger: logger}
html.start(funcname)
func (w *HTMLWriter) Printf(msg string, v ...interface{}) {
if _, err := fmt.Fprintf(w.File, msg, v...); err != nil {
- w.Fatalf(src.Pos{}, "%v", err)
+ w.Fatalf(src.NoPos, "%v", err)
}
}
func (w *HTMLWriter) WriteString(s string) {
if _, err := w.File.WriteString(s); err != nil {
- w.Fatalf(src.Pos{}, "%v", err)
+ w.Fatalf(src.NoPos, "%v", err)
}
}
case "s390x":
// nothing to do, R10 & R11 already reserved
default:
- s.f.Config.fe.Fatalf(src.Pos{}, "arch %s not implemented", s.f.Config.arch)
+ s.f.Config.fe.Fatalf(src.NoPos, "arch %s not implemented", s.f.Config.arch)
}
}
if s.f.Config.nacl {
// Live registers can be sources.
for _, x := range srcReg {
- e.set(&e.s.registers[x.r], x.v.ID, x.c, false, src.Pos{}) // don't care the position of the source
+ e.set(&e.s.registers[x.r], x.v.ID, x.c, false, src.NoPos) // don't care the position of the source
}
// So can all of the spill locations.
for _, spillID := range stacklive {
v := e.s.orig[spillID]
spill := e.s.values[v.ID].spill
- e.set(e.s.f.getHome(spillID), v.ID, spill, false, src.Pos{}) // don't care the position of the source
+ e.set(e.s.f.getHome(spillID), v.ID, spill, false, src.NoPos) // don't care the position of the source
}
// Figure out all the destinations we need.
s.dense[i].val |= 1 << v
return
}
- s.dense = append(s.dense, sparseEntry{k, 1 << v, src.Pos{}})
+ s.dense = append(s.dense, sparseEntry{k, 1 << v, src.NoPos})
s.sparse[k] = int32(len(s.dense)) - 1
}
return new(stackAllocState)
}
if s.f != nil {
- f.Config.Fatalf(src.Pos{}, "newStackAllocState called without previous free")
+ f.Config.Fatalf(src.NoPos, "newStackAllocState called without previous free")
}
return s
}
line int32
}
+// NoPos is a valid unknown position.
+var NoPos Pos
+
// MakePos creates a new Pos from a line index.
// It requires intimate knowledge of the underlying
// implementation and should be used with caution.