summary refs log tree commit diff
path: root/compiler/rustc_trait_selection/src/solve
AgeCommit message (Collapse)AuthorLines
2024-12-20remove non-borrowck member constraintslcnr-2/+0
2024-12-02Assert that obligations are empty before deeply normalizingMichael Goulet-0/+4
2024-11-28support revealing defined opaque post borrowcklcnr-1/+3
2024-11-26do not constrain infer vars in `find_best_leaf_obligation`lcnr-4/+13
2024-11-23Auto merge of #133242 - lcnr:questionable-uwu, r=compiler-errors,BoxyUwUbors-1/+1
finish `Reveal` removal After #133212 changed the `TypingMode` to be the only source of truth, this entirely rips out `Reveal`. cc #132279 r? `@compiler-errors`
2024-11-23no more Reveal :(lcnr-1/+1
2024-11-23Remove unnecessary bool from ExpectedFoundMichael Goulet-2/+2
2024-11-12Consolidate type system const evaluation under `traits::evaluate_const`Boxy-12/+11
mew
2024-10-29TypingMode :thinking:lcnr-15/+9
2024-10-22remove unused fieldlcnr-1/+1
2024-10-17Rollup merge of #131825 - lcnr:probe-no-more-leak-2, r=compiler-errorsMatthias Krüger-0/+1
SolverDelegate add assoc type for Infcx makes writing trait bounds on it a lot nicer going forward. r? `@compiler-errors`
2024-10-17SolverDelegate add assoc type for Infcxlcnr-0/+1
2024-10-17move `defining_opaque_types` out of `Canonical`lcnr-2/+2
2024-10-16Rollup merge of #131699 - compiler-errors:better-errors-for-projections, r=lcnrMatthias Krüger-12/+22
Try to improve error messages involving aliases in the solver 1. Treat aliases as rigid only if it may not be defined and it's well formed (i.e. for projections, its trait goal is satisfied). 2. Record goals that are related to alias normalization under a new `GoalKind`, so we can look into them in the `BestObligation` visitor. 3. Try to deduplicate errors due to self types of goals that are un-normalizable aliases. r? lcnr
2024-10-15Be better at reporting alias errorsMichael Goulet-5/+21
2024-10-15Always recurse on predicates in BestObligationMichael Goulet-7/+1
2024-10-12Swap PredicateObligation to ThinVecGnomedDev-1/+3
2024-10-12Swap Vec<PredicateObligation> to type aliasGnomedDev-10/+7
2024-10-11remove outdated FIXMEslcnr-0/+2
2024-10-10impossible obligations check fast pathlcnr-7/+8
2024-09-25Compiler: Rename "object safe" to "dyn compatible"León Orell Valerian Liehr-1/+1
2024-09-22Reformat using the new identifier sorting from rustfmtMichael Goulet-30/+29
2024-09-12more eagerly discard constraints on overflowlcnr-1/+1
2024-08-30Remove `#[macro_use] extern crate tracing` from `rustc_trait_selection`.Nicholas Nethercote-0/+4
2024-08-14Rollup merge of #128828 - lcnr:search-graph-11, r=compiler-errors许杰友 Jieyou Xu (Joe)-7/+3
`-Znext-solver` caching This PR has two major changes while also fixing multiple issues found via fuzzing. The main optimization is the ability to not discard provisional cache entries when popping the highest cycle head the entry depends on. This fixes the hang in Fuchsia with `-Znext-solver=coherence`. It also bails if the result of a fixpoint iteration is ambiguous, even without reaching a fixpoint. This is necessary to avoid exponential blowup if a coinductive cycle results in ambiguity, e.g. due to unknowable candidates in coherence. Updating stack entries pretty much exclusively happens lazily now, so `fn check_invariants` ended up being mostly useless and I've removed it. See https://gist.github.com/lcnr/8de338fdb2685581e17727bbfab0622a for the invariants we would be able to assert with it. For a general overview, see the in-process update of the relevant rustc-dev-guide chapter: https://hackmd.io/1ALkSjKlSCyQG-dVb_PUHw r? ```@compiler-errors```
2024-08-12Rollup merge of #128912 - compiler-errors:do-not-recommend-impl, r=lcnrMatthias Krüger-5/+1
Store `do_not_recommend`-ness in impl header Alternative to #128674 It's less flexible, but also less invasive. Hopefully it's also performant. I'd recommend we think separately about the design for how to gate arbitrary diagnostic attributes moving forward.
2024-08-12do not use the global solver cache for proof treeslcnr-7/+3
doing so requires overwriting global cache entries and generally adds significant complexity to the solver. This is also only ever done for root goals, so it feels easier to wrap the `evaluate_canonical_goal` in an ordinary query if necessary.
2024-08-11Use assert_matches around the compilerMichael Goulet-3/+6
2024-08-09Store do_not_recommend-ness in impl headerMichael Goulet-5/+1
2024-07-29Reformat `use` declarations.Nicholas Nethercote-9/+9
The previous commit updated `rustfmt.toml` appropriately. This commit is the outcome of running `x fmt --all` with the new formatting options.
2024-07-21Move all error reporting into rustc_trait_selectionMichael Goulet-1/+2
2024-07-18valtree construction: keep track of which type was valtree-incompatibleRalf Jung-2/+2
2024-07-09Split out overflow handling into its own moduleMichael Goulet-1/+1
2024-07-08Move trait selection error reporting to its own top-level moduleMichael Goulet-1/+1
2024-07-08Rollup merge of #127439 - compiler-errors:uplift-elaborate, r=lcnr许杰友 Jieyou Xu (Joe)-8/+0
Uplift elaboration into `rustc_type_ir` Allows us to deduplicate and consolidate elaboration (including these stupid elaboration duplicate fns i added for pretty printing like 3 years ago) so I'm pretty hyped about this change :3 r? lcnr
2024-07-07Finish uplifting supertraitsMichael Goulet-8/+0
2024-07-07Get rid of trait_ref_is_knowable from delegateMichael Goulet-10/+0
2024-07-05Split SolverDelegate back out from InferCtxtLikeMichael Goulet-169/+2
2024-06-21Rename a bunch of thingsMichael Goulet-6/+6
2024-06-18Fix transmute goalMichael Goulet-1/+27
2024-06-18Fix impl for SolverDelegateMichael Goulet-76/+297
2024-06-18Uplift the new trait solverMichael Goulet-7260/+0
2024-06-18SolverDelegateMichael Goulet-148/+339
2024-06-18Make SearchGraph fully genericMichael Goulet-73/+49
2024-06-16Uplift OpaqueTypeKey too, use it in responseMichael Goulet-9/+3
2024-06-16Uplift ExternalConstraintDataMichael Goulet-15/+27
2024-06-16Make ExternalConstraints just carry outlivesMichael Goulet-18/+22
2024-06-16Stop using AssocKind in new solverMichael Goulet-13/+11
2024-06-16Move InferCtxtSelectExt out of eval_ctxt moduleMichael Goulet-3/+3
2024-06-16Auto merge of #126505 - compiler-errors:no-vtable, r=lcnrbors-60/+21
Only compute vtable information during codegen This PR removes vtable information from the `Object` and `TraitUpcasting` candidate sources in the trait solvers, and defers the computation of relevant information to `Instance::resolve`. This is because vtables really aren't a thing in the trait world -- they're an implementation detail in codegen. Previously it was just easiest to tangle this information together since we were already doing the work of looking at all the supertraits in the trait solver, and specifically because we use traits to represent when it's possible to call a method via a vtable (`Object` candidate) and do upcasting (`Unsize` candidate). but I am somewhat suspicious we're doing a *lot* of extra work, especially in polymorphic contexts, so let's see what perf says.