]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: extrapolate $GOROOT in unified IR
authorMatthew Dempsky <mdempsky@google.com>
Wed, 8 Sep 2021 22:59:11 +0000 (15:59 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 9 Sep 2021 00:10:46 +0000 (00:10 +0000)
This ensures that diagnostics for files within $GOROOT continue to be
reported using their full filepath, rather than the abbreviated
filepath. Notably, this is necessary for test/run.go, which has tests
that expect to see the full filepath.

Updates #48247.

Change-Id: I440e2c6dd6109ca059d81cee49e476bba805d703
Reviewed-on: https://go-review.googlesource.com/c/go/+/348670
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/compile/internal/noder/reader.go

index 204d25bce8d9772a86ced323e5e229db033900e2..b3cb10dadbd40588dadd63347b41899071a90b0d 100644 (file)
@@ -10,6 +10,7 @@ import (
        "bytes"
        "fmt"
        "go/constant"
+       "internal/buildcfg"
        "strings"
 
        "cmd/compile/internal/base"
@@ -194,15 +195,32 @@ func (pr *pkgReader) posBaseIdx(idx int) *src.PosBase {
        r := pr.newReader(relocPosBase, idx, syncPosBase)
        var b *src.PosBase
 
-       filename := r.string()
+       absFilename := r.string()
+       filename := absFilename
+
+       // For build artifact stability, the export data format only
+       // contains the "absolute" filename as returned by objabi.AbsFile.
+       // However, some tests (e.g., test/run.go's asmcheck tests) expect
+       // to see the full, original filename printed out. Re-expanding
+       // "$GOROOT" to buildcfg.GOROOT is a close-enough approximation to
+       // satisfy this.
+       //
+       // TODO(mdempsky): De-duplicate this logic with similar logic in
+       // cmd/link/internal/ld's expandGoroot. However, this will probably
+       // require being more consistent about when we use native vs UNIX
+       // file paths.
+       const dollarGOROOT = "$GOROOT"
+       if strings.HasPrefix(filename, dollarGOROOT) {
+               filename = buildcfg.GOROOT + filename[len(dollarGOROOT):]
+       }
 
        if r.bool() {
-               b = src.NewFileBase(filename, filename)
+               b = src.NewFileBase(filename, absFilename)
        } else {
                pos := r.pos0()
                line := r.uint()
                col := r.uint()
-               b = src.NewLinePragmaBase(pos, filename, filename, line, col)
+               b = src.NewLinePragmaBase(pos, filename, absFilename, line, col)
        }
 
        pr.posBases[idx] = b