aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/pcln.go
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2020-08-21 14:18:06 -0400
committerCherry Zhang <cherryyz@google.com>2020-08-21 14:18:06 -0400
commit0ef562592fe05b50b0ae8fce495ee7e2eec791f0 (patch)
treed1c0f668e473ebdcb4a30e190008043bdb223bd9 /src/cmd/internal/obj/pcln.go
parentac5c406ef0ab20e2a11f57470271266ef4265221 (diff)
parent9679b307334bce77cc6e50751956a4c717e9458c (diff)
downloadgo-0ef562592fe05b50b0ae8fce495ee7e2eec791f0.tar.xz
[dev.link] all: merge branch 'master' into dev.link
Change-Id: Ic66b5138f3ecd9e9a48d7ab05782297c06e4a5b5
Diffstat (limited to 'src/cmd/internal/obj/pcln.go')
-rw-r--r--src/cmd/internal/obj/pcln.go15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/pcln.go b/src/cmd/internal/obj/pcln.go
index 7750637796..ce0d3714c0 100644
--- a/src/cmd/internal/obj/pcln.go
+++ b/src/cmd/internal/obj/pcln.go
@@ -286,6 +286,21 @@ func linkpcln(ctxt *Link, cursym *LSym) {
pcln.Pcfile = funcpctab(ctxt, cursym, "pctofile", pctofileline, pcln)
pcln.Pcline = funcpctab(ctxt, cursym, "pctoline", pctofileline, nil)
+ // Check that all the Progs used as inline markers are still reachable.
+ // See issue #40473.
+ inlMarkProgs := make(map[*Prog]struct{}, len(cursym.Func.InlMarks))
+ for _, inlMark := range cursym.Func.InlMarks {
+ inlMarkProgs[inlMark.p] = struct{}{}
+ }
+ for p := cursym.Func.Text; p != nil; p = p.Link {
+ if _, ok := inlMarkProgs[p]; ok {
+ delete(inlMarkProgs, p)
+ }
+ }
+ if len(inlMarkProgs) > 0 {
+ ctxt.Diag("one or more instructions used as inline markers are no longer reachable")
+ }
+
pcinlineState := new(pcinlineState)
pcln.Pcinline = funcpctab(ctxt, cursym, "pctoinline", pcinlineState.pctoinline, nil)
for _, inlMark := range cursym.Func.InlMarks {