test/run: handle asmcheck -gcflags= commands better

The default is for later flags to override earlier ones,
so if the asmcheck set flags, it lost the important -S=2.

Change-Id: Id538254908d658da2acb55157ac4f6fa44f6a467
Reviewed-on: https://go-review.googlesource.com/c/go/+/222820
Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
Russ Cox 2020-03-10 13:45:19 -04:00
parent 801a9d9a0c
commit 96dc04412d
1 changed files with 19 additions and 1 deletions

View File

@ -667,7 +667,25 @@ func (t *test) run() {
}
// -S=2 forces outermost line numbers when disassembling inlined code.
cmdline := []string{"build", "-gcflags", "-S=2"}
cmdline = append(cmdline, flags...)
// Append flags, but don't override -gcflags=-S=2; add to it instead.
for i := 0; i < len(flags); i++ {
flag := flags[i]
switch {
case strings.HasPrefix(flag, "-gcflags="):
cmdline[2] += " " + strings.TrimPrefix(flag, "-gcflags=")
case strings.HasPrefix(flag, "--gcflags="):
cmdline[2] += " " + strings.TrimPrefix(flag, "--gcflags=")
case flag == "-gcflags", flag == "--gcflags":
i++
if i < len(flags) {
cmdline[2] += " " + flags[i]
}
default:
cmdline = append(cmdline, flag)
}
}
cmdline = append(cmdline, long)
cmd := exec.Command(goTool(), cmdline...)
cmd.Env = append(os.Environ(), env.Environ()...)