Mir borrowck does not generate lifetime variables for 'static lifetimes during opaque type resolution

This commit is contained in:
Oli Scherer 2021-07-26 14:59:26 +00:00
parent fc24bcead1
commit 2953a2fb18
2 changed files with 74 additions and 0 deletions

View File

@ -83,6 +83,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
.and_then(|ur_vid| self.definitions[*ur_vid].external_name)
.unwrap_or(infcx.tcx.lifetimes.re_root_empty),
ty::ReLateBound(..) => region,
ty::ReStatic => region,
_ => {
infcx.tcx.sess.delay_span_bug(
span,

View File

@ -0,0 +1,73 @@
// check-pass
use std::error::Error as StdError;
use std::pin::Pin;
use std::task::{Context, Poll};
pub trait Stream {
type Item;
fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>>;
fn size_hint(&self) -> (usize, Option<usize>) {
(0, None)
}
}
pub trait TryStream: Stream {
type Ok;
type Error;
fn try_poll_next(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Poll<Option<Result<Self::Ok, Self::Error>>>;
}
impl<S, T, E> TryStream for S
where
S: ?Sized + Stream<Item = Result<T, E>>,
{
type Ok = T;
type Error = E;
fn try_poll_next(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Poll<Option<Result<Self::Ok, Self::Error>>> {
self.poll_next(cx)
}
}
pub trait ServerSentEvent: Sized + Send + Sync + 'static {}
impl<T: Send + Sync + 'static> ServerSentEvent for T {}
struct SseKeepAlive<S> {
event_stream: S,
}
struct SseComment<T>(T);
impl<S> Stream for SseKeepAlive<S>
where
S: TryStream + Send + 'static,
S::Ok: ServerSentEvent,
S::Error: StdError + Send + Sync + 'static,
{
type Item = Result<SseComment<&'static str>, ()>;
fn poll_next(self: Pin<&mut Self>, _cx: &mut Context) -> Poll<Option<Self::Item>> {
unimplemented!()
}
}
pub fn keep<S>(
event_stream: S,
) -> impl TryStream<Ok = impl ServerSentEvent + Send + 'static, Error = ()> + Send + 'static
where
S: TryStream + Send + 'static,
S::Ok: ServerSentEvent + Send,
S::Error: StdError + Send + Sync + 'static,
{
SseKeepAlive { event_stream }
}
fn main() {}