Skip to content

Commit

Permalink
Auto merge of #101629 - compiler-errors:issue-101623, r=sanxiyn
Browse files Browse the repository at this point in the history
Be careful about `expr_ty_adjusted` when noting block tail type

Fixes #101623
  • Loading branch information
bors committed Sep 19, 2022
2 parents efa717b + 44738ee commit 503e19d
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2714,12 +2714,13 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
Some(t) if t.hir_owner == parent_id => t,
_ => self.tcx.typeck(parent_id),
};
let ty = typeck_results.expr_ty_adjusted(expr);
let span = expr.peel_blocks().span;
let expr = expr.peel_blocks();
let ty = typeck_results.expr_ty_adjusted_opt(expr).unwrap_or(tcx.ty_error());
let span = expr.span;
if Some(span) != err.span.primary_span() {
err.span_label(
span,
&if ty.references_error() {
if ty.references_error() {
String::new()
} else {
format!("this tail expression is of type `{:?}`", ty)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ LL | let p = Some(45).and_then({
LL | |
LL | | |x| println!("doubling {}", x);
LL | | Some(x * 2)
| | -----------
| | ----------- this tail expression is of type `std::option::Option<_>`
LL | |
LL | | });
| |_____^ expected an `FnOnce<({integer},)>` closure, found `Option<_>`
Expand Down
25 changes: 25 additions & 0 deletions src/test/ui/suggestions/issue-101623.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
pub struct Stuff {
inner: *mut (),
}

pub struct Wrap<T>(T);

fn fun<T>(t: T) -> Wrap<T> {
todo!()
}

pub trait Trait<'de> {
fn do_stuff(_: Wrap<&'de mut Self>);
}

impl<'a> Trait<'a> for () {
fn do_stuff(_: Wrap<&'a mut Self>) {}
}

fn fun2(t: &mut Stuff) -> () {
let Stuff { inner, .. } = t;
Trait::do_stuff({ fun(&mut *inner) });
//~^ ERROR the trait bound `*mut (): Trait<'_>` is not satisfied
}

fn main() {}
14 changes: 14 additions & 0 deletions src/test/ui/suggestions/issue-101623.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
error[E0277]: the trait bound `*mut (): Trait<'_>` is not satisfied
--> $DIR/issue-101623.rs:21:21
|
LL | Trait::do_stuff({ fun(&mut *inner) });
| --------------- ^^----------------^^
| | |
| | the trait `Trait<'_>` is not implemented for `*mut ()`
| required by a bound introduced by this call
|
= help: the trait `Trait<'a>` is implemented for `()`

error: aborting due to previous error

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

0 comments on commit 503e19d

Please sign in to comment.