librustc_mir: Fix ICE with slice patterns
If a match arm does not include all fields in a structure and a later pattern includes a field that is an array, we will attempt to use the array type from the prior arm. When calculating the field type, treat a array of an unknown size as a TyErr.
This commit is contained in:
parent
0c91f3d97f
commit
d6c19191b0
3 changed files with 63 additions and 1 deletions
35
src/test/ui/issues/issue-57472.rs
Normal file
35
src/test/ui/issues/issue-57472.rs
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
#![crate_type="lib"]
|
||||
#![deny(unreachable_patterns)]
|
||||
|
||||
mod test_struct {
|
||||
// Test the exact copy of the minimal example
|
||||
// posted in the issue.
|
||||
pub struct Punned {
|
||||
foo: [u8; 1],
|
||||
bar: [u8; 1],
|
||||
}
|
||||
|
||||
pub fn test(punned: Punned) {
|
||||
match punned {
|
||||
Punned { foo: [_], .. } => println!("foo"),
|
||||
Punned { bar: [_], .. } => println!("bar"),
|
||||
//~^ ERROR unreachable pattern [unreachable_patterns]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod test_union {
|
||||
// Test the same thing using a union.
|
||||
pub union Punned {
|
||||
foo: [u8; 1],
|
||||
bar: [u8; 1],
|
||||
}
|
||||
|
||||
pub fn test(punned: Punned) {
|
||||
match punned {
|
||||
Punned { foo: [_] } => println!("foo"),
|
||||
Punned { bar: [_] } => println!("bar"),
|
||||
//~^ ERROR unreachable pattern [unreachable_patterns]
|
||||
}
|
||||
}
|
||||
}
|
||||
20
src/test/ui/issues/issue-57472.stderr
Normal file
20
src/test/ui/issues/issue-57472.stderr
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
error: unreachable pattern
|
||||
--> $DIR/issue-57472.rs:15:13
|
||||
|
|
||||
LL | Punned { bar: [_], .. } => println!("bar"),
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/issue-57472.rs:2:9
|
||||
|
|
||||
LL | #![deny(unreachable_patterns)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unreachable pattern
|
||||
--> $DIR/issue-57472.rs:31:13
|
||||
|
|
||||
LL | Punned { bar: [_] } => println!("bar"),
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue