mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Classify closure arguments in refutable pattern in argument error
This commit is contained in:
parent
1fc46f3a8f
commit
e17f91dd8b
@ -47,9 +47,18 @@ pub(crate) fn check_match(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Result<(), Err
|
||||
};
|
||||
visitor.visit_expr(&thir[expr]);
|
||||
|
||||
let origin = match tcx.def_kind(def_id) {
|
||||
DefKind::AssocFn | DefKind::Fn => "function argument",
|
||||
DefKind::Closure => "closure argument",
|
||||
// other types of MIR don't have function parameters, and we don't need to
|
||||
// categorize those for the irrefutable check.
|
||||
_ if thir.params.is_empty() => "",
|
||||
kind => bug!("unexpected function parameters in THIR: {kind:?} {def_id:?}"),
|
||||
};
|
||||
|
||||
for param in thir.params.iter() {
|
||||
if let Some(box ref pattern) = param.pat {
|
||||
visitor.check_binding_is_irrefutable(pattern, "function argument", None, None);
|
||||
visitor.check_binding_is_irrefutable(pattern, origin, None, None);
|
||||
}
|
||||
}
|
||||
visitor.error
|
||||
|
@ -1,6 +1,6 @@
|
||||
fn main() {
|
||||
let f = |3: isize| println!("hello");
|
||||
//~^ ERROR refutable pattern in function argument
|
||||
//~^ ERROR refutable pattern in closure argument
|
||||
//~| `..=2_isize` and `4_isize..` not covered
|
||||
f(4);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0005]: refutable pattern in function argument
|
||||
error[E0005]: refutable pattern in closure argument
|
||||
--> $DIR/refutable-pattern-in-fn-arg.rs:2:14
|
||||
|
|
||||
LL | let f = |3: isize| println!("hello");
|
||||
|
Loading…
Reference in New Issue
Block a user