]> git.lizzy.rs Git - rust.git/blob - src/test/ui/or-patterns/consistent-bindings.rs
Auto merge of #82864 - jyn514:short-circuit, r=GuillaumeGomez
[rust.git] / src / test / ui / or-patterns / consistent-bindings.rs
1 // Check that or-patterns with consistent bindings across arms are allowed.
2
3 // edition:2018
4
5 // check-pass
6
7 fn main() {
8     // One level:
9     let (Ok(a) | Err(a)) = Ok(0);
10     let (Ok(ref a) | Err(ref a)) = Ok(0);
11     let (Ok(ref mut a) | Err(ref mut a)) = Ok(0);
12
13     // Two levels:
14     enum Tri<S, T, U> {
15         V1(S),
16         V2(T),
17         V3(U),
18     }
19     use Tri::*;
20
21     let (Ok((V1(a) | V2(a) | V3(a), b)) | Err(Ok((a, b)) | Err((a, b)))): Result<_, Result<_, _>> =
22         Ok((V1(1), 1));
23
24     let (Ok((V1(a) | V2(a) | V3(a), ref b)) | Err(Ok((a, ref b)) | Err((a, ref b)))): Result<
25         _,
26         Result<_, _>,
27     > = Ok((V1(1), 1));
28
29     // Three levels:
30     let (
31         a,
32         Err((ref mut b, ref c, d))
33         | Ok((
34             Ok(V1((ref c, d)) | V2((d, ref c)) | V3((ref c, Ok((_, d)) | Err((d, _)))))
35             | Err((ref c, d)),
36             ref mut b,
37         )),
38     ): (_, Result<_, _>) = (1, Ok((Ok(V3((1, Ok::<_, (i32, i32)>((1, 1))))), 1)));
39 }