mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-16 09:48:10 +00:00
Auto merge of #15245 - HKalbasi:mir, r=HKalbasi
Fix missing terminator in pattern matching of consts fix #15238
This commit is contained in:
commit
ff15634831
2 changed files with 22 additions and 1 deletions
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue