}
func walksymtypedef(s *LSym) *LSym {
- if t := Linkrlookup(Ctxt, s.Name+".def", int(s.Version)); t != nil {
+ if t := Linkrlookup(Ctxt, s.Name+"..def", int(s.Version)); t != nil {
return t
}
return s
Diag("dwarf: bad def in dotypedef")
}
- def.sym = Linklookup(Ctxt, def.sym.Name+".def", 0)
+ def.sym = Linklookup(Ctxt, def.sym.Name+"..def", 0)
def.sym.Attr |= AttrHidden
def.sym.Type = obj.SDWARFINFO
}
func nameFromDIESym(dwtype *LSym) string {
- return strings.TrimSuffix(dwtype.Name[len(infoprefix):], ".def")
+ return strings.TrimSuffix(dwtype.Name[len(infoprefix):], "..def")
}
// Find or construct *T given T.
--- /dev/null
+// build
+
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 15926: linker was adding .def to the end of symbols, causing
+// a name collision with a method actually named def.
+
+package main
+
+type S struct{}
+
+func (s S) def() {}
+
+var I = S.def
+
+func main() {
+ I(S{})
+}