]> git.lizzy.rs Git - rust.git/blob - src/test/ui/pattern/bindings-after-at/borrowck-pat-by-copy-bindings-in-at.rs
Remove `bindings_after_at` from `INCOMPLETE_FEATURES`.
[rust.git] / src / test / ui / pattern / bindings-after-at / borrowck-pat-by-copy-bindings-in-at.rs
1 // check-pass
2
3 // Test `Copy` bindings in the rhs of `@` patterns.
4
5 #![feature(slice_patterns)]
6 #![feature(bindings_after_at)]
7
8 #[derive(Copy, Clone)]
9 struct C;
10
11 fn mk_c() -> C { C }
12
13 #[derive(Copy, Clone)]
14 struct P<A, B>(A, B);
15
16 enum E<A, B> { L(A), R(B) }
17
18 fn main() {
19     let a @ b @ c @ d = C;
20     let a @ (b, c) = (C, mk_c());
21     let a @ P(b, P(c, d)) = P(mk_c(), P(C, C));
22     let a @ [b, c] = [C, C];
23     let a @ [b, .., c] = [C, mk_c(), C];
24     let a @ [b, mid @ .., c] = [C, mk_c(), C];
25     let a @ &(b, c) = &(C, C);
26     let a @ &(b, &P(c, d)) = &(mk_c(), &P(C, C));
27
28     fn foo(a @ [b, mid @ .., c]: [C; 3]) {}
29
30     use self::E::*;
31     match L(C) {
32         L(a) | R(a) => {
33             let a: C = a;
34             drop(a);
35             drop(a);
36         }
37     }
38     match R(&L(&mk_c())) {
39         L(L(&a)) | L(R(&a)) | R(L(&a)) | R(R(&a)) => {
40             let a: C = a;
41             drop(a);
42             drop(a);
43         }
44     }
45
46     match Ok(mk_c()) {
47         Ok(ref a @ b) | Err(b @ ref a) => {
48             let _: &C = a;
49             let _: C = b;
50         }
51     }
52 }