func TestTestInstalledShared(t *testing.T) {
goCmd(nil, "test", "-linkshared", "-test.short", "sync/atomic")
}
+
+// Test generated pointer method with -linkshared.
+// Issue 25065.
+func TestGeneratedMethod(t *testing.T) {
+ goCmd(t, "install", "-buildmode=shared", "-linkshared", "issue25065")
+}
--- /dev/null
+// Copyright 2018 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.
+
+// Package issue25065 has a type with a method that is
+// 1) referenced in a method expression
+// 2) not called
+// 3) not converted to an interface
+// 4) is a value method but the reference is to the pointer method
+// These cases avoid the call to makefuncsym from typecheckfunc, but we
+// still need to call makefuncsym somehow or the symbol will not be defined.
+package issue25065
+
+type T int
+
+func (t T) M() {}
+
+func F() func(*T) {
+ return (*T).M
+}
n.Xoffset = 0
n.SetClass(PFUNC)
// methodSym already marked n.Sym as a function.
+
+ // Issue 25065. Make sure that we emit the symbol for a local method.
+ if Ctxt.Flag_dynlink && !inimport && (t.Sym == nil || t.Sym.Pkg == localpkg) {
+ makefuncsym(n.Sym)
+ }
+
return n
}