Don't delay ReError
bug during lexical region resolve
#108176
Merged
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.
Lexical region resolution returns a list of
RegionResolutionError
which don't necessarily correspond to diagnostics being emitted. The compiler may, validly, throw away these resolution errors and do something else. Therefore it's not valid to useReError
during lifetime resolution, since we may actually be on a totally fine compilation path.For example, the
implied_bounds_entailment
lint runs region resolution twice, and only emits an error if it fails both times. If we delay a bug and create aReError
during this first run, then we will ICE.Fixes #108170
Side-note: this is conceptually equivalent to how we can't necessarily delay bugs or create
ty::Error
during trait solving/fulfillment, since the compiler is allowed to throw away these fulfillment errors to do other things. It's only once we actually emit an error (report_region_errors
/report_fulfillment_errors
)