# Regression test for https://golang.org/issue/46078:
# 'go mod tidy' should not panic if the main module initially
# requires an older version of itself.


# A module that explicitly requires an older version of itself should be
# rejected as inconsistent: we enforce that every explicit requirement is the
# selected version of its module path, but the selected version of the main
# module is always itself — not some explicit version.

! go list -m all
stderr '^go: updates to go\.mod needed; to update it:\n\tgo mod tidy$'


# The suggested 'go mod tidy' command should succeed (not crash).

go mod tidy


# We prune out redundant roots very early on in module loading, and at that
# point the indirect requirement on example.net/x v0.1.0 appears to be
# irrelevant. It should be pruned out; when the import of "example.net/x" is
# later resolved, it should resolve at the latest version (v0.2.0), not the
# version implied by the (former) misleading requirement on the older version of
# the main module.

cmp go.mod go.mod.tidy


-- go.mod --
module golang.org/issue/46078

go 1.17

replace (
	example.net/x v0.1.0 => ./x
	example.net/x v0.2.0 => ./x
	golang.org/issue/46078 v0.1.0 => ./old
)

require golang.org/issue/46078 v0.1.0
-- go.mod.tidy --
module golang.org/issue/46078

go 1.17

replace (
	example.net/x v0.1.0 => ./x
	example.net/x v0.2.0 => ./x
	golang.org/issue/46078 v0.1.0 => ./old
)

require example.net/x v0.2.0
-- issue46078/issue.go --
package issue46078

import _ "example.net/x"

-- old/go.mod --
module golang.org/issue/46078

go 1.17

require example.net/x v0.1.0

-- x/go.mod --
module example.net/x

go 1.17
-- x/x.go --
package x
