Ctype.lower_contravariant: avoid missing cmis when expanding types #8779
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When expanding types in
Ctype.lower_contravariant
, it is currently possible to lose variance information due to a missing cmi. For example, if we havecompiling
user.ml
withoutoriginal.cmi
results in a error in 4.09 and trunk (but not in 4.08). Indeed, the typechecker ignore the reexport inMiddle
and, due to the missing cmi, infers that'a Original.t
is invariant in its first parameter.This PR proposes to avoid this issue by expanding only type abbreviations in
Ctype.lower_contravariant
.Note that this change of behaviour breaks the build of
dune
in the current 4.09 beta, so it probably needs to be backported to 4.09 .