Make type_implements_trait not a query
This commit is contained in:
parent
969a6c2481
commit
8ef5212eff
10 changed files with 141 additions and 107 deletions
50
src/test/incremental/issue-86753.rs
Normal file
50
src/test/incremental/issue-86753.rs
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
// edition:2018
|
||||
// revisions: rpass1
|
||||
|
||||
|
||||
// Regression test for #86753. The `type_implements_trait` query (since moved to a method)
|
||||
// was encountering an ICE during incremental testing when hashing its arguments.
|
||||
#![warn(rust_2021_compatibility)]
|
||||
|
||||
use std::future::Future;
|
||||
use std::pin::Pin;
|
||||
use std::task::{Poll, Context};
|
||||
|
||||
struct LocalSet {}
|
||||
struct RunUntil<'a, F> {
|
||||
_local_set: &'a LocalSet,
|
||||
_future: F,
|
||||
}
|
||||
impl<'a, F> RunUntil<'a, F> {
|
||||
fn project<'pin>(self: Pin<&'pin mut Self>) -> Projection<'pin, 'a, F> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
struct Projection<'pin, 'a, F>
|
||||
where
|
||||
RunUntil<'a, F>: 'pin,
|
||||
{
|
||||
pub local_set: &'pin mut &'a LocalSet,
|
||||
pub future: Pin<&'pin mut F>,
|
||||
}
|
||||
|
||||
impl LocalSet {
|
||||
fn with<T>(&self, _f: impl FnOnce() -> T) -> T {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
impl<T: Future> Future for RunUntil<'_, T> {
|
||||
type Output = T::Output;
|
||||
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
|
||||
let me = self.project();
|
||||
me.local_set.with(|| {
|
||||
let _ = cx.waker();
|
||||
let f = me.future;
|
||||
let _ = f.poll(cx);
|
||||
Poll::Pending
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -8,7 +8,9 @@ error[E0605]: non-primitive cast: `u32` as `Option<_>`
|
|||
--> $DIR/issue-73886.rs:4:13
|
||||
|
|
||||
LL | let _ = 7u32 as Option<_>;
|
||||
| ^^^^^^^^^^^^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
|
||||
| ^^^^^^^^^^^^^^^^^ help: consider using the `From` trait instead: `Option<_>::from(7u32)`
|
||||
|
|
||||
= note: an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue