Skip to content

Commit

Permalink
Rollup merge of #137822 - BoxyUwU:query_normalizer_docs, r=compiler-e…
Browse files Browse the repository at this point in the history
…rrors

Update query normalizer docs to not position it as the greatest pioneer in the space of normalization

I don't think its true that we intend to replace all normalization with the query normalizer- its more likely that once the new solver is stable we can replace the query normalizer with normal normalization calls as the new solver caches much more than the old solver

r? ``@compiler-errors``
  • Loading branch information
matthiaskrgr authored Mar 1, 2025
2 parents 224ea37 + a9ca113 commit 88e7547
Showing 1 changed file with 9 additions and 12 deletions.
21 changes: 9 additions & 12 deletions compiler/rustc_trait_selection/src/traits/query/normalize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,19 @@ impl<'a, 'tcx> At<'a, 'tcx> {
/// normalized. If you don't care about regions, you should prefer
/// `normalize_erasing_regions`, which is more efficient.
///
/// If the normalization succeeds and is unambiguous, returns back
/// the normalized value along with various outlives relations (in
/// the form of obligations that must be discharged).
/// If the normalization succeeds, returns back the normalized
/// value along with various outlives relations (in the form of
/// obligations that must be discharged).
///
/// N.B., this will *eventually* be the main means of
/// normalizing, but for now should be used only when we actually
/// know that normalization will succeed, since error reporting
/// and other details are still "under development".
///
/// This normalization should *only* be used when the projection does not
/// have possible ambiguity or may not be well-formed.
/// This normalization should *only* be used when the projection is well-formed and
/// does not have possible ambiguity (contains inference variables).
///
/// After codegen, when lifetimes do not matter, it is preferable to instead
/// use [`TyCtxt::normalize_erasing_regions`], which wraps this procedure.
///
/// N.B. Once the new solver is stabilized this method of normalization will
/// likely be removed as trait solver operations are already cached by the query
/// system making this redundant.
fn query_normalize<T>(self, value: T) -> Result<Normalized<'tcx, T>, NoSolution>
where
T: TypeFoldable<TyCtxt<'tcx>>,
Expand Down Expand Up @@ -210,8 +209,6 @@ impl<'a, 'tcx> FallibleTypeFolder<TyCtxt<'tcx>> for QueryNormalizer<'a, 'tcx> {

// See note in `rustc_trait_selection::traits::project` about why we
// wait to fold the args.

// Wrap this in a closure so we don't accidentally return from the outer function
let res = match kind {
ty::Opaque => {
// Only normalize `impl Trait` outside of type inference, usually in codegen.
Expand Down

0 comments on commit 88e7547

Please sign in to comment.