Skip to content

Commit a2a5ba4

Browse files
Use ScrubbedTraitError in more places
1 parent 05d17ac commit a2a5ba4

File tree

7 files changed

+25
-22
lines changed

7 files changed

+25
-22
lines changed

compiler/rustc_borrowck/src/type_check/constraint_conversion.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use rustc_span::Span;
1313
use rustc_trait_selection::solve::deeply_normalize;
1414
use rustc_trait_selection::traits::query::type_op::custom::CustomTypeOp;
1515
use rustc_trait_selection::traits::query::type_op::{TypeOp, TypeOpOutput};
16-
use rustc_trait_selection::traits::FulfillmentError;
16+
use rustc_trait_selection::traits::ScrubbedTraitError;
1717

1818
use crate::{
1919
constraints::OutlivesConstraint,
@@ -287,7 +287,7 @@ impl<'a, 'tcx> ConstraintConversion<'a, 'tcx> {
287287
ocx.infcx.at(&ObligationCause::dummy_with_span(self.span), self.param_env),
288288
ty,
289289
)
290-
.map_err(|_: Vec<FulfillmentError<'tcx>>| NoSolution)
290+
.map_err(|_: Vec<ScrubbedTraitError>| NoSolution)
291291
},
292292
"normalize type outlives obligation",
293293
)

compiler/rustc_hir_analysis/src/coherence/orphan.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ use rustc_middle::ty::{TypeFoldable, TypeFolder, TypeSuperFoldable};
1212
use rustc_middle::ty::{TypeSuperVisitable, TypeVisitable, TypeVisitableExt, TypeVisitor};
1313
use rustc_middle::{bug, span_bug};
1414
use rustc_span::def_id::{DefId, LocalDefId};
15-
use rustc_trait_selection::traits::{self, IsFirstInputType, UncoveredTyParams};
16-
use rustc_trait_selection::traits::{FulfillmentError, StructurallyNormalizeExt, TraitEngineExt};
15+
use rustc_trait_selection::traits::{
16+
self, IsFirstInputType, ScrubbedTraitError, UncoveredTyParams,
17+
};
1718
use rustc_trait_selection::traits::{OrphanCheckErr, OrphanCheckMode};
19+
use rustc_trait_selection::traits::{StructurallyNormalizeExt, TraitEngineExt};
1820

1921
#[instrument(level = "debug", skip(tcx))]
2022
pub(crate) fn orphan_check_impl(
@@ -317,8 +319,7 @@ fn orphan_check<'tcx>(
317319
}
318320

319321
let ty = if infcx.next_trait_solver() {
320-
let mut fulfill_cx =
321-
<dyn traits::TraitEngine<'tcx, FulfillmentError<'tcx>>>::new(&infcx);
322+
let mut fulfill_cx = <dyn traits::TraitEngine<'tcx, ScrubbedTraitError>>::new(&infcx);
322323
infcx
323324
.at(&cause, ty::ParamEnv::empty())
324325
.structurally_normalize(ty, &mut *fulfill_cx)

compiler/rustc_trait_selection/src/regions.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::traits::FulfillmentError;
1+
use crate::traits::ScrubbedTraitError;
22
use rustc_infer::infer::outlives::env::OutlivesEnvironment;
33
use rustc_infer::infer::{InferCtxt, RegionResolutionError};
44
use rustc_macros::extension;
@@ -28,8 +28,7 @@ impl<'tcx> InferCtxt<'tcx> {
2828
),
2929
ty,
3030
)
31-
// TODO:
32-
.map_err(|_: Vec<FulfillmentError<'tcx>>| NoSolution)
31+
.map_err(|_: Vec<ScrubbedTraitError>| NoSolution)
3332
} else {
3433
Ok(ty)
3534
}

compiler/rustc_trait_selection/src/solve/normalize.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::marker::PhantomData;
22

33
use crate::traits::error_reporting::{OverflowCause, TypeErrCtxtExt};
44
use crate::traits::query::evaluate_obligation::InferCtxtExt;
5-
use crate::traits::{BoundVarReplacer, FulfillmentError, PlaceholderReplacer};
5+
use crate::traits::{BoundVarReplacer, PlaceholderReplacer, ScrubbedTraitError};
66
use rustc_data_structures::stack::ensure_sufficient_stack;
77
use rustc_infer::infer::at::At;
88
use rustc_infer::infer::InferCtxt;
@@ -253,8 +253,7 @@ impl<'tcx> TypeFolder<TyCtxt<'tcx>> for DeeplyNormalizeForDiagnosticsFolder<'_,
253253
ty,
254254
vec![None; ty.outer_exclusive_binder().as_usize()],
255255
)
256-
// TODO:
257-
.unwrap_or_else(|_: Vec<FulfillmentError<'tcx>>| ty.super_fold_with(self))
256+
.unwrap_or_else(|_: Vec<ScrubbedTraitError>| ty.super_fold_with(self))
258257
}
259258

260259
fn fold_const(&mut self, ct: ty::Const<'tcx>) -> ty::Const<'tcx> {
@@ -263,7 +262,6 @@ impl<'tcx> TypeFolder<TyCtxt<'tcx>> for DeeplyNormalizeForDiagnosticsFolder<'_,
263262
ct,
264263
vec![None; ct.outer_exclusive_binder().as_usize()],
265264
)
266-
// TODO:
267-
.unwrap_or_else(|_: Vec<FulfillmentError<'tcx>>| ct.super_fold_with(self))
265+
.unwrap_or_else(|_: Vec<ScrubbedTraitError>| ct.super_fold_with(self))
268266
}
269267
}

compiler/rustc_trait_selection/src/traits/mod.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,17 @@ pub use self::util::{with_replaced_escaping_bound_vars, BoundVarReplacer, Placeh
7373

7474
pub use rustc_infer::traits::*;
7575

76-
// A trait error without any information in it. You likely want to alternately use [`ObligationCtxt::new_with_diagnostics`] to get a [`FulfillmentError`].
76+
/// A trait error without most of its information removed. This is the error
77+
/// returned by an [`ObligationCtxt`] by default, and suitable if you just
78+
/// want to see if a predicate holds, and don't particularly care about the
79+
/// error itself (except for if it's an ambiguity or true error).
80+
///
81+
/// use [`ObligationCtxt::new_with_diagnostics`] to get a [`FulfillmentError`].
7782
#[derive(Copy, Clone, Debug)]
7883
pub enum ScrubbedTraitError {
84+
/// A real error. This goal definitely does not hold.
7985
TrueError,
86+
/// An ambiguity. This goal may hold if further inference is done.
8087
Ambiguity,
8188
}
8289

compiler/rustc_trait_selection/src/traits/query/normalize.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ use crate::infer::{InferCtxt, InferOk};
88
use crate::traits::error_reporting::OverflowCause;
99
use crate::traits::error_reporting::TypeErrCtxtExt;
1010
use crate::traits::normalize::needs_normalization;
11-
use crate::traits::{BoundVarReplacer, PlaceholderReplacer};
12-
use crate::traits::{FulfillmentError, Normalized};
11+
use crate::traits::Normalized;
12+
use crate::traits::{BoundVarReplacer, PlaceholderReplacer, ScrubbedTraitError};
1313
use crate::traits::{ObligationCause, PredicateObligation, Reveal};
1414
use rustc_data_structures::sso::SsoHashMap;
1515
use rustc_data_structures::stack::ensure_sufficient_stack;
@@ -76,8 +76,7 @@ impl<'cx, 'tcx> At<'cx, 'tcx> {
7676
};
7777

7878
if self.infcx.next_trait_solver() {
79-
// TODO:
80-
match crate::solve::deeply_normalize_with_skipped_universes::<_, FulfillmentError<'tcx>>(
79+
match crate::solve::deeply_normalize_with_skipped_universes::<_, ScrubbedTraitError>(
8180
self, value, universes,
8281
) {
8382
Ok(value) => return Ok(Normalized { value, obligations: vec![] }),

compiler/rustc_trait_selection/src/traits/query/type_op/implied_outlives_bounds.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use crate::solve;
22
use crate::traits::query::NoSolution;
33
use crate::traits::wf;
4-
use crate::traits::FulfillmentError;
54
use crate::traits::ObligationCtxt;
5+
use crate::traits::ScrubbedTraitError;
66

77
use rustc_infer::infer::canonical::Canonical;
88
use rustc_infer::infer::outlives::components::{push_outlives_components, Component};
@@ -267,8 +267,7 @@ pub fn compute_implied_outlives_bounds_compat_inner<'tcx>(
267267
ocx.infcx.at(&ObligationCause::dummy(), param_env),
268268
ty_a,
269269
)
270-
// TODO:
271-
.map_err(|_errs: Vec<FulfillmentError<'tcx>>| NoSolution)?;
270+
.map_err(|_errs: Vec<ScrubbedTraitError>| NoSolution)?;
272271
}
273272
let mut components = smallvec![];
274273
push_outlives_components(tcx, ty_a, &mut components);

0 commit comments

Comments
 (0)