From 8eb9fdaa0123fc98cb70f58801eb74c8a6f92817 Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Sat, 24 Sep 2016 08:39:31 +1000 Subject: cmd/compile: write type symbols referenced in ptabs The exported symbol for a plugin can be the only reference to a type in a program. In particular, "var F func()" will have the type *func(), which is uncommon. Fixes #17140 Change-Id: Ide2104edbf087565f5377374057ae54e0c00c57e Reviewed-on: https://go-review.googlesource.com/29692 Run-TryBot: David Crawshaw Reviewed-by: Russ Cox --- src/cmd/compile/internal/gc/reflect.go | 2 +- src/cmd/link/internal/ld/deadcode.go | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'src/cmd') diff --git a/src/cmd/compile/internal/gc/reflect.go b/src/cmd/compile/internal/gc/reflect.go index 26643c0250..14f7ab66ee 100644 --- a/src/cmd/compile/internal/gc/reflect.go +++ b/src/cmd/compile/internal/gc/reflect.go @@ -1416,7 +1416,7 @@ func dumptypestructs() { // } nsym := dname(p.s.Name, "", nil, true) ot = dsymptrOffLSym(s, ot, nsym, 0) - ot = dsymptrOffLSym(s, ot, Linksym(typesym(p.t)), 0) + ot = dsymptrOffLSym(s, ot, Linksym(dtypesym(p.t)), 0) } ggloblLSym(s, int32(ot), int16(obj.RODATA)) diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go index ac64813228..335d9849c9 100644 --- a/src/cmd/link/internal/ld/deadcode.go +++ b/src/cmd/link/internal/ld/deadcode.go @@ -290,6 +290,11 @@ func (d *deadcodepass) flood() { } if strings.HasPrefix(s.Name, "type.") && s.Name[5] != '.' { + if len(s.P) == 0 { + // Probably a bug. The undefined symbol check + // later will give a better error than deadcode. + continue + } if decodetypeKind(s)&kindMask == kindInterface { for _, sig := range decodeIfaceMethods(d.ctxt.Arch, s) { if d.ctxt.Debugvlog > 1 { -- cgit v1.3-5-g9baa