about summary refs log tree commit diff
path: root/compiler/rustc_interface/src/interface.rs
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2024-02-17 18:47:42 +0100
committerGitHub <noreply@github.com>2024-02-17 18:47:42 +0100
commitdf3712ce21311bb40b8e446f89c126509821ca4d (patch)
tree41edc7480e672fdc5ca4e8d4cd0d2a54ec6efca6 /compiler/rustc_interface/src/interface.rs
parentcb371797d65cc8caf7d62b670ef8452a49ba922a (diff)
parent228441dbd6e9fc823da545ed29499f6f8e5d7101 (diff)
downloadrust-df3712ce21311bb40b8e446f89c126509821ca4d.tar.gz
rust-df3712ce21311bb40b8e446f89c126509821ca4d.zip
Rollup merge of #121193 - compiler-errors:coherence-fulfillment, r=lcnr
Use fulfillment in next trait solver coherence

Use fulfillment in the new trait solver's `impl_intersection_has_impossible_obligation` routine. This means that inference that falls out of processing other obligations can influence whether we can determine if an obligation is impossible to satisfy. See the committed test.

This should be completely sound, since evaluation and fulfillment both respect intercrate mode equally.

We run the risk of breaking coherence later if we were to change the rules of fulfillment and/or inference during coherence, but this is a problem which affects evaluation, as nested obligations from a trait goal are processed together and can influence each other in the same way.

r? lcnr
cc #114862

Also changed obligationctxt -> fulfillmentctxt because it feels kind of redundant to use an ocx here. I don't really care enough and can change it back if it really matters much.
Diffstat (limited to 'compiler/rustc_interface/src/interface.rs')
0 files changed, 0 insertions, 0 deletions