diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go index c42b9a126e2..05734c5e987 100644 --- a/src/cmd/go/internal/work/exec.go +++ b/src/cmd/go/internal/work/exec.go @@ -532,6 +532,10 @@ func (b *Builder) build(ctx context.Context, a *Action) (err error) { return errors.New("binary-only packages are no longer supported") } + if p.Module != nil && !allowedVersion(p.Module.GoVersion) { + return errors.New("module requires Go " + p.Module.GoVersion + " or later") + } + if err := b.checkDirectives(a); err != nil { return err } @@ -853,10 +857,6 @@ OverlayLoop: ofile, out, err := BuildToolchain.gc(b, a, objpkg, icfg.Bytes(), embedcfg, symabis, len(sfiles) > 0, gofiles) if len(out) > 0 { output := b.processOutput(out) - if p.Module != nil && !allowedVersion(p.Module.GoVersion) { - output += "note: module requires Go " + p.Module.GoVersion + "\n" - } - if err != nil { return formatOutput(b.WorkDir, p.Dir, p.ImportPath, p.Desc(), output) } else { @@ -864,9 +864,6 @@ OverlayLoop: } } if err != nil { - if p.Module != nil && !allowedVersion(p.Module.GoVersion) { - b.showOutput(a, p.Dir, p.Desc(), "note: module requires Go "+p.Module.GoVersion+"\n") - } return err } if ofile != objpkg { diff --git a/src/cmd/go/testdata/script/mod_go_version.txt b/src/cmd/go/testdata/script/mod_go_version.txt index 97d9975e680..005c43ca6e2 100644 --- a/src/cmd/go/testdata/script/mod_go_version.txt +++ b/src/cmd/go/testdata/script/mod_go_version.txt @@ -3,40 +3,17 @@ env GO111MODULE=on go list -go build -go build sub.1 -go build subver.1 -! stderr 'module requires' -! go build badsub.1 -stderr '^note: module requires Go 1.11111$' - -go build versioned.1 -go mod edit -require versioned.1@v1.1.0 -! go build versioned.1 -stderr '^note: module requires Go 1.99999$' - -[short] stop - -# The message should be printed even if the compiler emits no output. -go build -o $WORK/nooutput.exe nooutput.go -! go build -toolexec=$WORK/nooutput.exe versioned.1 -stderr '^# versioned.1\nnote: module requires Go 1.99999$' +! go build sub +stderr '^sub: module requires Go 1.999 or later$' -- go.mod -- module m -go 1.999 +go 1.1 require ( - sub.1 v1.0.0 - subver.1 v1.0.0 - badsub.1 v1.0.0 - versioned.1 v1.0.0 + sub v1.0.0 ) replace ( - sub.1 => ./sub - subver.1 => ./subver - badsub.1 => ./badsub - versioned.1 v1.0.0 => ./versioned1 - versioned.1 v1.1.0 => ./versioned2 + sub => ./sub ) -- x.go -- @@ -44,67 +21,7 @@ package x -- sub/go.mod -- module m -go 1.11 +go 1.999 -- sub/x.go -- package x - --- subver/go.mod -- -module m -go 1.11111 - --- subver/x.go -- -package x - --- badsub/go.mod -- -module m -go 1.11111 - --- badsub/x.go -- -package x -invalid syntax - --- versioned1/go.mod -- -module versioned -go 1.0 - --- versioned1/x.go -- -package x - --- versioned2/go.mod -- -module versioned -go 1.99999 - --- versioned2/x.go -- -package x -invalid syntax - --- nooutput.go -- -// +build ignore - -package main - -import ( - "bytes" - "os" - "os/exec" - "strings" -) - -func main() { - stderr := new(bytes.Buffer) - stdout := new(bytes.Buffer) - - cmd := exec.Command(os.Args[1], os.Args[2:]...) - cmd.Stderr = stderr - cmd.Stdout = stdout - - err := cmd.Run() - if strings.HasPrefix(os.Args[2], "-V") { - os.Stderr.Write(stderr.Bytes()) - os.Stdout.Write(stdout.Bytes()) - } - if err != nil { - os.Exit(1) - } -}