Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nightly async fn ICE #65159

Closed
DutchGhost opened this issue Oct 6, 2019 · 3 comments · Fixed by #65235

Comments

@DutchGhost
Copy link
Contributor

commented Oct 6, 2019

The following ICE's in nightly:

async fn copy() -> Result<()>
{
    Ok(())
}
Backtrace:
  Compiling playground v0.0.1 (/playground)
error[E0107]: wrong number of type arguments: expected 2, found 1
 --> src/lib.rs:1:20
  |
1 | async fn copy() -> Result<()>
  |                    ^^^^^^^^^^ expected 2 type arguments

thread 'rustc' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:378:21
stack backtrace:
   0: backtrace::backtrace::libunwind::trace
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.37/src/backtrace/libunwind.rs:88
   1: backtrace::backtrace::trace_unsynchronized
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.37/src/backtrace/mod.rs:66
   2: std::sys_common::backtrace::_print_fmt
             at src/libstd/sys_common/backtrace.rs:76
   3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
             at src/libstd/sys_common/backtrace.rs:60
   4: core::fmt::write
             at src/libcore/fmt/mod.rs:1028
   5: std::io::Write::write_fmt
             at src/libstd/io/mod.rs:1412
   6: std::sys_common::backtrace::_print
             at src/libstd/sys_common/backtrace.rs:64
   7: std::sys_common::backtrace::print
             at src/libstd/sys_common/backtrace.rs:49
   8: std::panicking::default_hook::{{closure}}
             at src/libstd/panicking.rs:196
   9: std::panicking::default_hook
             at src/libstd/panicking.rs:210
  10: rustc_driver::report_ice
  11: std::panicking::rust_panic_with_hook
             at src/libstd/panicking.rs:477
  12: std::panicking::continue_panic_fmt
             at src/libstd/panicking.rs:380
  13: rust_begin_unwind
             at src/libstd/panicking.rs:307
  14: core::panicking::panic_fmt
             at src/libcore/panicking.rs:84
  15: core::panicking::panic
             at src/libcore/panicking.rs:49
  16: rustc_typeck::check::closure::<impl rustc_typeck::check::FnCtxt>::supplied_sig_of_closure
  17: rustc_typeck::check::closure::<impl rustc_typeck::check::FnCtxt>::check_expr_closure
  18: rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind
  19: rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation_and_needs
  20: rustc_typeck::check::FnCtxt::check_argument_types
  21: rustc_typeck::check::callee::<impl rustc_typeck::check::FnCtxt>::confirm_builtin_call
  22: rustc_typeck::check::callee::<impl rustc_typeck::check::FnCtxt>::check_call
  23: rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind
  24: rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation_and_needs
  25: rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_return_expr
  26: rustc_typeck::check::check_fn
  27: rustc::ty::context::GlobalCtxt::enter_local
  28: rustc_typeck::check::typeck_tables_of
  29: rustc::ty::query::__query_compute::typeck_tables_of
  30: rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::typeck_tables_of>::compute
  31: rustc::dep_graph::graph::DepGraph::with_task_impl
  32: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
  33: rustc::ty::query::__query_compute::typeck_tables_of
  34: rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::typeck_tables_of>::compute
  35: rustc::dep_graph::graph::DepGraph::with_task_impl
  36: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
  37: rustc_typeck::collect::checked_type_of
  38: rustc_typeck::collect::type_of
  39: rustc::ty::query::__query_compute::type_of
  40: rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::type_of>::compute
  41: rustc::dep_graph::graph::DepGraph::with_task_impl
  42: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
  43: rustc::hir::intravisit::walk_expr
  44: rustc::hir::intravisit::Visitor::visit_fn
  45: rustc::hir::intravisit::walk_item
  46: <rustc_typeck::collect::CollectItemTypesVisitor as rustc::hir::intravisit::Visitor>::visit_item
  47: rustc::hir::map::Map::visit_item_likes_in_module
  48: rustc_typeck::collect::collect_mod_item_types
  49: rustc::ty::query::__query_compute::collect_mod_item_types
  50: rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::collect_mod_item_types>::compute
  51: rustc::dep_graph::graph::DepGraph::with_task_impl
  52: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
  53: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::ensure_query
  54: rustc_typeck::check_crate::{{closure}}::{{closure}}
  55: rustc::util::common::time
  56: rustc_typeck::check_crate
  57: rustc_interface::passes::analysis
  58: rustc::ty::query::__query_compute::analysis
  59: rustc::dep_graph::graph::DepGraph::with_task_impl
  60: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
  61: rustc_interface::passes::BoxedGlobalCtxt::access::{{closure}}
  62: rustc_interface::passes::create_global_ctxt::{{closure}}
  63: rustc_interface::interface::run_compiler_in_existing_thread_pool
  64: std::thread::local::LocalKey<T>::with
  65: syntax::with_globals
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

