Commit f17220c2 authored by Ian Lance Taylor's avatar Ian Lance Taylor

cmd/go: fix handling of vet.cfg with buggyInstall

The vet action assumes that a.Deps[0] is the compilation action for
which vet information should be generated. However, when using
-linkshared, the action graph is built with a ModeBuggyInstall action
to install the shared library built from the compilation action.
Adjust the set up of the vet action accordingly. Also don't clean up
the working directory after completing the buggy install.

Updates #26400

Change-Id: Ia51f9f6b8cde5614a6f2e41b6207478951547770
Reviewed-on: https://go-review.googlesource.com/124275
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
parent 0c319ee4
...@@ -905,3 +905,9 @@ func TestGlobal(t *testing.T) { ...@@ -905,3 +905,9 @@ func TestGlobal(t *testing.T) {
AssertIsLinkedTo(t, "./bin/global", soname) AssertIsLinkedTo(t, "./bin/global", soname)
AssertHasRPath(t, "./bin/global", gorootInstallDir) AssertHasRPath(t, "./bin/global", gorootInstallDir)
} }
// Run a test using -linkshared of an installed shared package.
// Issue 26400.
func TestTestInstalledShared(t *testing.T) {
goCmd(nil, "test", "-linkshared", "-test.short", "sync/atomic")
}
...@@ -407,7 +407,16 @@ func (b *Builder) vetAction(mode, depMode BuildMode, p *load.Package) *Action { ...@@ -407,7 +407,16 @@ func (b *Builder) vetAction(mode, depMode BuildMode, p *load.Package) *Action {
stk.Pop() stk.Pop()
aFmt := b.CompileAction(ModeBuild, depMode, p1) aFmt := b.CompileAction(ModeBuild, depMode, p1)
deps := []*Action{a1, aFmt} var deps []*Action
if a1.buggyInstall {
// (*Builder).vet expects deps[0] to be the package
// and deps[1] to be "fmt". If we see buggyInstall
// here then a1 is an install of a shared library,
// and the real package is a1.Deps[0].
deps = []*Action{a1.Deps[0], aFmt, a1}
} else {
deps = []*Action{a1, aFmt}
}
for _, p1 := range load.PackageList(p.Internal.Imports) { for _, p1 := range load.PackageList(p.Internal.Imports) {
deps = append(deps, b.vetAction(mode, depMode, p1)) deps = append(deps, b.vetAction(mode, depMode, p1))
} }
...@@ -424,7 +433,7 @@ func (b *Builder) vetAction(mode, depMode BuildMode, p *load.Package) *Action { ...@@ -424,7 +433,7 @@ func (b *Builder) vetAction(mode, depMode BuildMode, p *load.Package) *Action {
// Built-in packages like unsafe. // Built-in packages like unsafe.
return a return a
} }
a1.needVet = true deps[0].needVet = true
a.Func = (*Builder).vet a.Func = (*Builder).vet
return a return a
}) })
......
...@@ -1368,7 +1368,9 @@ func BuildInstallFunc(b *Builder, a *Action) (err error) { ...@@ -1368,7 +1368,9 @@ func BuildInstallFunc(b *Builder, a *Action) (err error) {
// so the built target is not in the a1.Objdir tree that b.cleanup(a1) removes. // so the built target is not in the a1.Objdir tree that b.cleanup(a1) removes.
if a1.built == a.Target { if a1.built == a.Target {
a.built = a.Target a.built = a.Target
if !a.buggyInstall {
b.cleanup(a1) b.cleanup(a1)
}
// Whether we're smart enough to avoid a complete rebuild // Whether we're smart enough to avoid a complete rebuild
// depends on exactly what the staleness and rebuild algorithms // depends on exactly what the staleness and rebuild algorithms
// are, as well as potentially the state of the Go build cache. // are, as well as potentially the state of the Go build cache.
...@@ -1422,7 +1424,9 @@ func BuildInstallFunc(b *Builder, a *Action) (err error) { ...@@ -1422,7 +1424,9 @@ func BuildInstallFunc(b *Builder, a *Action) (err error) {
} }
} }
if !a.buggyInstall {
defer b.cleanup(a1) defer b.cleanup(a1)
}
return b.moveOrCopyFile(a.Target, a1.built, perm, false) return b.moveOrCopyFile(a.Target, a1.built, perm, false)
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment