Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir-ty/src/infer/coerce.rs4
-rw-r--r--crates/hir-ty/src/infer/op.rs2
-rw-r--r--crates/hir-ty/src/infer/unify.rs2
-rw-r--r--crates/hir-ty/src/lib.rs2
-rw-r--r--crates/hir-ty/src/method_resolution.rs4
-rw-r--r--crates/hir-ty/src/method_resolution/probe.rs4
-rw-r--r--crates/hir-ty/src/next_solver/infer/at.rs26
-rw-r--r--crates/hir-ty/src/next_solver/infer/mod.rs6
-rw-r--r--crates/hir-ty/src/next_solver/infer/relate/lattice.rs9
-rw-r--r--crates/hir-ty/src/next_solver/infer/traits.rs8
-rw-r--r--crates/hir-ty/src/next_solver/normalize.rs2
-rw-r--r--crates/hir-ty/src/next_solver/structural_normalize.rs2
-rw-r--r--crates/hir-ty/src/next_solver/util.rs2
-rw-r--r--crates/hir-ty/src/specialization.rs2
14 files changed, 35 insertions, 40 deletions
diff --git a/crates/hir-ty/src/infer/coerce.rs b/crates/hir-ty/src/infer/coerce.rs
index ddff23e840..b2bed0ce2b 100644
--- a/crates/hir-ty/src/infer/coerce.rs
+++ b/crates/hir-ty/src/infer/coerce.rs
@@ -324,7 +324,7 @@ where
if source_ty != target_ty {
obligations.push(Obligation::new(
self.interner(),
- self.cause.clone(),
+ self.cause,
self.param_env(),
Binder::dummy(PredicateKind::Coerce(CoercePredicate {
a: source_ty,
@@ -669,7 +669,7 @@ where
)?;
// Create an obligation for `Source: CoerceUnsized<Target>`.
- let cause = self.cause.clone();
+ let cause = self.cause;
let pred = TraitRef::new(
self.interner(),
coerce_unsized_did.into(),
diff --git a/crates/hir-ty/src/infer/op.rs b/crates/hir-ty/src/infer/op.rs
index 5900027a98..753a6513f8 100644
--- a/crates/hir-ty/src/infer/op.rs
+++ b/crates/hir-ty/src/infer/op.rs
@@ -301,7 +301,7 @@ impl<'a, 'db> InferenceContext<'a, 'db> {
// to allow more code to compile.
let treat_opaques = TreatNotYetDefinedOpaques::AsInfer;
let method = self.table.lookup_method_for_operator(
- cause.clone(),
+ cause,
opname,
trait_did,
lhs_ty,
diff --git a/crates/hir-ty/src/infer/unify.rs b/crates/hir-ty/src/infer/unify.rs
index 4342375621..ab5a7c3fc7 100644
--- a/crates/hir-ty/src/infer/unify.rs
+++ b/crates/hir-ty/src/infer/unify.rs
@@ -65,7 +65,7 @@ impl<'a, 'db> ProofTreeVisitor<'db> for NestedObligationsForSelfTy<'a, 'db> {
if self.ctx.predicate_has_self_ty(goal.predicate, self.self_ty) {
self.obligations_for_self_ty.push(Obligation::new(
db,
- self.root_cause.clone(),
+ *self.root_cause,
goal.param_env,
goal.predicate,
));
diff --git a/crates/hir-ty/src/lib.rs b/crates/hir-ty/src/lib.rs
index 133447dff3..c77c1b98d3 100644
--- a/crates/hir-ty/src/lib.rs
+++ b/crates/hir-ty/src/lib.rs
@@ -553,7 +553,7 @@ pub fn callable_sig_from_fn_trait<'db>(
let args = GenericArgs::new_from_slice(&[self_ty.into(), tupled_args.into()]);
let trait_id = trait_.get_id(lang_items)?;
let trait_ref = TraitRef::new_from_args(interner, trait_id.into(), args);
- let obligation = Obligation::new(interner, cause.clone(), param_env, trait_ref);
+ let obligation = Obligation::new(interner, cause, param_env, trait_ref);
ocx.register_obligation(obligation);
if !ocx.try_evaluate_obligations().is_empty() {
return None;
diff --git a/crates/hir-ty/src/method_resolution.rs b/crates/hir-ty/src/method_resolution.rs
index 2c6c7ed9a5..1f2ede3324 100644
--- a/crates/hir-ty/src/method_resolution.rs
+++ b/crates/hir-ty/src/method_resolution.rs
@@ -256,7 +256,7 @@ impl<'db> InferenceTable<'db> {
let obligation = Obligation::new(
self.interner(),
- cause.clone(),
+ cause,
self.param_env,
TraitRef::new_from_args(self.interner(), trait_def_id.into(), args),
);
@@ -330,7 +330,7 @@ impl<'db> InferenceTable<'db> {
for ty in fn_sig.inputs_and_output {
obligations.push(Obligation::new(
interner,
- obligation.cause.clone(),
+ obligation.cause,
self.param_env,
Binder::dummy(PredicateKind::Clause(ClauseKind::WellFormed(ty.into()))),
));
diff --git a/crates/hir-ty/src/method_resolution/probe.rs b/crates/hir-ty/src/method_resolution/probe.rs
index 6eeec6cb41..2e4ca139c0 100644
--- a/crates/hir-ty/src/method_resolution/probe.rs
+++ b/crates/hir-ty/src/method_resolution/probe.rs
@@ -1660,7 +1660,7 @@ impl<'a, 'db, Choice: ProbeChoice<'db>> ProbeContext<'a, 'db, Choice> {
}
let obligation = Obligation::new(
self.interner(),
- cause.clone(),
+ *cause,
self.param_env(),
Binder::dummy(trait_ref),
);
@@ -1734,7 +1734,7 @@ impl<'a, 'db, Choice: ProbeChoice<'db>> ProbeContext<'a, 'db, Choice> {
if let Some(xform_ret_ty) = xform_ret_ty {
ocx.register_obligation(Obligation::new(
self.interner(),
- cause.clone(),
+ *cause,
self.param_env(),
ClauseKind::WellFormed(xform_ret_ty.into()),
));
diff --git a/crates/hir-ty/src/next_solver/infer/at.rs b/crates/hir-ty/src/next_solver/infer/at.rs
index 4784edf60f..f63200a2e0 100644
--- a/crates/hir-ty/src/next_solver/infer/at.rs
+++ b/crates/hir-ty/src/next_solver/infer/at.rs
@@ -199,7 +199,7 @@ impl<'a, 'db> At<'a, 'db> {
.map(|goal| {
Obligation::new(
self.infcx.interner,
- self.cause.clone(),
+ *self.cause,
goal.param_env,
goal.predicate,
)
@@ -212,7 +212,7 @@ impl<'a, 'db> At<'a, 'db> {
impl<'db> ToTrace<'db> for Ty<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
TypeTrace {
- cause: cause.clone(),
+ cause: *cause,
values: ValuePairs::Terms(ExpectedFound::new(a.into(), b.into())),
}
}
@@ -220,14 +220,14 @@ impl<'db> ToTrace<'db> for Ty<'db> {
impl<'db> ToTrace<'db> for Region<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
- TypeTrace { cause: cause.clone(), values: ValuePairs::Regions(ExpectedFound::new(a, b)) }
+ TypeTrace { cause: *cause, values: ValuePairs::Regions(ExpectedFound::new(a, b)) }
}
}
impl<'db> ToTrace<'db> for Const<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
TypeTrace {
- cause: cause.clone(),
+ cause: *cause,
values: ValuePairs::Terms(ExpectedFound::new(a.into(), b.into())),
}
}
@@ -236,7 +236,7 @@ impl<'db> ToTrace<'db> for Const<'db> {
impl<'db> ToTrace<'db> for GenericArg<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
TypeTrace {
- cause: cause.clone(),
+ cause: *cause,
values: match (a.kind(), b.kind()) {
(GenericArgKind::Lifetime(a), GenericArgKind::Lifetime(b)) => {
ValuePairs::Regions(ExpectedFound::new(a, b))
@@ -255,20 +255,20 @@ impl<'db> ToTrace<'db> for GenericArg<'db> {
impl<'db> ToTrace<'db> for Term<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
- TypeTrace { cause: cause.clone(), values: ValuePairs::Terms(ExpectedFound::new(a, b)) }
+ TypeTrace { cause: *cause, values: ValuePairs::Terms(ExpectedFound::new(a, b)) }
}
}
impl<'db> ToTrace<'db> for TraitRef<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
- TypeTrace { cause: cause.clone(), values: ValuePairs::TraitRefs(ExpectedFound::new(a, b)) }
+ TypeTrace { cause: *cause, values: ValuePairs::TraitRefs(ExpectedFound::new(a, b)) }
}
}
impl<'db> ToTrace<'db> for AliasTy<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
TypeTrace {
- cause: cause.clone(),
+ cause: *cause,
values: ValuePairs::Aliases(ExpectedFound::new(a.into(), b.into())),
}
}
@@ -276,14 +276,14 @@ impl<'db> ToTrace<'db> for AliasTy<'db> {
impl<'db> ToTrace<'db> for AliasTerm<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
- TypeTrace { cause: cause.clone(), values: ValuePairs::Aliases(ExpectedFound::new(a, b)) }
+ TypeTrace { cause: *cause, values: ValuePairs::Aliases(ExpectedFound::new(a, b)) }
}
}
impl<'db> ToTrace<'db> for FnSig<DbInterner<'db>> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
TypeTrace {
- cause: cause.clone(),
+ cause: *cause,
values: ValuePairs::PolySigs(ExpectedFound::new(Binder::dummy(a), Binder::dummy(b))),
}
}
@@ -291,14 +291,14 @@ impl<'db> ToTrace<'db> for FnSig<DbInterner<'db>> {
impl<'db> ToTrace<'db> for PolyFnSig<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
- TypeTrace { cause: cause.clone(), values: ValuePairs::PolySigs(ExpectedFound::new(a, b)) }
+ TypeTrace { cause: *cause, values: ValuePairs::PolySigs(ExpectedFound::new(a, b)) }
}
}
impl<'db> ToTrace<'db> for PolyExistentialTraitRef<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
TypeTrace {
- cause: cause.clone(),
+ cause: *cause,
values: ValuePairs::ExistentialTraitRef(ExpectedFound::new(a, b)),
}
}
@@ -307,7 +307,7 @@ impl<'db> ToTrace<'db> for PolyExistentialTraitRef<'db> {
impl<'db> ToTrace<'db> for PolyExistentialProjection<'db> {
fn to_trace(cause: &ObligationCause, a: Self, b: Self) -> TypeTrace<'db> {
TypeTrace {
- cause: cause.clone(),
+ cause: *cause,
values: ValuePairs::ExistentialProjection(ExpectedFound::new(a, b)),
}
}
diff --git a/crates/hir-ty/src/next_solver/infer/mod.rs b/crates/hir-ty/src/next_solver/infer/mod.rs
index f038c47a8b..e1568d43bb 100644
--- a/crates/hir-ty/src/next_solver/infer/mod.rs
+++ b/crates/hir-ty/src/next_solver/infer/mod.rs
@@ -1352,7 +1352,7 @@ impl TyOrConstInferVar {
impl<'db> TypeTrace<'db> {
pub fn types(cause: &ObligationCause, a: Ty<'db>, b: Ty<'db>) -> TypeTrace<'db> {
TypeTrace {
- cause: cause.clone(),
+ cause: *cause,
values: ValuePairs::Terms(ExpectedFound::new(a.into(), b.into())),
}
}
@@ -1362,12 +1362,12 @@ impl<'db> TypeTrace<'db> {
a: TraitRef<'db>,
b: TraitRef<'db>,
) -> TypeTrace<'db> {
- TypeTrace { cause: cause.clone(), values: ValuePairs::TraitRefs(ExpectedFound::new(a, b)) }
+ TypeTrace { cause: *cause, values: ValuePairs::TraitRefs(ExpectedFound::new(a, b)) }
}
pub fn consts(cause: &ObligationCause, a: Const<'db>, b: Const<'db>) -> TypeTrace<'db> {
TypeTrace {
- cause: cause.clone(),
+ cause: *cause,
values: ValuePairs::Terms(ExpectedFound::new(a.into(), b.into())),
}
}
diff --git a/crates/hir-ty/src/next_solver/infer/relate/lattice.rs b/crates/hir-ty/src/next_solver/infer/relate/lattice.rs
index 0443dbd814..f3af697feb 100644
--- a/crates/hir-ty/src/next_solver/infer/relate/lattice.rs
+++ b/crates/hir-ty/src/next_solver/infer/relate/lattice.rs
@@ -258,18 +258,13 @@ impl<'db> PredicateEmittingRelation<InferCtxt<'db>> for LatticeOp<'_, 'db> {
preds: impl IntoIterator<Item: Upcast<DbInterner<'db>, Predicate<'db>>>,
) {
self.obligations.extend(preds.into_iter().map(|pred| {
- Obligation::new(self.infcx.interner, self.trace.cause.clone(), self.param_env, pred)
+ Obligation::new(self.infcx.interner, self.trace.cause, self.param_env, pred)
}))
}
fn register_goals(&mut self, goals: impl IntoIterator<Item = Goal<'db, Predicate<'db>>>) {
self.obligations.extend(goals.into_iter().map(|goal| {
- Obligation::new(
- self.infcx.interner,
- self.trace.cause.clone(),
- goal.param_env,
- goal.predicate,
- )
+ Obligation::new(self.infcx.interner, self.trace.cause, goal.param_env, goal.predicate)
}))
}
diff --git a/crates/hir-ty/src/next_solver/infer/traits.rs b/crates/hir-ty/src/next_solver/infer/traits.rs
index 1edf256d01..523c94b36f 100644
--- a/crates/hir-ty/src/next_solver/infer/traits.rs
+++ b/crates/hir-ty/src/next_solver/infer/traits.rs
@@ -34,7 +34,7 @@ use super::InferCtxt;
///
/// We do not want to intern this as there are a lot of obligation causes which
/// only live for a short period of time.
-#[derive(Clone, Debug, PartialEq, Eq)]
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct ObligationCause {
span: Span,
}
@@ -118,7 +118,7 @@ impl<'db> Elaboratable<DbInterner<'db>> for PredicateObligation<'db> {
fn child(&self, clause: Clause<'db>) -> Self {
Obligation {
- cause: self.cause.clone(),
+ cause: self.cause,
param_env: self.param_env,
recursion_depth: 0,
predicate: clause.as_predicate(),
@@ -186,7 +186,7 @@ impl<'db> PredicateObligation<'db> {
/// Given `T: Trait` predicate it returns `T: !Trait` and given `T: !Trait` returns `T: Trait`.
pub fn flip_polarity(&self, _interner: DbInterner<'db>) -> Option<PredicateObligation<'db>> {
Some(PredicateObligation {
- cause: self.cause.clone(),
+ cause: self.cause,
param_env: self.param_env,
predicate: self.predicate.flip_polarity()?,
recursion_depth: self.recursion_depth,
@@ -228,7 +228,7 @@ impl<'db, O> Obligation<'db, O> {
tcx: DbInterner<'db>,
value: impl Upcast<DbInterner<'db>, P>,
) -> Obligation<'db, P> {
- Obligation::with_depth(tcx, self.cause.clone(), self.recursion_depth, self.param_env, value)
+ Obligation::with_depth(tcx, self.cause, self.recursion_depth, self.param_env, value)
}
}
diff --git a/crates/hir-ty/src/next_solver/normalize.rs b/crates/hir-ty/src/next_solver/normalize.rs
index aa6f27c4c2..c35434ed16 100644
--- a/crates/hir-ty/src/next_solver/normalize.rs
+++ b/crates/hir-ty/src/next_solver/normalize.rs
@@ -102,7 +102,7 @@ impl<'db> NormalizationFolder<'_, 'db> {
let infer_term = infcx.next_term_var_of_kind(alias_term, self.at.cause.span());
let obligation = Obligation::new(
interner,
- self.at.cause.clone(),
+ *self.at.cause,
self.at.param_env,
PredicateKind::AliasRelate(alias_term, infer_term, AliasRelationDirection::Equate),
);
diff --git a/crates/hir-ty/src/next_solver/structural_normalize.rs b/crates/hir-ty/src/next_solver/structural_normalize.rs
index 7a70bae97c..769d2ae141 100644
--- a/crates/hir-ty/src/next_solver/structural_normalize.rs
+++ b/crates/hir-ty/src/next_solver/structural_normalize.rs
@@ -41,7 +41,7 @@ impl<'db> At<'_, 'db> {
// (or a not-yet-defined opaque in scope).
let obligation = Obligation::new(
self.infcx.interner,
- self.cause.clone(),
+ *self.cause,
self.param_env,
PredicateKind::AliasRelate(term, new_infer, AliasRelationDirection::Equate),
);
diff --git a/crates/hir-ty/src/next_solver/util.rs b/crates/hir-ty/src/next_solver/util.rs
index 3c5126cc4a..43b4503204 100644
--- a/crates/hir-ty/src/next_solver/util.rs
+++ b/crates/hir-ty/src/next_solver/util.rs
@@ -717,7 +717,7 @@ pub(crate) fn clauses_as_obligations<'db>(
param_env: ParamEnv<'db>,
) -> impl Iterator<Item = PredicateObligation<'db>> {
clauses.into_iter().map(move |clause| Obligation {
- cause: cause.clone(),
+ cause,
param_env,
predicate: clause.as_predicate(),
recursion_depth: 0,
diff --git a/crates/hir-ty/src/specialization.rs b/crates/hir-ty/src/specialization.rs
index 7e4d3a8354..1ef8adb4d9 100644
--- a/crates/hir-ty/src/specialization.rs
+++ b/crates/hir-ty/src/specialization.rs
@@ -110,7 +110,7 @@ fn specializes_query(
ocx.register_obligations(clauses_as_obligations(
GenericPredicates::query_all(db, parent_impl_def_id.into())
.iter_instantiated(interner, parent_args.as_slice()),
- cause.clone(),
+ *cause,
param_env,
));