Check def id before calling match_projection_projections
This commit is contained in:
parent
0fd571286e
commit
43dae69341
2 changed files with 41 additions and 0 deletions
|
@ -793,6 +793,9 @@ fn assemble_candidates_from_trait_def<'cx, 'tcx>(
|
||||||
let Some(clause) = clause.as_projection_clause() else {
|
let Some(clause) = clause.as_projection_clause() else {
|
||||||
return ControlFlow::Continue(());
|
return ControlFlow::Continue(());
|
||||||
};
|
};
|
||||||
|
if clause.projection_def_id() != obligation.predicate.def_id {
|
||||||
|
return ControlFlow::Continue(());
|
||||||
|
}
|
||||||
|
|
||||||
let is_match =
|
let is_match =
|
||||||
selcx.infcx.probe(|_| selcx.match_projection_projections(obligation, clause, true));
|
selcx.infcx.probe(|_| selcx.match_projection_projections(obligation, clause, true));
|
||||||
|
|
38
tests/ui/traits/make-sure-to-filter-projections-by-def-id.rs
Normal file
38
tests/ui/traits/make-sure-to-filter-projections-by-def-id.rs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
#![recursion_limit = "1024"]
|
||||||
|
// Really high recursion limit ^
|
||||||
|
|
||||||
|
// Test that ensures we're filtering projections by def id before matching
|
||||||
|
// them in `match_projection_projections`.
|
||||||
|
|
||||||
|
use std::ops::{Add, Sub};
|
||||||
|
|
||||||
|
pub trait Scalar {}
|
||||||
|
|
||||||
|
pub trait VectorCommon: Sized {
|
||||||
|
type T: Scalar;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait VectorOpsByValue<Rhs = Self, Output = Self>:
|
||||||
|
VectorCommon + Add<Rhs, Output = Output> + Sub<Rhs, Output = Output>
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait VectorView<'a>:
|
||||||
|
VectorOpsByValue<Self, Self::Owned> + VectorOpsByValue<Self::Owned, Self::Owned>
|
||||||
|
{
|
||||||
|
type Owned;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait Vector: VectorOpsByValue<Self> + for<'a> VectorOpsByValue<Self::View<'a>> {
|
||||||
|
type View<'a>: VectorView<'a, T = Self::T, Owned = Self>
|
||||||
|
where
|
||||||
|
Self: 'a;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait MatrixCommon {
|
||||||
|
type V: Vector;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue