Auto merge of #87996 - sexxi-goose:fix-87988, r=nikomatsakis
RFC2229 Add missing edge case Closes https://github.com/rust-lang/rust/issues/87988 This PR fixes an ICE where a match discriminant is not being read when expected. This ICE was the result of a missing edge case which assumed that if a pattern is of type `PatKind::TupleStruct(..) | PatKind::Path(..) | PatKind::Struct(..) | PatKind::Tuple(..)` then a place could only be a multi variant if the place is of type kind Adt.
This commit is contained in:
commit
ebedfedcd8
3 changed files with 66 additions and 0 deletions
|
@ -269,6 +269,9 @@ impl<'a, 'tcx> ExprUseVisitor<'a, 'tcx> {
|
||||||
if def.variants.len() > 1 {
|
if def.variants.len() > 1 {
|
||||||
needs_to_be_read = true;
|
needs_to_be_read = true;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// If it is not ty::Adt, then it should be read
|
||||||
|
needs_to_be_read = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PatKind::Lit(_) | PatKind::Range(..) => {
|
PatKind::Lit(_) | PatKind::Range(..) => {
|
||||||
|
|
19
src/test/ui/closures/2229_closure_analysis/issue-87988.rs
Normal file
19
src/test/ui/closures/2229_closure_analysis/issue-87988.rs
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// run-pass
|
||||||
|
// edition:2021
|
||||||
|
|
||||||
|
const LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED: i32 = 0x01;
|
||||||
|
const LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT: i32 = 0x02;
|
||||||
|
|
||||||
|
pub fn hotplug_callback(event: i32) {
|
||||||
|
let _ = || {
|
||||||
|
match event {
|
||||||
|
LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED => (),
|
||||||
|
LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT => (),
|
||||||
|
_ => (),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
hotplug_callback(1);
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
// run-pass
|
||||||
|
// edition:2021
|
||||||
|
|
||||||
|
const PATTERN_REF: &str = "Hello World";
|
||||||
|
const NUMBER: i32 = 30;
|
||||||
|
const NUMBER_POINTER: *const i32 = &NUMBER;
|
||||||
|
|
||||||
|
pub fn edge_case_ref(event: &str) {
|
||||||
|
let _ = || {
|
||||||
|
match event {
|
||||||
|
PATTERN_REF => (),
|
||||||
|
_ => (),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn edge_case_str(event: String) {
|
||||||
|
let _ = || {
|
||||||
|
match event.as_str() {
|
||||||
|
"hello" => (),
|
||||||
|
_ => (),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn edge_case_raw_ptr(event: *const i32) {
|
||||||
|
let _ = || {
|
||||||
|
match event {
|
||||||
|
NUMBER_POINTER => (),
|
||||||
|
_ => (),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn edge_case_char(event: char) {
|
||||||
|
let _ = || {
|
||||||
|
match event {
|
||||||
|
'a' => (),
|
||||||
|
_ => (),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue