From 00055152d320f60476ca5db1e7da4fc89f94834e Mon Sep 17 00:00:00 2001 From: Jay Conrod Date: Fri, 21 Dec 2018 12:23:18 -0500 Subject: [PATCH] cmd/go: fix -n output in runtime/internal/atomic When building runtime/internal/atomic, the toolchain writes a symabis2 file. This file is read back in, filtered, and appended to the symabis file. This breaks with -n, since the symabis2 file is never written. With this change, when -n is used, an equivalent "grep" command is printed instead. The output for -x is unchanged. Fixes #29346 Change-Id: Id25e06e06364fc6689e71660d000f09c649c4f0c Reviewed-on: https://go-review.googlesource.com/c/155480 Reviewed-by: Bryan C. Mills Run-TryBot: Bryan C. Mills --- src/cmd/go/internal/work/gc.go | 6 ++++++ src/cmd/go/testdata/script/build_runtime_gcflags.txt | 4 ++++ 2 files changed, 10 insertions(+) create mode 100644 src/cmd/go/testdata/script/build_runtime_gcflags.txt diff --git a/src/cmd/go/internal/work/gc.go b/src/cmd/go/internal/work/gc.go index 0df6629f41..3d09f69fcc 100644 --- a/src/cmd/go/internal/work/gc.go +++ b/src/cmd/go/internal/work/gc.go @@ -316,6 +316,12 @@ func (gcToolchain) symabis(b *Builder, a *Action, sfiles []string) (string, erro // Filter out just the symbol refs and append them to // the symabis file. + if cfg.BuildN { + // -x will print the lines from symabis2 that are actually appended + // to symabis. With -n, we don't know what those lines will be. + b.Showcmd("", `grep '^ref' <%s | grep -v '^ref\s*""\.' >>%s`, symabis2, a.Objdir+"symabis") + continue + } abis2, err := ioutil.ReadFile(symabis2) if err != nil { return "", err diff --git a/src/cmd/go/testdata/script/build_runtime_gcflags.txt b/src/cmd/go/testdata/script/build_runtime_gcflags.txt new file mode 100644 index 0000000000..dc0767c569 --- /dev/null +++ b/src/cmd/go/testdata/script/build_runtime_gcflags.txt @@ -0,0 +1,4 @@ +# This test verifies the standard library (specifically runtime/internal/atomic) +# can be built with -gcflags when -n is given. See golang.org/issue/26092. +go build -n -gcflags=all='-l' std +stderr 'compile.* -l .* runtime/internal/atomic'