# Regression test for https://golang.org/issue/46659.
#
# If a 'replace' directive specifies an older-than-selected version of a module,
# 'go mod tidy' shouldn't try to add that version to the build list to resolve a
# missing package: it won't be selected, and would cause the module loader to
# loop indefinitely trying to resolve the package.

cp go.mod go.mod.orig

! go mod tidy
! stderr panic
stderr '^go: golang\.org/issue46659 imports\n\texample\.com/missingpkg/deprecated: package example\.com/missingpkg/deprecated provided by example\.com/missingpkg at latest version v1\.0\.0 but not at required version v1\.0\.1-beta$'

go mod tidy -e

cmp go.mod go.mod.orig

-- go.mod --
module golang.org/issue46659

go 1.17

replace example.com/missingpkg v1.0.1-alpha => example.com/missingpkg v1.0.0

require example.com/usemissingpre v1.0.0

require example.com/missingpkg v1.0.1-beta // indirect
-- m.go --
package m

import (
	_ "example.com/missingpkg/deprecated"
	_ "example.com/usemissingpre"
)