]> git.lizzy.rs Git - rust.git/blob - tests/ui/pattern_type_mismatch/pattern_structs.rs
Auto merge of #9684 - kraktus:ref_option_ref, r=xFrednet
[rust.git] / tests / ui / pattern_type_mismatch / pattern_structs.rs
1 #![allow(clippy::all)]
2 #![warn(clippy::pattern_type_mismatch)]
3
4 fn main() {}
5
6 fn struct_types() {
7     struct Struct<'a> {
8         ref_inner: &'a Option<i32>,
9     }
10     let ref_value = &Struct { ref_inner: &Some(42) };
11
12     // not ok
13     let Struct { .. } = ref_value;
14     if let &Struct { ref_inner: Some(_) } = ref_value {}
15     if let Struct { ref_inner: Some(_) } = *ref_value {}
16
17     // ok
18     let &Struct { .. } = ref_value;
19     let Struct { .. } = *ref_value;
20     if let &Struct { ref_inner: &Some(_) } = ref_value {}
21     if let Struct { ref_inner: &Some(_) } = *ref_value {}
22 }
23
24 fn struct_enum_variants() {
25     enum StructEnum<'a> {
26         Empty,
27         Var { inner_ref: &'a Option<i32> },
28     }
29     let ref_value = &StructEnum::Var { inner_ref: &Some(42) };
30
31     // not ok
32     if let StructEnum::Var { .. } = ref_value {}
33     if let StructEnum::Var { inner_ref: Some(_) } = ref_value {}
34     if let &StructEnum::Var { inner_ref: Some(_) } = ref_value {}
35     if let StructEnum::Var { inner_ref: Some(_) } = *ref_value {}
36     if let StructEnum::Empty = ref_value {}
37
38     // ok
39     if let &StructEnum::Var { .. } = ref_value {}
40     if let StructEnum::Var { .. } = *ref_value {}
41     if let &StructEnum::Var { inner_ref: &Some(_) } = ref_value {}
42     if let StructEnum::Var { inner_ref: &Some(_) } = *ref_value {}
43     if let &StructEnum::Empty = ref_value {}
44     if let StructEnum::Empty = *ref_value {}
45 }