]> git.proxmox.com Git - rustc.git/blame - src/test/ui/lint/issue-54538-unused-parens-lint.rs
New upstream version 1.39.0+dfsg1
[rustc.git] / src / test / ui / lint / issue-54538-unused-parens-lint.rs
CommitLineData
e1599b0c
XL
1#![feature(box_patterns, stmt_expr_attributes)]
2
3#![feature(or_patterns)]
4//~^ WARN the feature `or_patterns` is incomplete
0bf4aa26 5
dc9dc135 6#![allow(ellipsis_inclusive_range_patterns)]
0bf4aa26
XL
7#![allow(unreachable_patterns)]
8#![allow(unused_variables)]
e1599b0c
XL
9#![deny(unused_parens)]
10
11fn lint_on_top_level() {
12 let (a) = 0; //~ ERROR unnecessary parentheses around pattern
13 for (a) in 0..1 {} //~ ERROR unnecessary parentheses around pattern
14 if let (a) = 0 {} //~ ERROR unnecessary parentheses around pattern
15 while let (a) = 0 {} //~ ERROR unnecessary parentheses around pattern
16 fn foo((a): u8) {} //~ ERROR unnecessary parentheses around pattern
17 let _ = |(a): u8| 0; //~ ERROR unnecessary parentheses around pattern
18}
19
20fn _no_lint_attr() {
21 let _x = #[allow(dead_code)] (1 + 2);
22}
23
24// Don't lint in these cases (#64106).
25fn or_patterns_no_lint() {
26 match Box::new(0) {
27 box (0 | 1) => {} // Should not lint as `box 0 | 1` binds as `(box 0) | 1`.
28 _ => {}
29 }
30
31 match 0 {
32 x @ (0 | 1) => {} // Should not lint as `x @ 0 | 1` binds as `(x @ 0) | 1`.
33 _ => {}
34 }
35
36 if let &(0 | 1) = &0 {} // Should also not lint.
37 if let &mut (0 | 1) = &mut 0 {} // Same.
38
39 fn foo((Ok(a) | Err(a)): Result<u8, u8>) {} // Doesn't parse if we remove parens for now.
40
41 let _ = |(Ok(a) | Err(a)): Result<u8, u8>| 1; // `|Ok(a) | Err(a)| 1` parses as bit-or.
42}
43
44fn or_patterns_will_lint() {
45 if let (0 | 1) = 0 {} //~ ERROR unnecessary parentheses around pattern
46 if let ((0 | 1),) = (0,) {} //~ ERROR unnecessary parentheses around pattern
47 if let [(0 | 1)] = [0] {} //~ ERROR unnecessary parentheses around pattern
48 if let 0 | (1 | 2) = 0 {} //~ ERROR unnecessary parentheses around pattern
49 struct TS(u8);
50 if let TS((0 | 1)) = TS(0) {} //~ ERROR unnecessary parentheses around pattern
51 struct NS { f: u8 }
52 if let NS { f: (0 | 1) } = (NS { f: 0 }) {} //~ ERROR unnecessary parentheses around pattern
53}
54
55// Don't lint on `&(mut x)` because `&mut x` means something else (#55342).
56fn deref_mut_binding_no_lint() {
57 let &(mut x) = &0;
58}
0bf4aa26
XL
59
60fn main() {
dc9dc135 61 match 1 {
e1599b0c
XL
62 (_) => {} //~ ERROR unnecessary parentheses around pattern
63 (y) => {} //~ ERROR unnecessary parentheses around pattern
64 (ref r) => {} //~ ERROR unnecessary parentheses around pattern
65 (e @ 1...2) => {} //~ ERROR unnecessary parentheses around pattern
66 (1...2) => {} // Non ambiguous range pattern should not warn
dc9dc135
XL
67 e @ (3...4) => {} // Non ambiguous range pattern should not warn
68 }
69
70 match &1 {
e1599b0c
XL
71 (e @ &(1...2)) => {} //~ ERROR unnecessary parentheses around pattern
72 &(_) => {} //~ ERROR unnecessary parentheses around pattern
73 e @ &(1...2) => {} // Ambiguous range pattern should not warn
74 &(1...2) => {} // Ambiguous range pattern should not warn
dc9dc135
XL
75 }
76
77 match &1 {
78 e @ &(1...2) | e @ &(3...4) => {} // Complex ambiguous pattern should not warn
79 &_ => {}
80 }
81
0bf4aa26 82 match 1 {
e1599b0c
XL
83 (_) => {} //~ ERROR unnecessary parentheses around pattern
84 (y) => {} //~ ERROR unnecessary parentheses around pattern
85 (ref r) => {} //~ ERROR unnecessary parentheses around pattern
86 (e @ 1..=2) => {} //~ ERROR unnecessary parentheses around pattern
87 (1..=2) => {} // Non ambiguous range pattern should not warn
0bf4aa26
XL
88 e @ (3..=4) => {} // Non ambiguous range pattern should not warn
89 }
90
91 match &1 {
e1599b0c
XL
92 (e @ &(1..=2)) => {} //~ ERROR unnecessary parentheses around pattern
93 &(_) => {} //~ ERROR unnecessary parentheses around pattern
94 e @ &(1..=2) => {} // Ambiguous range pattern should not warn
95 &(1..=2) => {} // Ambiguous range pattern should not warn
0bf4aa26
XL
96 }
97
98 match &1 {
dc9dc135 99 e @ &(1..=2) | e @ &(3..=4) => {} // Complex ambiguous pattern should not warn
0bf4aa26
XL
100 &_ => {}
101 }
102}