Remove 'speculative evaluation' of predicates
Performing 'speculative evaluation' introduces caching bugs that cannot be fixed without invasive changes to projection. Hopefully, we can win back most of the performance lost by re-adding 'cache completion' Fixes #90662
This commit is contained in:
parent
34dc0d0f24
commit
eee09ec426
2 changed files with 35 additions and 18 deletions
34
src/test/ui/traits/issue-90662-projection-caching.rs
Normal file
34
src/test/ui/traits/issue-90662-projection-caching.rs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
// check-pass
|
||||
|
||||
// Regression test for issue #90662
|
||||
// Tests that projection caching does not cause a spurious error
|
||||
|
||||
trait HasProvider<T: ?Sized> {}
|
||||
trait Provider<M> {
|
||||
type Interface: ?Sized;
|
||||
}
|
||||
|
||||
trait Repository {}
|
||||
trait Service {}
|
||||
|
||||
struct DbConnection;
|
||||
impl<M> Provider<M> for DbConnection {
|
||||
type Interface = DbConnection;
|
||||
}
|
||||
|
||||
struct RepositoryImpl;
|
||||
impl<M: HasProvider<DbConnection>> Provider<M> for RepositoryImpl {
|
||||
type Interface = dyn Repository;
|
||||
}
|
||||
|
||||
struct ServiceImpl;
|
||||
impl<M: HasProvider<dyn Repository>> Provider<M> for ServiceImpl {
|
||||
type Interface = dyn Service;
|
||||
}
|
||||
|
||||
struct TestModule;
|
||||
impl HasProvider<<DbConnection as Provider<Self>>::Interface> for TestModule {}
|
||||
impl HasProvider<<RepositoryImpl as Provider<Self>>::Interface> for TestModule {}
|
||||
impl HasProvider<<ServiceImpl as Provider<Self>>::Interface> for TestModule {}
|
||||
|
||||
fn main() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue