# Test go build -pgo=auto flag. [short] skip 'compiles and links executables' # Set up fresh GOCACHE. env GOCACHE=$WORK/gocache mkdir $GOCACHE # use default.pgo for a single main package go build -n -pgo=auto -o a1.exe ./a/a1 stderr 'preprofile.*-i.*default\.pgo' stderr 'compile.*-pgoprofile=.*a1.go' # check that pgo applied to dependencies stderr 'compile.*-p test/dep.*-pgoprofile=.*' # check that pgo appears in build info # N.B. we can't start the stdout check with -pgo because the script assumes that # if the first arg starts with - it is a grep flag. stderr 'build\\t-pgo=.*default\.pgo' # check also that -pgo appears with the other flags, before non-flag settings ! stderr 'build\\t[A-Za-z].*build\\t-pgo' # use default.pgo for ... with a single main package go build -n -pgo=auto ./a/... stderr 'compile.*-pgoprofile=.*a1.go' # check that pgo appears in build info stderr 'build\\t-pgo=.*default\.pgo' # build succeeds without PGO when default.pgo file is absent go build -n -pgo=auto -o nopgo.exe ./nopgo stderr 'compile.*nopgo.go' ! stderr 'compile.*-pgoprofile' # check that pgo doesn't appear in build info ! stderr 'build\\t-pgo=' # other build-related commands go install -a -n -pgo=auto ./a/a1 stderr 'compile.*-pgoprofile=.*a1.go' go run -a -n -pgo=auto ./a/a1 stderr 'compile.*-pgoprofile=.*a1.go' go test -a -n -pgo=auto ./a/a1 stderr 'compile.*-pgoprofile=.*a1.go.*a1_test.go' stderr 'compile.*-pgoprofile=.*external_test.go' # go list commands should succeed as usual go list -pgo=auto ./a/a1 go list -test -pgo=auto ./a/a1 go list -deps -pgo=auto ./a/a1 # -pgo=auto is the default. Commands without explicit -pgo=auto # should work as -pgo=auto. go build -a -n -o a1.exe ./a/a1 stderr 'compile.*-pgoprofile=.*a1.go' stderr 'compile.*-p test/dep.*-pgoprofile=.*' # check that pgo appears in build info stderr 'build\\t-pgo=.*default\.pgo' go build -a -n -o nopgo.exe ./nopgo stderr 'compile.*nopgo.go' ! stderr 'compile.*-pgoprofile' # check that pgo doesn't appear in build info ! stderr 'build\\t-pgo=' # -pgo=off should turn off PGO. go build -a -n -pgo=off -o a1.exe ./a/a1 stderr 'compile.*a1.go' ! stderr 'compile.*-pgoprofile' # check that pgo doesn't appear in build info ! stderr 'build\\t-pgo=' -- go.mod -- module test go 1.20 -- a/a1/a1.go -- package main import _ "test/dep" func main() {} -- a/a1/a1_test.go -- package main import "testing" func TestA(*testing.T) {} -- a/a1/external_test.go -- package main_test import "testing" func TestExternal(*testing.T) {} -- a/a1/default.pgo -- -- nopgo/nopgo.go -- package main func main() {} -- dep/dep.go -- package dep