Don't proceed into parent bodies when collecting stmts for possible return suggestion
This commit is contained in:
parent
468f115684
commit
8bbaeee6f9
@ -2016,12 +2016,16 @@ pub(super) fn collect_unused_stmts_for_coerce_return_ty(
|
||||
for (span, code) in errors_causecode {
|
||||
self.dcx().try_steal_modify_and_emit_err(span, StashKey::MaybeForgetReturn, |err| {
|
||||
if let Some(fn_sig) = self.body_fn_sig()
|
||||
&& let ExprBindingObligation(_, _, hir_id, ..) = code
|
||||
&& let ExprBindingObligation(_, _, binding_hir_id, ..) = code
|
||||
&& !fn_sig.output().is_unit()
|
||||
{
|
||||
let mut block_num = 0;
|
||||
let mut found_semi = false;
|
||||
for (_, node) in self.tcx.hir().parent_iter(hir_id) {
|
||||
for (hir_id, node) in self.tcx.hir().parent_iter(binding_hir_id) {
|
||||
// Don't proceed into parent bodies
|
||||
if hir_id.owner != binding_hir_id.owner {
|
||||
break;
|
||||
}
|
||||
match node {
|
||||
hir::Node::Stmt(stmt) => {
|
||||
if let hir::StmtKind::Semi(expr) = stmt.kind {
|
||||
|
15
tests/ui/inference/dont-collect-stmts-from-parent-body.rs
Normal file
15
tests/ui/inference/dont-collect-stmts-from-parent-body.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// issue: rust-lang/rust#124022
|
||||
|
||||
struct Type<T>;
|
||||
//~^ ERROR type parameter `T` is never used
|
||||
|
||||
fn main() {
|
||||
{
|
||||
impl<T> Type<T> {
|
||||
fn new() -> Type<T> {
|
||||
Type
|
||||
//~^ ERROR type annotations needed
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
error[E0392]: type parameter `T` is never used
|
||||
--> $DIR/dont-collect-stmts-from-parent-body.rs:3:13
|
||||
|
|
||||
LL | struct Type<T>;
|
||||
| ^ unused type parameter
|
||||
|
|
||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||
= help: if you intended `T` to be a const parameter, use `const T: /* Type */` instead
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/dont-collect-stmts-from-parent-body.rs:10:17
|
||||
|
|
||||
LL | Type
|
||||
| ^^^^ cannot infer type of the type parameter `T` declared on the struct `Type`
|
||||
|
|
||||
help: consider specifying the generic argument
|
||||
|
|
||||
LL | Type::<T>
|
||||
| +++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0282, E0392.
|
||||
For more information about an error, try `rustc --explain E0282`.
|
Loading…
Reference in New Issue
Block a user