Auto merge of #15245 - HKalbasi:mir, r=HKalbasi

Fix missing terminator in pattern matching of consts

fix #15238
This commit is contained in:
bors 2023-07-09 21:33:42 +00:00
commit ff15634831
2 changed files with 22 additions and 1 deletions

View file

@ -307,6 +307,11 @@ impl MirLowerCtx<'_> {
mode,
)?,
None => {
// The path is not a variant, so it is a const
if mode != MatchingMode::Check {
// A const don't bind anything. Only needs check.
return Ok((current, current_else));
}
let unresolved_name = || MirLowerError::unresolved_path(self.db, p);
let resolver = self.owner.resolver(self.db.upcast());
let pr = resolver
@ -362,8 +367,8 @@ impl MirLowerCtx<'_> {
},
Pat::Lit(l) => match &self.body.exprs[*l] {
Expr::Literal(l) => {
let c = self.lower_literal_to_operand(self.infer[pattern].clone(), l)?;
if mode == MatchingMode::Check {
let c = self.lower_literal_to_operand(self.infer[pattern].clone(), l)?;
self.pattern_match_const(current_else, current, c, cond_place, pattern)?
} else {
(current, current_else)

View file

@ -795,6 +795,22 @@ fn main() {
//^^^^^ 💡 warn: variable does not need to be mutable
f(x);
}
"#,
);
check_diagnostics(
r#"
struct Foo(i32);
const X: Foo = Foo(5);
const Y: Foo = Foo(12);
const fn f(mut a: Foo) -> bool {
//^^^^^ 💡 warn: variable does not need to be mutable
match a {
X | Y => true,
_ => false,
}
}
"#,
);
}