From ebcdda4732c629508fd91a4db04cfb0de516aa2f Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 15 Jun 2017 15:05:03 -0700 Subject: [PATCH] cmd/compile: fix crash in importer when running in debug mode Verified by manually enabling debug mode and running make.bash. Fixes #20684. Change-Id: I041f2ca6ef1d4198815724d98f61511072d63581 Reviewed-on: https://go-review.googlesource.com/45971 Run-TryBot: Robert Griesemer Reviewed-by: Matthew Dempsky TryBot-Result: Gobot Gobot --- src/cmd/compile/internal/gc/bexport.go | 7 ++++++- src/cmd/compile/internal/gc/bimport.go | 5 +---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/cmd/compile/internal/gc/bexport.go b/src/cmd/compile/internal/gc/bexport.go index 868bbe73b0..3ac8136704 100644 --- a/src/cmd/compile/internal/gc/bexport.go +++ b/src/cmd/compile/internal/gc/bexport.go @@ -564,7 +564,12 @@ func (p *exporter) pos(n *Node) { func (p *exporter) path(s string) { if i, ok := p.pathIndex[s]; ok { - p.index('p', i) // i >= 0 + // Note: Using p.index(i) here requires the use of p.tag(-len(c)) below + // to get matching debug markers ('t'). But in trace mode p.tag + // assumes that the tag argument is a valid tag that can be looked + // up in the tagString list, rather then some arbitrary slice length. + // Use p.int instead. + p.int(i) // i >= 0 return } p.pathIndex[s] = len(p.pathIndex) diff --git a/src/cmd/compile/internal/gc/bimport.go b/src/cmd/compile/internal/gc/bimport.go index 30ee31af55..282f8766e2 100644 --- a/src/cmd/compile/internal/gc/bimport.go +++ b/src/cmd/compile/internal/gc/bimport.go @@ -420,12 +420,9 @@ func (p *importer) pos() src.XPos { } func (p *importer) path() string { - if p.debugFormat { - p.marker('p') - } // if the path was seen before, i is its index (>= 0) // (the empty string is at index 0) - i := p.rawInt64() + i := p.int() if i >= 0 { return p.pathList[i] } -- 2.50.0