Skip to content

Commit

Permalink
Rollup merge of #105318 - compiler-errors:issue-105304, r=jackh726
Browse files Browse the repository at this point in the history
Make `get_impl_future_output_ty` work with AFIT

Fixes #105304
  • Loading branch information
matthiaskrgr authored Dec 6, 2022
2 parents 61189b6 + da929fa commit e29a510
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 1 deletion.
10 changes: 9 additions & 1 deletion compiler/rustc_infer/src/infer/error_reporting/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,15 @@ pub fn unexpected_hidden_region_diagnostic<'tcx>(

impl<'tcx> InferCtxt<'tcx> {
pub fn get_impl_future_output_ty(&self, ty: Ty<'tcx>) -> Option<Ty<'tcx>> {
let ty::Opaque(def_id, substs) = *ty.kind() else { return None; };
let (def_id, substs) = match *ty.kind() {
ty::Opaque(def_id, substs) => (def_id, substs),
ty::Projection(data)
if self.tcx.def_kind(data.item_def_id) == DefKind::ImplTraitPlaceholder =>
{
(data.item_def_id, data.substs)
}
_ => return None,
};

let future_trait = self.tcx.require_lang_item(LangItem::Future, None);
let item_def_id = self.tcx.associated_item_def_ids(future_trait)[0];
Expand Down
14 changes: 14 additions & 0 deletions src/test/ui/async-await/in-trait/return-type-suggestion.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// edition: 2021

#![feature(async_fn_in_trait)]
//~^ WARN the feature `async_fn_in_trait` is incomplete and may not be safe to use and/or cause compiler crashes

trait A {
async fn e() {
Ok(())
//~^ ERROR mismatched types
//~| HELP consider using a semicolon here
}
}

fn main() {}
23 changes: 23 additions & 0 deletions src/test/ui/async-await/in-trait/return-type-suggestion.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
warning: the feature `async_fn_in_trait` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/return-type-suggestion.rs:3:12
|
LL | #![feature(async_fn_in_trait)]
| ^^^^^^^^^^^^^^^^^
|
= note: see issue #91611 <https://github.com/rust-lang/rust/issues/91611> for more information
= note: `#[warn(incomplete_features)]` on by default

error[E0308]: mismatched types
--> $DIR/return-type-suggestion.rs:8:9
|
LL | Ok(())
| ^^^^^^- help: consider using a semicolon here: `;`
| |
| expected `()`, found enum `Result`
|
= note: expected unit type `()`
found enum `Result<(), _>`

error: aborting due to previous error; 1 warning emitted

For more information about this error, try `rustc --explain E0308`.

0 comments on commit e29a510

Please sign in to comment.