| # Regression test for https://go.dev/issue/48319: |
| # cgo builds should not include debug information from a stale GOROOT_FINAL. |
| |
| [short] skip |
| [!cgo] skip |
| [windows] skip # The Go Windows builders have an extremely out-of-date gcc that does not support reproducible builds; see https://go.dev/issue/50824. |
| |
| # This test is sensitive to cache invalidation, |
| # so use a separate build cache that we can control. |
| env GOCACHE=$WORK/gocache |
| mkdir $GOCACHE |
| |
| # Build a binary using a specific value of GOROOT_FINAL. |
| env GOROOT_FINAL=$WORK${/}goroot1 |
| go build -o main.exe |
| mv main.exe main1.exe |
| |
| # Now clean the cache and build using a different GOROOT_FINAL. |
| # The resulting binaries should differ in their debug metadata. |
| go clean -cache |
| env GOROOT_FINAL=$WORK${/}goroot2 |
| go build -o main.exe |
| mv main.exe main2.exe |
| ! cmp main2.exe main1.exe |
| |
| # Set GOROOT_FINAL back to the first value. |
| # If the build is properly reproducible, the two binaries should match. |
| env GOROOT_FINAL=$WORK${/}goroot1 |
| go build -o main.exe |
| cmp -q main.exe main1.exe |
| |
| -- go.mod -- |
| module main |
| |
| go 1.18 |
| -- main.go -- |
| package main |
| |
| import "C" |
| |
| import "runtime" |
| |
| var _ C.int |
| |
| func main() { |
| println(runtime.GOROOT()) |
| } |