In shared build mode, we include all symbols. This includes
function symbols that are deadcoded by the compiler. They don't
really get compiled, and their metadata may be missing, causing
linker failures. Skip them.
Fixes #67635.
Change-Id: Ic0e64bd032be499cca26da5e9e3ffbe9998bac05
Reviewed-on: https://go-review.googlesource.com/c/go/+/588316
Reviewed-by: Than McIntosh <thanm@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
defer func() {}()
return V
}
+
+func H() {
+ // Issue 67635: deadcoded closures causes linker crash.
+ func() { F() }()
+}
n := d.ldr.NDef()
for i := 1; i < n; i++ {
s := loader.Sym(i)
+ if d.ldr.SymType(s) == sym.STEXT && d.ldr.SymSize(s) == 0 {
+ // Zero-sized text symbol is a function deadcoded by the
+ // compiler. It doesn't really get compiled, and its
+ // metadata may be missing.
+ continue
+ }
d.mark(s, 0)
}
d.mark(d.ctxt.mainInittasks, 0)