1
Fork 0

Don't skip inner const when looking for body for suggestion

This commit is contained in:
Michael Goulet 2024-05-23 19:48:54 -04:00
parent 5baee04b63
commit c58b7c9c81
3 changed files with 29 additions and 6 deletions

View file

@ -1871,11 +1871,8 @@ impl<'tcx, 'exprs, E: AsCoercionSite> CoerceMany<'tcx, 'exprs, E> {
// If this is due to a block, then maybe we forgot a `return`/`break`. // If this is due to a block, then maybe we forgot a `return`/`break`.
if due_to_block if due_to_block
&& let Some(expr) = expression && let Some(expr) = expression
&& let Some((parent_fn_decl, parent_id)) = fcx && let Some(parent_fn_decl) =
.tcx fcx.tcx.hir().fn_decl_by_hir_id(fcx.tcx.local_def_id_to_hir_id(fcx.body_id))
.hir()
.parent_iter(block_or_return_id)
.find_map(|(_, node)| Some((node.fn_decl()?, node.associated_body()?.0)))
{ {
fcx.suggest_missing_break_or_return_expr( fcx.suggest_missing_break_or_return_expr(
&mut err, &mut err,
@ -1884,7 +1881,7 @@ impl<'tcx, 'exprs, E: AsCoercionSite> CoerceMany<'tcx, 'exprs, E> {
expected, expected,
found, found,
block_or_return_id, block_or_return_id,
parent_id, fcx.body_id,
); );
} }

View file

@ -0,0 +1,9 @@
const fn f() -> usize {
//~^ ERROR mismatched types
const FIELD: usize = loop {
0
//~^ ERROR mismatched types
};
}
fn main() {}

View file

@ -0,0 +1,17 @@
error[E0308]: mismatched types
--> $DIR/dont-suggest-through-inner-const.rs:4:9
|
LL | 0
| ^ expected `()`, found integer
error[E0308]: mismatched types
--> $DIR/dont-suggest-through-inner-const.rs:1:17
|
LL | const fn f() -> usize {
| - ^^^^^ expected `usize`, found `()`
| |
| implicitly returns `()` as its body has no tail or `return` expression
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0308`.