Auto merge of #64999 - nikomatsakis:issue-60424-async-return-inference, r=cramertj
extract expected return type for async fn generators Fixes #60424 cc @Centril, I know you've been eager to see this fixed. r? @cramertj
This commit is contained in:
commit
cfb6d84720
|
@ -89,9 +89,14 @@ impl LoweringContext<'_> {
|
|||
hir::MatchSource::Normal,
|
||||
),
|
||||
ExprKind::Async(capture_clause, closure_node_id, ref block) => {
|
||||
self.make_async_expr(capture_clause, closure_node_id, None, block.span, |this| {
|
||||
this.with_new_scopes(|this| this.lower_block_expr(block))
|
||||
})
|
||||
self.make_async_expr(
|
||||
capture_clause,
|
||||
closure_node_id,
|
||||
None,
|
||||
block.span,
|
||||
hir::AsyncGeneratorKind::Block,
|
||||
|this| this.with_new_scopes(|this| this.lower_block_expr(block)),
|
||||
)
|
||||
}
|
||||
ExprKind::Await(ref expr) => self.lower_expr_await(e.span, expr),
|
||||
ExprKind::Closure(
|
||||
|
@ -457,6 +462,7 @@ impl LoweringContext<'_> {
|
|||
closure_node_id: NodeId,
|
||||
ret_ty: Option<AstP<Ty>>,
|
||||
span: Span,
|
||||
async_gen_kind: hir::AsyncGeneratorKind,
|
||||
body: impl FnOnce(&mut LoweringContext<'_>) -> hir::Expr,
|
||||
) -> hir::ExprKind {
|
||||
let capture_clause = self.lower_capture_clause(capture_clause);
|
||||
|
@ -470,7 +476,7 @@ impl LoweringContext<'_> {
|
|||
};
|
||||
let decl = self.lower_fn_decl(&ast_decl, None, /* impl trait allowed */ false, None);
|
||||
let body_id = self.lower_fn_body(&ast_decl, |this| {
|
||||
this.generator_kind = Some(hir::GeneratorKind::Async);
|
||||
this.generator_kind = Some(hir::GeneratorKind::Async(async_gen_kind));
|
||||
body(this)
|
||||
});
|
||||
|
||||
|
@ -522,7 +528,7 @@ impl LoweringContext<'_> {
|
|||
/// ```
|
||||
fn lower_expr_await(&mut self, await_span: Span, expr: &Expr) -> hir::ExprKind {
|
||||
match self.generator_kind {
|
||||
Some(hir::GeneratorKind::Async) => {},
|
||||
Some(hir::GeneratorKind::Async(_)) => {},
|
||||
Some(hir::GeneratorKind::Gen) |
|
||||
None => {
|
||||
let mut err = struct_span_err!(
|
||||
|
@ -727,7 +733,7 @@ impl LoweringContext<'_> {
|
|||
Movability::Static => hir::GeneratorMovability::Static,
|
||||
})
|
||||
},
|
||||
Some(hir::GeneratorKind::Async) => {
|
||||
Some(hir::GeneratorKind::Async(_)) => {
|
||||
bug!("non-`async` closure body turned `async` during lowering");
|
||||
},
|
||||
None => {
|
||||
|
@ -786,10 +792,12 @@ impl LoweringContext<'_> {
|
|||
None
|
||||
};
|
||||
let async_body = this.make_async_expr(
|
||||
capture_clause, closure_id, async_ret_ty, body.span,
|
||||
|this| {
|
||||
this.with_new_scopes(|this| this.lower_expr(body))
|
||||
}
|
||||
capture_clause,
|
||||
closure_id,
|
||||
async_ret_ty,
|
||||
body.span,
|
||||
hir::AsyncGeneratorKind::Closure,
|
||||
|this| this.with_new_scopes(|this| this.lower_expr(body)),
|
||||
);
|
||||
this.expr(fn_decl_span, async_body, ThinVec::new())
|
||||
});
|
||||
|
@ -1005,7 +1013,7 @@ impl LoweringContext<'_> {
|
|||
fn lower_expr_yield(&mut self, span: Span, opt_expr: Option<&Expr>) -> hir::ExprKind {
|
||||
match self.generator_kind {
|
||||
Some(hir::GeneratorKind::Gen) => {},
|
||||
Some(hir::GeneratorKind::Async) => {
|
||||
Some(hir::GeneratorKind::Async(_)) => {
|
||||
span_err!(
|
||||
self.sess,
|
||||
span,
|
||||
|
|
|
@ -1222,7 +1222,11 @@ impl LoweringContext<'_> {
|
|||
}
|
||||
|
||||
let async_expr = this.make_async_expr(
|
||||
CaptureBy::Value, closure_id, None, body.span,
|
||||
CaptureBy::Value,
|
||||
closure_id,
|
||||
None,
|
||||
body.span,
|
||||
hir::AsyncGeneratorKind::Fn,
|
||||
|this| {
|
||||
// Create a block from the user's function body:
|
||||
let user_body = this.lower_block_expr(body);
|
||||
|
|
|
@ -1362,21 +1362,49 @@ impl Body {
|
|||
}
|
||||
|
||||
/// The type of source expression that caused this generator to be created.
|
||||
// Not `IsAsync` because we want to eventually add support for `AsyncGen`
|
||||
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, HashStable,
|
||||
RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
pub enum GeneratorKind {
|
||||
/// An `async` block or function.
|
||||
Async,
|
||||
/// An explicit `async` block or the body of an async function.
|
||||
Async(AsyncGeneratorKind),
|
||||
|
||||
/// A generator literal created via a `yield` inside a closure.
|
||||
Gen,
|
||||
}
|
||||
|
||||
impl fmt::Display for GeneratorKind {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
GeneratorKind::Async(k) => fmt::Display::fmt(k, f),
|
||||
GeneratorKind::Gen => f.write_str("generator"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// In the case of a generator created as part of an async construct,
|
||||
/// which kind of async construct caused it to be created?
|
||||
///
|
||||
/// This helps error messages but is also used to drive coercions in
|
||||
/// type-checking (see #60424).
|
||||
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, HashStable,
|
||||
RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
|
||||
pub enum AsyncGeneratorKind {
|
||||
/// An explicit `async` block written by the user.
|
||||
Block,
|
||||
|
||||
/// An explicit `async` block written by the user.
|
||||
Closure,
|
||||
|
||||
/// The `async` block generated as the body of an async function.
|
||||
Fn,
|
||||
}
|
||||
|
||||
impl fmt::Display for AsyncGeneratorKind {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.write_str(match self {
|
||||
GeneratorKind::Async => "`async` object",
|
||||
GeneratorKind::Gen => "generator",
|
||||
AsyncGeneratorKind::Block => "`async` block",
|
||||
AsyncGeneratorKind::Closure => "`async` closure body",
|
||||
AsyncGeneratorKind::Fn => "`async fn` body",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -1758,6 +1786,7 @@ pub struct Destination {
|
|||
pub enum GeneratorMovability {
|
||||
/// May contain self-references, `!Unpin`.
|
||||
Static,
|
||||
|
||||
/// Must not contain self-references, `Unpin`.
|
||||
Movable,
|
||||
}
|
||||
|
|
|
@ -1319,6 +1319,14 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Resolve any type variables found in `value` -- but only one
|
||||
/// level. So, if the variable `?X` is bound to some type
|
||||
/// `Foo<?Y>`, then this would return `Foo<?Y>` (but `?Y` may
|
||||
/// itself be bound to a type).
|
||||
///
|
||||
/// Useful when you only need to inspect the outermost level of
|
||||
/// the type and don't care about nested types (or perhaps you
|
||||
/// will be resolving them as well, e.g. in a loop).
|
||||
pub fn shallow_resolve<T>(&self, value: T) -> T
|
||||
where
|
||||
T: TypeFoldable<'tcx>,
|
||||
|
@ -1579,6 +1587,9 @@ impl<'a, 'tcx> ShallowResolver<'a, 'tcx> {
|
|||
ShallowResolver { infcx }
|
||||
}
|
||||
|
||||
/// If `typ` is a type variable of some kind, resolve it one level
|
||||
/// (but do not resolve types found in the result). If `typ` is
|
||||
/// not a type variable, just return it unmodified.
|
||||
pub fn shallow_resolve(&mut self, typ: Ty<'tcx>) -> Ty<'tcx> {
|
||||
match typ.kind {
|
||||
ty::Infer(ty::TyVar(v)) => {
|
||||
|
|
|
@ -337,7 +337,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
) -> ClosureSignatures<'tcx> {
|
||||
debug!("sig_of_closure_no_expectation()");
|
||||
|
||||
let bound_sig = self.supplied_sig_of_closure(expr_def_id, decl);
|
||||
let bound_sig = self.supplied_sig_of_closure(expr_def_id, decl, body);
|
||||
|
||||
self.closure_sigs(expr_def_id, body, bound_sig)
|
||||
}
|
||||
|
@ -490,7 +490,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
//
|
||||
// (See comment on `sig_of_closure_with_expectation` for the
|
||||
// meaning of these letters.)
|
||||
let supplied_sig = self.supplied_sig_of_closure(expr_def_id, decl);
|
||||
let supplied_sig = self.supplied_sig_of_closure(expr_def_id, decl, body);
|
||||
|
||||
debug!(
|
||||
"check_supplied_sig_against_expectation: supplied_sig={:?}",
|
||||
|
@ -591,14 +591,31 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
&self,
|
||||
expr_def_id: DefId,
|
||||
decl: &hir::FnDecl,
|
||||
body: &hir::Body,
|
||||
) -> ty::PolyFnSig<'tcx> {
|
||||
let astconv: &dyn AstConv<'_> = self;
|
||||
|
||||
debug!(
|
||||
"supplied_sig_of_closure(decl={:?}, body.generator_kind={:?})",
|
||||
decl,
|
||||
body.generator_kind,
|
||||
);
|
||||
|
||||
// First, convert the types that the user supplied (if any).
|
||||
let supplied_arguments = decl.inputs.iter().map(|a| astconv.ast_ty_to_ty(a));
|
||||
let supplied_return = match decl.output {
|
||||
hir::Return(ref output) => astconv.ast_ty_to_ty(&output),
|
||||
hir::DefaultReturn(_) => astconv.ty_infer(None, decl.output.span()),
|
||||
hir::DefaultReturn(_) => match body.generator_kind {
|
||||
// In the case of the async block that we create for a function body,
|
||||
// we expect the return type of the block to match that of the enclosing
|
||||
// function.
|
||||
Some(hir::GeneratorKind::Async(hir::AsyncGeneratorKind::Fn)) => {
|
||||
debug!("supplied_sig_of_closure: closure is async fn body");
|
||||
self.deduce_future_output_from_obligations(expr_def_id)
|
||||
}
|
||||
|
||||
_ => astconv.ty_infer(None, decl.output.span()),
|
||||
}
|
||||
};
|
||||
|
||||
let result = ty::Binder::bind(self.tcx.mk_fn_sig(
|
||||
|
@ -620,6 +637,117 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
result
|
||||
}
|
||||
|
||||
/// Invoked when we are translating the generator that results
|
||||
/// from desugaring an `async fn`. Returns the "sugared" return
|
||||
/// type of the `async fn` -- that is, the return type that the
|
||||
/// user specified. The "desugared" return type is a `impl
|
||||
/// Future<Output = T>`, so we do this by searching through the
|
||||
/// obligations to extract the `T`.
|
||||
fn deduce_future_output_from_obligations(
|
||||
&self,
|
||||
expr_def_id: DefId,
|
||||
) -> Ty<'tcx> {
|
||||
debug!("deduce_future_output_from_obligations(expr_def_id={:?})", expr_def_id);
|
||||
|
||||
let ret_coercion =
|
||||
self.ret_coercion
|
||||
.as_ref()
|
||||
.unwrap_or_else(|| span_bug!(
|
||||
self.tcx.def_span(expr_def_id),
|
||||
"async fn generator outside of a fn"
|
||||
));
|
||||
|
||||
// In practice, the return type of the surrounding function is
|
||||
// always a (not yet resolved) inference variable, because it
|
||||
// is the hidden type for an `impl Trait` that we are going to
|
||||
// be inferring.
|
||||
let ret_ty = ret_coercion.borrow().expected_ty();
|
||||
let ret_ty = self.inh.infcx.shallow_resolve(ret_ty);
|
||||
let ret_vid = match ret_ty.kind {
|
||||
ty::Infer(ty::TyVar(ret_vid)) => ret_vid,
|
||||
_ => {
|
||||
span_bug!(
|
||||
self.tcx.def_span(expr_def_id),
|
||||
"async fn generator return type not an inference variable"
|
||||
)
|
||||
}
|
||||
};
|
||||
|
||||
// Search for a pending obligation like
|
||||
//
|
||||
// `<R as Future>::Output = T`
|
||||
//
|
||||
// where R is the return type we are expecting. This type `T`
|
||||
// will be our output.
|
||||
let output_ty = self.obligations_for_self_ty(ret_vid)
|
||||
.find_map(|(_, obligation)| {
|
||||
if let ty::Predicate::Projection(ref proj_predicate) = obligation.predicate {
|
||||
self.deduce_future_output_from_projection(
|
||||
obligation.cause.span,
|
||||
proj_predicate
|
||||
)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
debug!("deduce_future_output_from_obligations: output_ty={:?}", output_ty);
|
||||
output_ty
|
||||
}
|
||||
|
||||
/// Given a projection like
|
||||
///
|
||||
/// `<X as Future>::Output = T`
|
||||
///
|
||||
/// where `X` is some type that has no late-bound regions, returns
|
||||
/// `Some(T)`. If the projection is for some other trait, returns
|
||||
/// `None`.
|
||||
fn deduce_future_output_from_projection(
|
||||
&self,
|
||||
cause_span: Span,
|
||||
predicate: &ty::PolyProjectionPredicate<'tcx>,
|
||||
) -> Option<Ty<'tcx>> {
|
||||
debug!("deduce_future_output_from_projection(predicate={:?})", predicate);
|
||||
|
||||
// We do not expect any bound regions in our predicate, so
|
||||
// skip past the bound vars.
|
||||
let predicate = match predicate.no_bound_vars() {
|
||||
Some(p) => p,
|
||||
None => {
|
||||
debug!("deduce_future_output_from_projection: has late-bound regions");
|
||||
return None;
|
||||
}
|
||||
};
|
||||
|
||||
// Check that this is a projection from the `Future` trait.
|
||||
let trait_ref = predicate.projection_ty.trait_ref(self.tcx);
|
||||
let future_trait = self.tcx.lang_items().future_trait().unwrap();
|
||||
if trait_ref.def_id != future_trait {
|
||||
debug!("deduce_future_output_from_projection: not a future");
|
||||
return None;
|
||||
}
|
||||
|
||||
// The `Future` trait has only one associted item, `Output`,
|
||||
// so check that this is what we see.
|
||||
let output_assoc_item = self.tcx.associated_items(future_trait).nth(0).unwrap().def_id;
|
||||
if output_assoc_item != predicate.projection_ty.item_def_id {
|
||||
span_bug!(
|
||||
cause_span,
|
||||
"projecting associated item `{:?}` from future, which is not Output `{:?}`",
|
||||
predicate.projection_ty.item_def_id,
|
||||
output_assoc_item,
|
||||
);
|
||||
}
|
||||
|
||||
// Extract the type from the projection. Note that there can
|
||||
// be no bound variables in this type because the "self type"
|
||||
// does not have any regions in it.
|
||||
let output_ty = self.resolve_vars_if_possible(&predicate.ty);
|
||||
debug!("deduce_future_output_from_projection: output_ty={:?}", output_ty);
|
||||
Some(output_ty)
|
||||
}
|
||||
|
||||
/// Converts the types that the user supplied, in case that doing
|
||||
/// so should yield an error, but returns back a signature where
|
||||
/// all parameters are of type `TyErr`.
|
||||
|
|
|
@ -55,7 +55,7 @@ impl<'a, 'tcx> InteriorVisitor<'a, 'tcx> {
|
|||
expr_and_pat_count: 0,
|
||||
source: match self.kind { // Guess based on the kind of the current generator.
|
||||
hir::GeneratorKind::Gen => hir::YieldSource::Yield,
|
||||
hir::GeneratorKind::Async => hir::YieldSource::Await,
|
||||
hir::GeneratorKind::Async(_) => hir::YieldSource::Await,
|
||||
},
|
||||
}));
|
||||
|
||||
|
|
|
@ -562,7 +562,19 @@ pub struct FnCtxt<'a, 'tcx> {
|
|||
// if type checking is run in parallel.
|
||||
err_count_on_creation: usize,
|
||||
|
||||
/// If `Some`, this stores coercion information for returned
|
||||
/// expressions. If `None`, this is in a context where return is
|
||||
/// inappropriate, such as a const expression.
|
||||
///
|
||||
/// This is a `RefCell<DynamicCoerceMany>`, which means that we
|
||||
/// can track all the return expressions and then use them to
|
||||
/// compute a useful coercion from the set, similar to a match
|
||||
/// expression or other branching context. You can use methods
|
||||
/// like `expected_ty` to access the declared return type (if
|
||||
/// any).
|
||||
ret_coercion: Option<RefCell<DynamicCoerceMany<'tcx>>>,
|
||||
|
||||
/// First span of a return site that we find. Used in error messages.
|
||||
ret_coercion_span: RefCell<Option<Span>>,
|
||||
|
||||
yield_ty: Option<Ty<'tcx>>,
|
||||
|
@ -4534,7 +4546,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
let item_id = self.tcx().hir().get_parent_node(self.body_id);
|
||||
if let Some(body_id) = self.tcx().hir().maybe_body_owned_by(item_id) {
|
||||
let body = self.tcx().hir().body(body_id);
|
||||
if let Some(hir::GeneratorKind::Async) = body.generator_kind {
|
||||
if let Some(hir::GeneratorKind::Async(_)) = body.generator_kind {
|
||||
let sp = expr.span;
|
||||
// Check for `Future` implementations by constructing a predicate to
|
||||
// prove: `<T as Future>::Output == U`
|
||||
|
|
|
@ -20,7 +20,7 @@ fn return_targets_async_block_not_fn() -> u8 {
|
|||
}
|
||||
|
||||
async fn return_targets_async_block_not_async_fn() -> u8 {
|
||||
//~^ ERROR type mismatch resolving
|
||||
//~^ ERROR mismatched types
|
||||
let block = async {
|
||||
return 0u8;
|
||||
};
|
||||
|
|
|
@ -39,6 +39,22 @@ LL | let _: &dyn Future<Output = ()> = █
|
|||
found type `()`
|
||||
= note: required for the cast to the object type `dyn std::future::Future<Output = ()>`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/async-block-control-flow-static-semantics.rs:22:58
|
||||
|
|
||||
LL | async fn return_targets_async_block_not_async_fn() -> u8 {
|
||||
| __________________________________________________________^
|
||||
LL | |
|
||||
LL | | let block = async {
|
||||
LL | | return 0u8;
|
||||
... |
|
||||
LL | |
|
||||
LL | | }
|
||||
| |_^ expected u8, found ()
|
||||
|
|
||||
= note: expected type `u8`
|
||||
found type `()`
|
||||
|
||||
error[E0271]: type mismatch resolving `<impl std::future::Future as std::future::Future>::Output == ()`
|
||||
--> $DIR/async-block-control-flow-static-semantics.rs:27:39
|
||||
|
|
||||
|
@ -49,16 +65,6 @@ LL | let _: &dyn Future<Output = ()> = █
|
|||
found type `()`
|
||||
= note: required for the cast to the object type `dyn std::future::Future<Output = ()>`
|
||||
|
||||
error[E0271]: type mismatch resolving `<impl std::future::Future as std::future::Future>::Output == u8`
|
||||
--> $DIR/async-block-control-flow-static-semantics.rs:22:55
|
||||
|
|
||||
LL | async fn return_targets_async_block_not_async_fn() -> u8 {
|
||||
| ^^ expected (), found u8
|
||||
|
|
||||
= note: expected type `()`
|
||||
found type `u8`
|
||||
= note: the return type of a function must have a statically known size
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/async-block-control-flow-static-semantics.rs:48:44
|
||||
|
|
||||
|
|
|
@ -9,7 +9,7 @@ fn get_future() -> impl Future<Output = ()> {
|
|||
}
|
||||
|
||||
async fn foo() {
|
||||
let a; //~ ERROR type inside `async` object must be known in this context
|
||||
let a; //~ ERROR type inside `async fn` body must be known in this context
|
||||
get_future().await;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
error[E0698]: type inside `async` object must be known in this context
|
||||
error[E0698]: type inside `async fn` body must be known in this context
|
||||
--> $DIR/async-error-span.rs:12:9
|
||||
|
|
||||
LL | let a;
|
||||
| ^ cannot infer type
|
||||
|
|
||||
note: the type is part of the `async` object because of this `await`
|
||||
note: the type is part of the `async fn` body because of this `await`
|
||||
--> $DIR/async-error-span.rs:13:5
|
||||
|
|
||||
LL | get_future().await;
|
||||
|
|
|
@ -9,9 +9,9 @@ trait Foo {}
|
|||
impl Xyz {
|
||||
async fn do_sth<'a>(
|
||||
&'a self, foo: &dyn Foo
|
||||
) -> &dyn Foo //~ ERROR lifetime mismatch
|
||||
) -> &dyn Foo
|
||||
{
|
||||
foo
|
||||
foo //~ ERROR lifetime mismatch
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/issue-63388-1.rs:12:10
|
||||
--> $DIR/issue-63388-1.rs:14:9
|
||||
|
|
||||
LL | &'a self, foo: &dyn Foo
|
||||
| -------- this parameter and the return type are declared with different lifetimes...
|
||||
LL | ) -> &dyn Foo
|
||||
| ^^^^^^^^
|
||||
| |
|
||||
| ...but data from `foo` is returned here
|
||||
| --------
|
||||
LL | {
|
||||
LL | foo
|
||||
| ^^^ ...but data from `foo` is returned here
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -11,8 +11,9 @@ error: cannot infer an appropriate lifetime
|
|||
|
|
||||
LL | foo: &dyn Foo, bar: &'a dyn Foo
|
||||
| ^^^ ...but this borrow...
|
||||
LL | ) -> &dyn Foo
|
||||
| -------- this return type evaluates to the `'static` lifetime...
|
||||
...
|
||||
LL | foo
|
||||
| --- this return type evaluates to the `'static` lifetime...
|
||||
|
|
||||
note: ...can't outlive the lifetime '_ as defined on the method body at 11:14
|
||||
--> $DIR/issue-63388-2.rs:11:14
|
||||
|
@ -21,8 +22,8 @@ LL | foo: &dyn Foo, bar: &'a dyn Foo
|
|||
| ^
|
||||
help: you can add a constraint to the return type to make it last less than `'static` and match the lifetime '_ as defined on the method body at 11:14
|
||||
|
|
||||
LL | ) -> &dyn Foo + '_
|
||||
| ^^^^^^^^^^^^^
|
||||
LL | foo + '_
|
||||
|
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
// Check that we apply unsizing coercions based on the return type.
|
||||
//
|
||||
// Also serves as a regression test for #60424.
|
||||
//
|
||||
// edition:2018
|
||||
// check-pass
|
||||
|
||||
#![allow(warnings)]
|
||||
|
||||
use std::fmt::Debug;
|
||||
|
||||
const TMP: u32 = 22;
|
||||
|
||||
// Coerce from `&u32` to `*const u32`
|
||||
fn raw_pointer_coercion() {
|
||||
fn sync_example() -> *const u32 {
|
||||
&TMP
|
||||
}
|
||||
|
||||
async fn async_example() -> *const u32 {
|
||||
&TMP
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
|
@ -0,0 +1,45 @@
|
|||
// Check that we apply unsizing coercions based on the return type.
|
||||
//
|
||||
// Also serves as a regression test for #60424.
|
||||
//
|
||||
// edition:2018
|
||||
// check-pass
|
||||
|
||||
#![allow(warnings)]
|
||||
|
||||
use std::fmt::Debug;
|
||||
|
||||
// Unsizing coercion from `Box<&'static str>` to `Box<dyn Debug>`.
|
||||
fn unsize_trait_coercion() {
|
||||
fn sync_example() -> Box<dyn Debug> {
|
||||
Box::new("asdf")
|
||||
}
|
||||
|
||||
async fn async_example() -> Box<dyn Debug> {
|
||||
Box::new("asdf")
|
||||
}
|
||||
}
|
||||
|
||||
// Unsizing coercion from `Box<[u32; N]>` to `Box<[32]>`.
|
||||
fn unsize_slice_coercion() {
|
||||
fn sync_example() -> Box<[u32]> {
|
||||
Box::new([0])
|
||||
}
|
||||
|
||||
async fn async_example() -> Box<[u32]> {
|
||||
Box::new([0])
|
||||
}
|
||||
}
|
||||
|
||||
// Unsizing coercion from `&[&str; 1]` to `&[&str]`
|
||||
fn unsize_slice_str_coercion() {
|
||||
fn sync_example() -> &'static [&'static str] {
|
||||
&["hi"]
|
||||
}
|
||||
|
||||
async fn async_example() -> &'static [&'static str] {
|
||||
&["hi"]
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
|
@ -7,9 +7,9 @@ async fn bar<T>() -> () {}
|
|||
|
||||
async fn foo() {
|
||||
bar().await;
|
||||
//~^ ERROR type inside `async` object must be known in this context
|
||||
//~^ ERROR type inside `async fn` body must be known in this context
|
||||
//~| NOTE cannot infer type for `T`
|
||||
//~| NOTE the type is part of the `async` object because of this `await`
|
||||
//~| NOTE the type is part of the `async fn` body because of this `await`
|
||||
//~| NOTE in this expansion of desugaring of `await`
|
||||
}
|
||||
fn main() {}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
error[E0698]: type inside `async` object must be known in this context
|
||||
error[E0698]: type inside `async fn` body must be known in this context
|
||||
--> $DIR/unresolved_type_param.rs:9:5
|
||||
|
|
||||
LL | bar().await;
|
||||
| ^^^ cannot infer type for `T`
|
||||
|
|
||||
note: the type is part of the `async` object because of this `await`
|
||||
note: the type is part of the `async fn` body because of this `await`
|
||||
--> $DIR/unresolved_type_param.rs:9:5
|
||||
|
|
||||
LL | bar().await;
|
||||
|
|
|
@ -7,19 +7,19 @@ LL | async fn a(self: Pin<&Foo>, f: &Foo) -> &Foo { f }
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:8:50
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:8:52
|
||||
|
|
||||
LL | async fn a(self: Pin<&Foo>, f: &Foo) -> &Foo { f }
|
||||
| - ^^^^^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
| - ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:11:73
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:11:75
|
||||
|
|
||||
LL | async fn c(self: Pin<&Self>, f: &Foo, g: &Foo) -> (Pin<&Foo>, &Foo) { (self, f) }
|
||||
| - ^^^^^^^^^^^^^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
| - ^^^^^^^^^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
|
@ -33,12 +33,11 @@ LL | async fn bar<'a>(self: Alias<&Self>, arg: &'a ()) -> &() { arg }
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:17:62
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:17:64
|
||||
|
|
||||
LL | async fn bar<'a>(self: Alias<&Self>, arg: &'a ()) -> &() { arg }
|
||||
| -- - ^^^^^^^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'a`
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| -- - lifetime `'_` defined here ^^^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'a`
|
||||
| |
|
||||
| lifetime `'a` defined here
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
|
|
@ -1,28 +1,25 @@
|
|||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:8:45
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:8:52
|
||||
|
|
||||
LL | async fn a(self: Pin<&Foo>, f: &Foo) -> &Foo { f }
|
||||
| ---- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ---- ---- ^ ...but data from `f` is returned here
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:11:55
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:11:82
|
||||
|
|
||||
LL | async fn c(self: Pin<&Self>, f: &Foo, g: &Foo) -> (Pin<&Foo>, &Foo) { (self, f) }
|
||||
| ----- ^^^^^^^^^^^^^^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----------------- ^ ...but data from `f` is returned here
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:17:58
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:17:64
|
||||
|
|
||||
LL | async fn bar<'a>(self: Alias<&Self>, arg: &'a ()) -> &() { arg }
|
||||
| ----- ^^^
|
||||
| | |
|
||||
| | ...but data from `arg` is returned here
|
||||
| ----- --- ^^^ ...but data from `arg` is returned here
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
|
|
@ -7,16 +7,15 @@ LL | async fn ref_self(&self, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#23r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/lt-ref-self-async.rs:13:47
|
||||
--> $DIR/lt-ref-self-async.rs:14:9
|
||||
|
|
||||
LL | async fn ref_self(&self, f: &u32) -> &u32 {
|
||||
| _______________________-_______________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn ref_self(&self, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/lt-ref-self-async.rs:19:48
|
||||
|
@ -27,16 +26,15 @@ LL | async fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#23r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/lt-ref-self-async.rs:19:53
|
||||
--> $DIR/lt-ref-self-async.rs:20:9
|
||||
|
|
||||
LL | async fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
||||
| _____________________________-_______________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/lt-ref-self-async.rs:23:57
|
||||
|
@ -47,16 +45,15 @@ LL | async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#23r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/lt-ref-self-async.rs:23:62
|
||||
--> $DIR/lt-ref-self-async.rs:24:9
|
||||
|
|
||||
LL | async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
||||
| _____________________________________-________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/lt-ref-self-async.rs:27:57
|
||||
|
@ -67,16 +64,15 @@ LL | async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#23r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/lt-ref-self-async.rs:27:62
|
||||
--> $DIR/lt-ref-self-async.rs:28:9
|
||||
|
|
||||
LL | async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
||||
| _____________________________________-________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/lt-ref-self-async.rs:31:66
|
||||
|
@ -87,16 +83,15 @@ LL | async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#23r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/lt-ref-self-async.rs:31:71
|
||||
--> $DIR/lt-ref-self-async.rs:32:9
|
||||
|
|
||||
LL | async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
||||
| _____________________________________________-_________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/lt-ref-self-async.rs:35:62
|
||||
|
@ -107,16 +102,15 @@ LL | async fn box_pin_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#23r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/lt-ref-self-async.rs:35:67
|
||||
--> $DIR/lt-ref-self-async.rs:36:9
|
||||
|
|
||||
LL | async fn box_pin_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
||||
| _________________________________________-_________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_pin_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error: aborting due to 12 previous errors
|
||||
|
||||
|
|
|
@ -11,29 +11,29 @@ impl<'a> Struct<'a> {
|
|||
// Test using `&self` sugar:
|
||||
|
||||
async fn ref_self(&self, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
// Test using `&Self` explicitly:
|
||||
|
||||
async fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_pin_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,56 +1,62 @@
|
|||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/lt-ref-self-async.rs:13:42
|
||||
--> $DIR/lt-ref-self-async.rs:14:9
|
||||
|
|
||||
LL | async fn ref_self(&self, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/lt-ref-self-async.rs:19:48
|
||||
--> $DIR/lt-ref-self-async.rs:20:9
|
||||
|
|
||||
LL | async fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/lt-ref-self-async.rs:23:57
|
||||
--> $DIR/lt-ref-self-async.rs:24:9
|
||||
|
|
||||
LL | async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/lt-ref-self-async.rs:27:57
|
||||
--> $DIR/lt-ref-self-async.rs:28:9
|
||||
|
|
||||
LL | async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/lt-ref-self-async.rs:31:66
|
||||
--> $DIR/lt-ref-self-async.rs:32:9
|
||||
|
|
||||
LL | async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/lt-ref-self-async.rs:35:62
|
||||
--> $DIR/lt-ref-self-async.rs:36:9
|
||||
|
|
||||
LL | async fn box_pin_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
|
|
|
@ -7,16 +7,15 @@ LL | async fn ref_self(&mut self, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-self-async.rs:13:51
|
||||
--> $DIR/ref-mut-self-async.rs:14:9
|
||||
|
|
||||
LL | async fn ref_self(&mut self, f: &u32) -> &u32 {
|
||||
| _______________________-___________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn ref_self(&mut self, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-mut-self-async.rs:19:52
|
||||
|
@ -27,16 +26,15 @@ LL | async fn ref_Self(self: &mut Self, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-self-async.rs:19:57
|
||||
--> $DIR/ref-mut-self-async.rs:20:9
|
||||
|
|
||||
LL | async fn ref_Self(self: &mut Self, f: &u32) -> &u32 {
|
||||
| _____________________________-___________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn ref_Self(self: &mut Self, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-mut-self-async.rs:23:61
|
||||
|
@ -47,16 +45,15 @@ LL | async fn box_ref_Self(self: Box<&mut Self>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-self-async.rs:23:66
|
||||
--> $DIR/ref-mut-self-async.rs:24:9
|
||||
|
|
||||
LL | async fn box_ref_Self(self: Box<&mut Self>, f: &u32) -> &u32 {
|
||||
| _____________________________________-____________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_ref_Self(self: Box<&mut Self>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-mut-self-async.rs:27:61
|
||||
|
@ -67,16 +64,15 @@ LL | async fn pin_ref_Self(self: Pin<&mut Self>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-self-async.rs:27:66
|
||||
--> $DIR/ref-mut-self-async.rs:28:9
|
||||
|
|
||||
LL | async fn pin_ref_Self(self: Pin<&mut Self>, f: &u32) -> &u32 {
|
||||
| _____________________________________-____________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn pin_ref_Self(self: Pin<&mut Self>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-mut-self-async.rs:31:70
|
||||
|
@ -87,16 +83,15 @@ LL | async fn box_box_ref_Self(self: Box<Box<&mut Self>>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-self-async.rs:31:75
|
||||
--> $DIR/ref-mut-self-async.rs:32:9
|
||||
|
|
||||
LL | async fn box_box_ref_Self(self: Box<Box<&mut Self>>, f: &u32) -> &u32 {
|
||||
| _____________________________________________-_____________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_box_ref_Self(self: Box<Box<&mut Self>>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-mut-self-async.rs:35:70
|
||||
|
@ -107,16 +102,15 @@ LL | async fn box_pin_ref_Self(self: Box<Pin<&mut Self>>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-self-async.rs:35:75
|
||||
--> $DIR/ref-mut-self-async.rs:36:9
|
||||
|
|
||||
LL | async fn box_pin_ref_Self(self: Box<Pin<&mut Self>>, f: &u32) -> &u32 {
|
||||
| _____________________________________________-_____________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_pin_ref_Self(self: Box<Pin<&mut Self>>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error: aborting due to 12 previous errors
|
||||
|
||||
|
|
|
@ -10,30 +10,30 @@ struct Struct { }
|
|||
impl Struct {
|
||||
// Test using `&mut self` sugar:
|
||||
|
||||
async fn ref_self(&mut self, f: &u32) -> &u32 { //~ ERROR lifetime mismatch
|
||||
f
|
||||
async fn ref_self(&mut self, f: &u32) -> &u32 {
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
// Test using `&mut Self` explicitly:
|
||||
|
||||
async fn ref_Self(self: &mut Self, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_ref_Self(self: Box<&mut Self>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn pin_ref_Self(self: Pin<&mut Self>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_box_ref_Self(self: Box<Box<&mut Self>>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_pin_ref_Self(self: Box<Pin<&mut Self>>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,56 +1,62 @@
|
|||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-self-async.rs:13:46
|
||||
--> $DIR/ref-mut-self-async.rs:14:9
|
||||
|
|
||||
LL | async fn ref_self(&mut self, f: &u32) -> &u32 {
|
||||
| --------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| --------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-self-async.rs:19:52
|
||||
--> $DIR/ref-mut-self-async.rs:20:9
|
||||
|
|
||||
LL | async fn ref_Self(self: &mut Self, f: &u32) -> &u32 {
|
||||
| --------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| --------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-self-async.rs:23:61
|
||||
--> $DIR/ref-mut-self-async.rs:24:9
|
||||
|
|
||||
LL | async fn box_ref_Self(self: Box<&mut Self>, f: &u32) -> &u32 {
|
||||
| --------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| --------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-self-async.rs:27:61
|
||||
--> $DIR/ref-mut-self-async.rs:28:9
|
||||
|
|
||||
LL | async fn pin_ref_Self(self: Pin<&mut Self>, f: &u32) -> &u32 {
|
||||
| --------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| --------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-self-async.rs:31:70
|
||||
--> $DIR/ref-mut-self-async.rs:32:9
|
||||
|
|
||||
LL | async fn box_box_ref_Self(self: Box<Box<&mut Self>>, f: &u32) -> &u32 {
|
||||
| --------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| --------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-self-async.rs:35:70
|
||||
--> $DIR/ref-mut-self-async.rs:36:9
|
||||
|
|
||||
LL | async fn box_pin_ref_Self(self: Box<Pin<&mut Self>>, f: &u32) -> &u32 {
|
||||
| --------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| --------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
|
|
|
@ -7,16 +7,15 @@ LL | async fn ref_Struct(self: &mut Struct, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-struct-async.rs:13:61
|
||||
--> $DIR/ref-mut-struct-async.rs:14:9
|
||||
|
|
||||
LL | async fn ref_Struct(self: &mut Struct, f: &u32) -> &u32 {
|
||||
| _______________________________-_____________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn ref_Struct(self: &mut Struct, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-mut-struct-async.rs:17:65
|
||||
|
@ -27,16 +26,15 @@ LL | async fn box_ref_Struct(self: Box<&mut Struct>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-struct-async.rs:17:70
|
||||
--> $DIR/ref-mut-struct-async.rs:18:9
|
||||
|
|
||||
LL | async fn box_ref_Struct(self: Box<&mut Struct>, f: &u32) -> &u32 {
|
||||
| _______________________________________-______________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_ref_Struct(self: Box<&mut Struct>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-mut-struct-async.rs:21:65
|
||||
|
@ -47,16 +45,15 @@ LL | async fn pin_ref_Struct(self: Pin<&mut Struct>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-struct-async.rs:21:70
|
||||
--> $DIR/ref-mut-struct-async.rs:22:9
|
||||
|
|
||||
LL | async fn pin_ref_Struct(self: Pin<&mut Struct>, f: &u32) -> &u32 {
|
||||
| _______________________________________-______________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn pin_ref_Struct(self: Pin<&mut Struct>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-mut-struct-async.rs:25:74
|
||||
|
@ -67,16 +64,15 @@ LL | async fn box_box_ref_Struct(self: Box<Box<&mut Struct>>, f: &u32) -> &u
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-struct-async.rs:25:79
|
||||
--> $DIR/ref-mut-struct-async.rs:26:9
|
||||
|
|
||||
LL | async fn box_box_ref_Struct(self: Box<Box<&mut Struct>>, f: &u32) -> &u32 {
|
||||
| _______________________________________________-_______________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_box_ref_Struct(self: Box<Box<&mut Struct>>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-mut-struct-async.rs:29:74
|
||||
|
@ -87,16 +83,15 @@ LL | async fn box_pin_ref_Struct(self: Box<Pin<&mut Struct>>, f: &u32) -> &u
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-mut-struct-async.rs:29:79
|
||||
--> $DIR/ref-mut-struct-async.rs:30:9
|
||||
|
|
||||
LL | async fn box_pin_ref_Struct(self: Box<Pin<&mut Struct>>, f: &u32) -> &u32 {
|
||||
| _______________________________________________-_______________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_pin_ref_Struct(self: Box<Pin<&mut Struct>>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
|
|
|
@ -11,23 +11,23 @@ impl Struct {
|
|||
// Test using `&mut Struct` explicitly:
|
||||
|
||||
async fn ref_Struct(self: &mut Struct, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_ref_Struct(self: Box<&mut Struct>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn pin_ref_Struct(self: Pin<&mut Struct>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_box_ref_Struct(self: Box<Box<&mut Struct>>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_pin_ref_Struct(self: Box<Pin<&mut Struct>>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,47 +1,52 @@
|
|||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-struct-async.rs:13:56
|
||||
--> $DIR/ref-mut-struct-async.rs:14:9
|
||||
|
|
||||
LL | async fn ref_Struct(self: &mut Struct, f: &u32) -> &u32 {
|
||||
| ----------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-struct-async.rs:17:65
|
||||
--> $DIR/ref-mut-struct-async.rs:18:9
|
||||
|
|
||||
LL | async fn box_ref_Struct(self: Box<&mut Struct>, f: &u32) -> &u32 {
|
||||
| ----------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-struct-async.rs:21:65
|
||||
--> $DIR/ref-mut-struct-async.rs:22:9
|
||||
|
|
||||
LL | async fn pin_ref_Struct(self: Pin<&mut Struct>, f: &u32) -> &u32 {
|
||||
| ----------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-struct-async.rs:25:74
|
||||
--> $DIR/ref-mut-struct-async.rs:26:9
|
||||
|
|
||||
LL | async fn box_box_ref_Struct(self: Box<Box<&mut Struct>>, f: &u32) -> &u32 {
|
||||
| ----------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-mut-struct-async.rs:29:74
|
||||
--> $DIR/ref-mut-struct-async.rs:30:9
|
||||
|
|
||||
LL | async fn box_pin_ref_Struct(self: Box<Pin<&mut Struct>>, f: &u32) -> &u32 {
|
||||
| ----------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
|
|
@ -7,16 +7,15 @@ LL | async fn ref_self(&self, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-self-async.rs:22:47
|
||||
--> $DIR/ref-self-async.rs:23:9
|
||||
|
|
||||
LL | async fn ref_self(&self, f: &u32) -> &u32 {
|
||||
| _______________________-_______________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn ref_self(&self, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-self-async.rs:28:48
|
||||
|
@ -27,16 +26,15 @@ LL | async fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-self-async.rs:28:53
|
||||
--> $DIR/ref-self-async.rs:29:9
|
||||
|
|
||||
LL | async fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
||||
| _____________________________-_______________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-self-async.rs:32:57
|
||||
|
@ -47,16 +45,15 @@ LL | async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-self-async.rs:32:62
|
||||
--> $DIR/ref-self-async.rs:33:9
|
||||
|
|
||||
LL | async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
||||
| _____________________________________-________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-self-async.rs:36:57
|
||||
|
@ -67,16 +64,15 @@ LL | async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-self-async.rs:36:62
|
||||
--> $DIR/ref-self-async.rs:37:9
|
||||
|
|
||||
LL | async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
||||
| _____________________________________-________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-self-async.rs:40:66
|
||||
|
@ -87,16 +83,15 @@ LL | async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-self-async.rs:40:71
|
||||
--> $DIR/ref-self-async.rs:41:9
|
||||
|
|
||||
LL | async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
||||
| _____________________________________________-_________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-self-async.rs:44:66
|
||||
|
@ -107,16 +102,15 @@ LL | async fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-self-async.rs:44:71
|
||||
--> $DIR/ref-self-async.rs:45:9
|
||||
|
|
||||
LL | async fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
||||
| _____________________________________________-_________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-self-async.rs:48:69
|
||||
|
@ -127,16 +121,15 @@ LL | async fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-self-async.rs:48:73
|
||||
--> $DIR/ref-self-async.rs:49:9
|
||||
|
|
||||
LL | async fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
|
||||
| ____________________________________________-____________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error: aborting due to 14 previous errors
|
||||
|
||||
|
|
|
@ -19,34 +19,34 @@ impl<T, P> Deref for Wrap<T, P> {
|
|||
impl Struct {
|
||||
// Test using `&self` sugar:
|
||||
|
||||
async fn ref_self(&self, f: &u32) -> &u32 { //~ ERROR lifetime mismatch
|
||||
f
|
||||
async fn ref_self(&self, f: &u32) -> &u32 {
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
// Test using `&Self` explicitly:
|
||||
|
||||
async fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,65 +1,72 @@
|
|||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self-async.rs:22:42
|
||||
--> $DIR/ref-self-async.rs:23:9
|
||||
|
|
||||
LL | async fn ref_self(&self, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self-async.rs:28:48
|
||||
--> $DIR/ref-self-async.rs:29:9
|
||||
|
|
||||
LL | async fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self-async.rs:32:57
|
||||
--> $DIR/ref-self-async.rs:33:9
|
||||
|
|
||||
LL | async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self-async.rs:36:57
|
||||
--> $DIR/ref-self-async.rs:37:9
|
||||
|
|
||||
LL | async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self-async.rs:40:66
|
||||
--> $DIR/ref-self-async.rs:41:9
|
||||
|
|
||||
LL | async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self-async.rs:44:66
|
||||
--> $DIR/ref-self-async.rs:45:9
|
||||
|
|
||||
LL | async fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
||||
| ----- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self-async.rs:48:69
|
||||
--> $DIR/ref-self-async.rs:49:9
|
||||
|
|
||||
LL | async fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
|
||||
| ----- ^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ----- ---
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
|
|
|
@ -7,16 +7,15 @@ LL | async fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-struct-async.rs:13:57
|
||||
--> $DIR/ref-struct-async.rs:14:9
|
||||
|
|
||||
LL | async fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
|
||||
| _______________________________-_________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-struct-async.rs:17:61
|
||||
|
@ -27,16 +26,15 @@ LL | async fn box_ref_Struct(self: Box<&Struct>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-struct-async.rs:17:66
|
||||
--> $DIR/ref-struct-async.rs:18:9
|
||||
|
|
||||
LL | async fn box_ref_Struct(self: Box<&Struct>, f: &u32) -> &u32 {
|
||||
| _______________________________________-__________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_ref_Struct(self: Box<&Struct>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-struct-async.rs:21:61
|
||||
|
@ -47,16 +45,15 @@ LL | async fn pin_ref_Struct(self: Pin<&Struct>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-struct-async.rs:21:66
|
||||
--> $DIR/ref-struct-async.rs:22:9
|
||||
|
|
||||
LL | async fn pin_ref_Struct(self: Pin<&Struct>, f: &u32) -> &u32 {
|
||||
| _______________________________________-__________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn pin_ref_Struct(self: Pin<&Struct>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-struct-async.rs:25:70
|
||||
|
@ -67,16 +64,15 @@ LL | async fn box_box_ref_Struct(self: Box<Box<&Struct>>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-struct-async.rs:25:75
|
||||
--> $DIR/ref-struct-async.rs:26:9
|
||||
|
|
||||
LL | async fn box_box_ref_Struct(self: Box<Box<&Struct>>, f: &u32) -> &u32 {
|
||||
| _______________________________________________-___________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_box_ref_Struct(self: Box<Box<&Struct>>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
|
||||
--> $DIR/ref-struct-async.rs:29:66
|
||||
|
@ -87,16 +83,15 @@ LL | async fn box_pin_Struct(self: Box<Pin<&Struct>>, f: &u32) -> &u32 {
|
|||
= note: hidden type `impl std::future::Future` captures lifetime '_#15r
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/ref-struct-async.rs:29:71
|
||||
--> $DIR/ref-struct-async.rs:30:9
|
||||
|
|
||||
LL | async fn box_pin_Struct(self: Box<Pin<&Struct>>, f: &u32) -> &u32 {
|
||||
| ___________________________________________-___________________________^
|
||||
| | |
|
||||
| | lifetime `'_` defined here
|
||||
| | lifetime `'_` defined here
|
||||
LL | | f
|
||||
LL | | }
|
||||
| |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
LL | async fn box_pin_Struct(self: Box<Pin<&Struct>>, f: &u32) -> &u32 {
|
||||
| -
|
||||
| |
|
||||
| lifetime `'_` defined here
|
||||
| lifetime `'_` defined here
|
||||
LL | f
|
||||
| ^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
|
|
|
@ -11,23 +11,23 @@ impl Struct {
|
|||
// Test using `&Struct` explicitly:
|
||||
|
||||
async fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_ref_Struct(self: Box<&Struct>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn pin_ref_Struct(self: Pin<&Struct>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_box_ref_Struct(self: Box<Box<&Struct>>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
async fn box_pin_Struct(self: Box<Pin<&Struct>>, f: &u32) -> &u32 {
|
||||
f //~^ ERROR lifetime mismatch
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,47 +1,52 @@
|
|||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-struct-async.rs:13:52
|
||||
--> $DIR/ref-struct-async.rs:14:9
|
||||
|
|
||||
LL | async fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
|
||||
| ------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-struct-async.rs:17:61
|
||||
--> $DIR/ref-struct-async.rs:18:9
|
||||
|
|
||||
LL | async fn box_ref_Struct(self: Box<&Struct>, f: &u32) -> &u32 {
|
||||
| ------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-struct-async.rs:21:61
|
||||
--> $DIR/ref-struct-async.rs:22:9
|
||||
|
|
||||
LL | async fn pin_ref_Struct(self: Pin<&Struct>, f: &u32) -> &u32 {
|
||||
| ------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-struct-async.rs:25:70
|
||||
--> $DIR/ref-struct-async.rs:26:9
|
||||
|
|
||||
LL | async fn box_box_ref_Struct(self: Box<Box<&Struct>>, f: &u32) -> &u32 {
|
||||
| ------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-struct-async.rs:29:66
|
||||
--> $DIR/ref-struct-async.rs:30:9
|
||||
|
|
||||
LL | async fn box_pin_Struct(self: Box<Pin<&Struct>>, f: &u32) -> &u32 {
|
||||
| ------- ^^^^
|
||||
| | |
|
||||
| | ...but data from `f` is returned here
|
||||
| ------- ----
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
|
Loading…
Reference in New Issue