diff options
author | Cherry Zhang <cherryyz@google.com> | 2020-06-23 12:02:54 -0400 |
---|---|---|
committer | Cherry Zhang <cherryyz@google.com> | 2020-06-23 18:38:32 +0000 |
commit | 9f33108dfa22946622a8a78b5cd3f64cd3e455dd (patch) | |
tree | 8b903ae12ee27f968bf5a68becb1150bc3dda483 /misc | |
parent | 18bcc7c2854f900dfb631d7ef01a839021e24576 (diff) | |
download | go-9f33108dfa22946622a8a78b5cd3f64cd3e455dd.tar.gz go-9f33108dfa22946622a8a78b5cd3f64cd3e455dd.zip |
cmd/link: skip zero values in fingerprint check
Normally, packages are loaded in dependency order, and if a
Library object is not nil, it is already loaded with the actual
fingerprint. In shared build mode, however, packages may be added
not in dependency order (e.g. go install -buildmode=shared std
adds all std packages before loading them), and it is possible
that a Library's fingerprint is not yet loaded. Skip the check
in this case (when the fingerprint is the zero value).
Fixes #39777.
Change-Id: I66208e92bf687c8778963ba8e33e9bd948f82f3a
Reviewed-on: https://go-review.googlesource.com/c/go/+/239517
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'misc')
-rw-r--r-- | misc/cgo/testshared/shared_test.go | 6 | ||||
-rw-r--r-- | misc/cgo/testshared/testdata/issue39777/a/a.go | 9 | ||||
-rw-r--r-- | misc/cgo/testshared/testdata/issue39777/b/b.go | 7 |
3 files changed, 22 insertions, 0 deletions
diff --git a/misc/cgo/testshared/shared_test.go b/misc/cgo/testshared/shared_test.go index acae1b2c21..fda3d2ce76 100644 --- a/misc/cgo/testshared/shared_test.go +++ b/misc/cgo/testshared/shared_test.go @@ -1028,3 +1028,9 @@ func TestGeneratedHash(t *testing.T) { goCmd(nil, "install", "-buildmode=shared", "-linkshared", "./issue30768/issue30768lib") goCmd(nil, "test", "-linkshared", "./issue30768") } + +// Test that packages can be added not in dependency order (here a depends on b, and a adds +// before b). This could happen with e.g. go build -buildmode=shared std. See issue 39777. +func TestPackageOrder(t *testing.T) { + goCmd(t, "install", "-buildmode=shared", "-linkshared", "./issue39777/a", "./issue39777/b") +} diff --git a/misc/cgo/testshared/testdata/issue39777/a/a.go b/misc/cgo/testshared/testdata/issue39777/a/a.go new file mode 100644 index 0000000000..c7bf835951 --- /dev/null +++ b/misc/cgo/testshared/testdata/issue39777/a/a.go @@ -0,0 +1,9 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package a + +import "testshared/issue39777/b" + +func F() { b.F() } diff --git a/misc/cgo/testshared/testdata/issue39777/b/b.go b/misc/cgo/testshared/testdata/issue39777/b/b.go new file mode 100644 index 0000000000..4e681965e6 --- /dev/null +++ b/misc/cgo/testshared/testdata/issue39777/b/b.go @@ -0,0 +1,7 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package b + +func F() {} |