error: internal compiler error: unexpected panic

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.40.0-nightly (787005079 2019-10-04) running on x86_64-unknown-linux-gnu

note: compiler flags: -C codegen-units=1 -C debuginfo=2 --crate-type lib

note: some of the compiler flags provided by cargo are hidden

Beta just errors normally, complaining that Result takes two parameters.

@csmoe

This comment has been minimized.

Copy link
Member

commented Oct 6, 2019

@nikomatsakis this commit seems the one to blame.

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();

tested the snippet above with RUSTC_LOG=rustc_typeck::check=debug, rustc complained:

error[E0391]: cycle detected when processing `foo::{{opaque}}#0`
 --> t.rs:3:19
  |
3 | async fn foo() -> std::result::Result<()> {
  |                   ^^^^^^^^^^^^^^^^^^^^^^^
  |
note: ...which requires processing `foo::{{opaque}}#0`...
 --> t.rs:3:19
  |
3 | async fn foo() -> std::result::Result<()> {
  |                   ^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires processing `foo::{{opaque}}#0`...
 --> t.rs:3:19
  |
3 | async fn foo() -> std::result::Result<()> {
  |                   ^^^^^^^^^^^^^^^^^^^^^^^
  = note: ...which again requires processing `foo::{{opaque}}#0`, completing the cycle
note: cycle used when processing `foo`
 --> t.rs:3:1
  |
3 | async fn foo() -> std::result::Result<()> {
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RUSTC_LOG=rustc_typeck::check=debug error[E0107]: wrong number of type arguments: expected 2, found 1 --> t.rs:3:19 | 3 | async fn foo() -> std::result::Result<()> { | ^^^^^^^^^^^^^^^^^^^^^^^ expected 2 type arguments

[DEBUG rustc_typeck::check] check_fn(sig=([]; c_variadic: false)->impl std::future::Future, fn_id=HirId { owner: DefIndex(13), local_id: 0 }, param_env=ParamEnv { caller_bounds: [], reveal: UserFacing, def_id: None })
[DEBUG rustc_typeck::check] instantiate_opaque_types_from_value(parent_def_id=DefId(0:13 ~ t[317d]::foo[0]), value=impl std::future::Future)
[DEBUG rustc_typeck::check] check_fn: declared_ret_ty: impl std::future::Future, revealed_ret_ty: _
[DEBUG rustc_typeck::check::expr] >> type-checking: expr=expr(HirId { owner: DefIndex(13), local_id: 16 }: ::std::future::from_generator(move || )) expected=ExpectHasType()
[DEBUG rustc_typeck::check::expr] check_expr_kind(expr=expr(HirId { owner: DefIndex(13), local_id: 16 }: ::std::future::from_generator(move || )), expected=ExpectHasType(
), needs=None)
[DEBUG rustc_typeck::check::expr] >> type-checking: expr=expr(HirId { owner: DefIndex(13), local_id: 15 }: ::std::future::from_generator) expected=NoExpectation
[DEBUG rustc_typeck::check::expr] check_expr_kind(expr=expr(HirId { owner: DefIndex(13), local_id: 15 }: ::std::future::from_generator), expected=NoExpectation, needs=None)
[DEBUG rustc_typeck::check] resolve_ty_and_res_ufcs: qpath=Resolved(None, path(::std::future::from_generator)) hir_id=HirId { owner: DefIndex(13), local_id: 15 } span=t.rs:3:43: 5:2
[DEBUG rustc_typeck::check] instantiate_value_path(segments=[PathSegment { ident: {{root}}#0, hir_id: Some(HirId { owner: DefIndex(13), local_id: 11 }), res: Some(Err), args: None, infer_args: true }, PathSegment { ident: std#0, hir_id: Some(HirId { owner: DefIndex(13), local_id: 12 }), res: Some(Def(Mod, DefId(1:0 ~ std[5025]))), args: None, infer_args: true }, PathSegment { ident: future#0, hir_id: Some(HirId { owner: DefIndex(13), local_id: 13 }), res: Some(Def(Mod, DefId(1:5334 ~ std[5025]::future[0]))), args: None, infer_args: true }, PathSegment { ident: from_generator#0, hir_id: Some(HirId { owner: DefIndex(13), local_id: 14 }), res: Some(Err), args: None, infer_args: true }], self_ty=None, res=Def(Fn, DefId(1:5348 ~ std[5025]::future[0]::from_generator[0])), hir_id=HirId { owner: DefIndex(13), local_id: 15 })
[DEBUG rustc_typeck::check] write_user_type_annotation_from_substs: hir_id=HirId { owner: DefIndex(13), local_id: 15 } def_id=DefId(1:5348 ~ std[5025]::future[0]::from_generator[0]) substs=[] user_self_ty=None in fcx 0x70000faed8d0
[DEBUG rustc_typeck::check] write_user_type_annotation_from_substs: canonicalized=Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: TypeOf(DefId(1:5348 ~ std[5025]::future[0]::from_generator[0]), UserSubsts { substs: [^0], user_self_ty: None }) }
[DEBUG rustc_typeck::check] write_user_type_annotation: hir_id=HirId { owner: DefIndex(13), local_id: 15 } canonical_user_type_annotation=Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: TypeOf(DefId(1:5348 ~ std[5025]::future[0]::from_generator[0]), UserSubsts { substs: [^0], user_self_ty: None }) } tag=0x70000faed8d0
[DEBUG rustc_typeck::check] write_user_type_annotation: skipping identity substs
[DEBUG rustc_typeck::check] instantiate_bounds(bounds=GenericPredicates { parent: None, predicates: [(Binder(TraitPredicate()), /Users/pengtangjin/oss/rust/src/libstd/future.rs:21:23: 21:24), (Binder(TraitPredicate()), /Users/pengtangjin/oss/rust/src/libstd/future.rs:21:26: 21:47), (Binder(ProjectionPredicate(ProjectionTy { substs: [T], item_def_id: DefId(2:1765 ~ core[6f86]::ops[0]::generator[0]::Generator[0]::Yield[0]) }, ())), /Users/pengtangjin/oss/rust/src/libstd/future.rs:21:36: 21:46)] }, substs=[
]) = InstantiatedPredicates { predicates: [Binder(TraitPredicate(<_ as std::marker::Sized>)), Binder(TraitPredicate(<_ as std::ops::Generator>)), Binder(ProjectionPredicate(ProjectionTy { substs: [], item_def_id: DefId(2:1765 ~ core[6f86]::ops[0]::generator[0]::Generator[0]::Yield[0]) }, ()))] }, [/Users/pengtangjin/oss/rust/src/libstd/future.rs:21:23: 21:24, /Users/pengtangjin/oss/rust/src/libstd/future.rs:21:26: 21:47, /Users/pengtangjin/oss/rust/src/libstd/future.rs:21:36: 21:46]
[DEBUG rustc_typeck::check] register_predicate(Obligation(predicate=Binder(TraitPredicate(<
as std::marker::Sized>)), depth=0))
[DEBUG rustc_typeck::check] register_predicate(Obligation(predicate=Binder(TraitPredicate(<_ as std::ops::Generator>)), depth=0))
[DEBUG rustc_typeck::check] register_predicate(Obligation(predicate=Binder(ProjectionPredicate(ProjectionTy { substs: [], item_def_id: DefId(2:1765 ~ core[6f86]::ops[0]::generator[0]::Generator[0]::Yield[0]) }, ())), depth=0))
[DEBUG rustc_typeck::check] instantiate_type_scheme(value=fn(
) -> impl std::future::Future {std::future::from_generator::<>}, substs=[]) = fn() -> impl std::future::Future {std::future::from_generator::<>}
[DEBUG rustc_typeck::check] instantiate_value_path: type of HirId { owner: DefIndex(13), local_id: 15 } is fn() -> impl std::future::Future {std::future::from_generator::<>}
[DEBUG rustc_typeck::check] write_substs(HirId { owner: DefIndex(13), local_id: 15 }, []) in fcx 0x70000faed8d0
[DEBUG rustc_typeck::check] register_predicate(Obligation(predicate=WellFormed(
), depth=0))
[DEBUG rustc_typeck::check] write_ty(HirId { owner: DefIndex(13), local_id: 15 }, fn() -> impl std::future::Future {std::future::from_generator::<>}) in fcx 0x70000faed8d0
[DEBUG rustc_typeck::check::expr] type of expr ::std::future::from_generator (hir_id=HirId { owner: DefIndex(13), local_id: 15 }) is...
[DEBUG rustc_typeck::check::expr] ... fn() -> impl std::future::Future {std::future::from_generator::<>}, expected is NoExpectation
[DEBUG rustc_typeck::check] resolve_type_vars_with_obligations(ty=fn() -> impl std::future::Future {std::future::from_generator::<>})
[DEBUG rustc_typeck::check] resolve_type_vars_with_obligations: ty=fn() -> impl std::future::Future {std::future::from_generator::<>}
[DEBUG rustc_typeck::check::autoderef] autoderef: steps=[], cur_ty=fn() -> impl std::future::Future {std::future::from_generator::<>}
[DEBUG rustc_typeck::check::autoderef] autoderef stage #0 is fn() -> impl std::future::Future {std::future::from_generator::<>}
[DEBUG rustc_typeck::check] resolve_type_vars_with_obligations(ty=fn() -> impl std::future::Future {std::future::from_generator::<>})
[DEBUG rustc_typeck::check] resolve_type_vars_with_obligations: ty=fn() -> impl std::future::Future {std::future::from_generator::<>}
[DEBUG rustc_typeck::check::callee] try_overloaded_call_step(call_expr=expr(HirId { owner: DefIndex(13), local_id: 16 }: ::std::future::from_generator(move || )), adjusted_ty=fn() -> impl std::future::Future {std::future::from_generator::<>})
[DEBUG rustc_typeck::check] apply_adjustments(expr=expr(HirId { owner: DefIndex(13), local_id: 15 }: ::std::future::from_generator), adj=[])
[DEBUG rustc_typeck::check] resolve_type_vars_with_obligations(ty=impl std::future::Future)
[DEBUG rustc_typeck::check] resolve_type_vars_with_obligations: ty=impl std::future::Future
[DEBUG rustc_typeck::check] expected_inputs_for_expected_output(formal=[] -> impl std::future::Future, expected=[] -> ExpectHasType())
[DEBUG rustc_typeck::check] register_predicate(Obligation(predicate=WellFormed(
), depth=0))
[DEBUG rustc_typeck::check] check_argument_types: formal_tys=[""]
[DEBUG rustc_typeck::check] check_closures=false
[DEBUG rustc_typeck::check] check_closures=true
[DEBUG rustc_typeck::check] checking the argument
[DEBUG rustc_typeck::check::expr] >> type-checking: expr=expr(HirId { owner: DefIndex(13), local_id: 10 }: move ||) expected=ExpectHasType(
)
[DEBUG rustc_typeck::check::expr] check_expr_kind(expr=expr(HirId { owner: DefIndex(13), local_id: 10 }: move ||), expected=ExpectHasType(), needs=None)
[DEBUG rustc_typeck::check::closure] check_expr_closure(expr=expr(HirId { owner: DefIndex(13), local_id: 10 }: move ||),expected=ExpectHasType(
))
[DEBUG rustc_typeck::check::closure] deduce_expectations_from_expected_type(expected_ty=)
[DEBUG rustc_typeck::check] obligations_for_self_ty: self_ty=
#1t ty_var_root=#1t pending_obligations=[Obligation(predicate=Binder(TraitPredicate(< as std::marker::Sized>)), depth=0), Obligation(predicate=Binder(TraitPredicate(<_ as std::ops::Generator>)), depth=0), Obligation(predicate=Binder(ProjectionPredicate(ProjectionTy { substs: [], item_def_id: DefId(2:1765 ~ core[6f86]::ops[0]::generator[0]::Generator[0]::Yield[0]) }, ())), depth=0), Obligation(predicate=WellFormed(), depth=0)]
[DEBUG rustc_typeck::check] self_type_matches_expected_vid(trait_ref=Binder(<_ as std::marker::Sized>), self_ty=, expected_vid=#1t)
[DEBUG rustc_typeck::check] self_type_matches_expected_vid - found_vid=#1t
[DEBUG rustc_typeck::check::closure] deduce_expectations_from_obligations: obligation.predicate=Binder(TraitPredicate(<
as std::marker::Sized>))
[DEBUG rustc_typeck::check] self_type_matches_expected_vid(trait_ref=Binder(<_ as std::ops::Generator>), self_ty=, expected_vid=#1t)
[DEBUG rustc_typeck::check] self_type_matches_expected_vid - found_vid=#1t
[DEBUG rustc_typeck::check::closure] deduce_expectations_from_obligations: obligation.predicate=Binder(TraitPredicate(<
as std::ops::Generator>))
[DEBUG rustc_typeck::check] self_type_matches_expected_vid(trait_ref=Binder(<_ as std::ops::Generator>), self_ty=, expected_vid=#1t)
[DEBUG rustc_typeck::check] self_type_matches_expected_vid - found_vid=#1t
[DEBUG rustc_typeck::check::closure] deduce_expectations_from_obligations: obligation.predicate=Binder(ProjectionPredicate(ProjectionTy { substs: [
], item_def_id: DefId(2:1765 ~ core[6f86]::ops[0]::generator[0]::Generator[0]::Yield[0]) }, ()))
[DEBUG rustc_typeck::check::closure] deduce_sig_from_projection(Binder(ProjectionPredicate(ProjectionTy { substs: [], item_def_id: DefId(2:1765 ~ core[6f86]::ops[0]::generator[0]::Generator[0]::Yield[0]) }, ())))
[DEBUG rustc_typeck::check::closure] deduce_sig_from_projection: not return assoc item of generator
[DEBUG rustc_typeck::check] obligations_for_self_ty: self_ty=
#1t ty_var_root=#1t pending_obligations=[Obligation(predicate=Binder(TraitPredicate(< as std::marker::Sized>)), depth=0), Obligation(predicate=Binder(TraitPredicate(<_ as std::ops::Generator>)), depth=0), Obligation(predicate=Binder(ProjectionPredicate(ProjectionTy { substs: [], item_def_id: DefId(2:1765 ~ core[6f86]::ops[0]::generator[0]::Generator[0]::Yield[0]) }, ())), depth=0), Obligation(predicate=WellFormed(), depth=0)]
[DEBUG rustc_typeck::check] self_type_matches_expected_vid(trait_ref=Binder(<_ as std::marker::Sized>), self_ty=, expected_vid=#1t)
[DEBUG rustc_typeck::check] self_type_matches_expected_vid - found_vid=#1t
[DEBUG rustc_typeck::check] self_type_matches_expected_vid(trait_ref=Binder(<
as std::ops::Generator>), self_ty=, expected_vid=#1t)
[DEBUG rustc_typeck::check] self_type_matches_expected_vid - found_vid=#1t
[DEBUG rustc_typeck::check] self_type_matches_expected_vid(trait_ref=Binder(<
as std::ops::Generator>), self_ty=, expected_vid=#1t)
[DEBUG rustc_typeck::check] self_type_matches_expected_vid - found_vid=#1t
[DEBUG rustc_typeck::check::closure] check_closure(opt_kind=None, expected_sig=None)
[DEBUG rustc_typeck::check::closure] sig_of_closure_no_expectation()
[DEBUG rustc_typeck::check::closure] supplied_sig_of_closure(decl=FnDecl { inputs: [], output: DefaultReturn(t.rs:3:43: 5:2), c_variadic: false, implicit_self: None }, body.generator_kind=Some(Async(Fn)))
[DEBUG rustc_typeck::check::closure] supplied_sig_of_closure: closure is async fn body
[DEBUG rustc_typeck::check::closure] deduce_future_output_from_obligations(expr_def_id=DefId(0:15 ~ t[317d]::foo[0]::{{closure}}[0]))
[DEBUG rustc_typeck::check] obligations_for_self_ty: self_ty=
#0t ty_var_root=#0t pending_obligations=[Obligation(predicate=Binder(TraitPredicate(< as std::marker::Sized>)), depth=0), Obligation(predicate=Binder(TraitPredicate(<_ as std::ops::Generator>)), depth=0), Obligation(predicate=Binder(ProjectionPredicate(ProjectionTy { substs: [], item_def_id: DefId(2:1765 ~ core[6f86]::ops[0]::generator[0]::Generator[0]::Yield[0]) }, ())), depth=0), Obligation(predicate=WellFormed(), depth=0)]
[DEBUG rustc_typeck::check] self_type_matches_expected_vid(trait_ref=Binder(<_ as std::marker::Sized>), self_ty=, expected_vid=#0t)
[DEBUG rustc_typeck::check] self_type_matches_expected_vid - found_vid=#1t
[DEBUG rustc_typeck::check] self_type_matches_expected_vid(trait_ref=Binder(<
as std::ops::Generator>), self_ty=, expected_vid=#0t)
[DEBUG rustc_typeck::check] self_type_matches_expected_vid - found_vid=#1t
[DEBUG rustc_typeck::check] self_type_matches_expected_vid(trait_ref=Binder(<
as std::ops::Generator>), self_ty=, expected_vid=#0t)
[DEBUG rustc_typeck::check] self_type_matches_expected_vid - found_vid=_#1t
thread 'rustc' panicked at 'called Option::unwrap() on a None value', src/libcore/option.rs:378:21

@nikomatsakis

This comment has been minimized.

Copy link
Contributor

commented Oct 8, 2019

I'll investigate tomorrow.

@nikomatsakis

This comment has been minimized.

Copy link
Contributor

commented Oct 9, 2019

Pending fix in #65235

Centril added a commit to Centril/rust that referenced this issue Oct 9, 2019
…eturn-ice, r=cramertj

don't assume we can *always* find a return type hint in async fn

In particular, we sometimes cannot if there is an earlier error.

Fixes rust-lang#65159

r? @cramertj, who reviewed the original PR
bors added a commit that referenced this issue Oct 15, 2019
…r=cramertj

don't assume we can *always* find a return type hint in async fn

In particular, we sometimes cannot if there is an earlier error.

Fixes #65159

r? @cramertj, who reviewed the original PR
Centril added a commit to Centril/rust that referenced this issue Oct 15, 2019
…eturn-ice, r=cramertj

don't assume we can *always* find a return type hint in async fn

In particular, we sometimes cannot if there is an earlier error.

Fixes rust-lang#65159

r? @cramertj, who reviewed the original PR
bors added a commit that referenced this issue Oct 15, 2019
…r=cramertj

don't assume we can *always* find a return type hint in async fn

In particular, we sometimes cannot if there is an earlier error.

Fixes #65159

r? @cramertj, who reviewed the original PR
Centril added a commit to Centril/rust that referenced this issue Oct 15, 2019
…eturn-ice, r=cramertj

don't assume we can *always* find a return type hint in async fn

In particular, we sometimes cannot if there is an earlier error.

Fixes rust-lang#65159

r? @cramertj, who reviewed the original PR
bors added a commit that referenced this issue Oct 15, 2019
…r=cramertj

don't assume we can *always* find a return type hint in async fn

In particular, we sometimes cannot if there is an earlier error.

Fixes #65159

r? @cramertj, who reviewed the original PR
@bors bors closed this in bbf4eb3 Oct 16, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
6 participants
You can’t perform that action at this time.