d6c19191b0
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.
36 lines
856 B
Rust
36 lines
856 B
Rust
#![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]
|
|
}
|
|
}
|
|
}
|