This pass type-checks the MIR to ensure it is not broken.
This module contains code to equate the input/output types appearing
in the MIR with the expected input/output types from the function
signature. This requires a bit of processing, as the expected types
are supplied to us before normalization and may contain opaque
A collection of region constraints that must be satisfied for the program to be considered well-typed.
The MIR type checker. Visits the MIR and enforces all the constraints needed for it to be valid and well-typed. Along the way, it accrues region constraints -- these can later be used by NLL region checking.
Verifies that MIR types are sane to not crash further checks.
Type checks the given