]> git.lizzy.rs Git - rust.git/blob - src/test/ui/parser/recover-range-pats.rs
Rollup merge of #67005 - andrewbanchich:master, r=joshtriplett
[rust.git] / src / test / ui / parser / recover-range-pats.rs
1 // Here we test all kinds of range patterns in terms of parsing / recovery.
2 // We want to ensure that:
3 // 1. Things parse as they should.
4 // 2. Or at least we have parser recovery if they don't.
5
6 #![feature(exclusive_range_pattern)]
7 #![deny(ellipsis_inclusive_range_patterns)]
8
9 fn main() {}
10
11 const X: u8 = 0;
12 const Y: u8 = 3;
13
14 fn exclusive_from_to() {
15     if let 0..3 = 0 {} // OK.
16     if let 0..Y = 0 {} // OK.
17     if let X..3 = 0 {} // OK.
18     if let X..Y = 0 {} // OK.
19     if let true..Y = 0 {} //~ ERROR only char and numeric types
20     if let X..true = 0 {} //~ ERROR only char and numeric types
21     if let .0..Y = 0 {} //~ ERROR mismatched types
22     //~^ ERROR float literals must have an integer part
23     if let X.. .0 = 0 {} //~ ERROR mismatched types
24     //~^ ERROR float literals must have an integer part
25 }
26
27 fn inclusive_from_to() {
28     if let 0..=3 = 0 {} // OK.
29     if let 0..=Y = 0 {} // OK.
30     if let X..=3 = 0 {} // OK.
31     if let X..=Y = 0 {} // OK.
32     if let true..=Y = 0 {} //~ ERROR only char and numeric types
33     if let X..=true = 0 {} //~ ERROR only char and numeric types
34     if let .0..=Y = 0 {} //~ ERROR mismatched types
35     //~^ ERROR float literals must have an integer part
36     if let X..=.0 = 0 {} //~ ERROR mismatched types
37     //~^ ERROR float literals must have an integer part
38 }
39
40 fn inclusive2_from_to() {
41     if let 0...3 = 0 {} //~ ERROR `...` range patterns are deprecated
42     if let 0...Y = 0 {} //~ ERROR `...` range patterns are deprecated
43     if let X...3 = 0 {} //~ ERROR `...` range patterns are deprecated
44     if let X...Y = 0 {} //~ ERROR `...` range patterns are deprecated
45     if let true...Y = 0 {} //~ ERROR only char and numeric types
46     //~^ ERROR `...` range patterns are deprecated
47     if let X...true = 0 {} //~ ERROR only char and numeric types
48     //~^ ERROR `...` range patterns are deprecated
49     if let .0...Y = 0 {} //~ ERROR mismatched types
50     //~^ ERROR float literals must have an integer part
51     //~| ERROR `...` range patterns are deprecated
52     if let X... .0 = 0 {} //~ ERROR mismatched types
53     //~^ ERROR float literals must have an integer part
54     //~| ERROR `...` range patterns are deprecated
55 }
56
57 fn exclusive_from() {
58     if let 0.. = 0 {} //~ ERROR `X..` range patterns are not supported
59     if let X.. = 0 {} //~ ERROR `X..` range patterns are not supported
60     if let true.. = 0 {} //~ ERROR `X..` range patterns are not supported
61     //~^ ERROR only char and numeric types
62     if let .0.. = 0 {} //~ ERROR `X..` range patterns are not supported
63     //~^ ERROR float literals must have an integer part
64     //~| ERROR mismatched types
65 }
66
67 fn inclusive_from() {
68     if let 0..= = 0 {} //~ ERROR `X..=` range patterns are not supported
69     if let X..= = 0 {} //~ ERROR `X..=` range patterns are not supported
70     if let true..= = 0 {} //~ ERROR `X..=` range patterns are not supported
71     //~| ERROR only char and numeric types
72     if let .0..= = 0 {} //~ ERROR `X..=` range patterns are not supported
73     //~^ ERROR float literals must have an integer part
74     //~| ERROR mismatched types
75 }
76
77 fn inclusive2_from() {
78     if let 0... = 0 {} //~ ERROR `X...` range patterns are not supported
79     //~^ ERROR `...` range patterns are deprecated
80     if let X... = 0 {} //~ ERROR `X...` range patterns are not supported
81     //~^ ERROR `...` range patterns are deprecated
82     if let true... = 0 {} //~ ERROR `X...` range patterns are not supported
83     //~^ ERROR `...` range patterns are deprecated
84     //~| ERROR only char and numeric types
85     if let .0... = 0 {} //~ ERROR `X...` range patterns are not supported
86     //~^ ERROR float literals must have an integer part
87     //~| ERROR `...` range patterns are deprecated
88     //~| ERROR mismatched types
89 }
90
91 fn exclusive_to() {
92     if let ..0 = 0 {} //~ ERROR `..X` range patterns are not supported
93     if let ..Y = 0 {} //~ ERROR `..X` range patterns are not supported
94     if let ..true = 0 {} //~ ERROR `..X` range patterns are not supported
95     //~| ERROR only char and numeric types
96     if let .. .0 = 0 {} //~ ERROR `..X` range patterns are not supported
97     //~^ ERROR float literals must have an integer part
98     //~| ERROR mismatched types
99 }
100
101 fn inclusive_to() {
102     if let ..=3 = 0 {} //~ ERROR `..=X` range patterns are not supported
103     if let ..=Y = 0 {} //~ ERROR `..=X` range patterns are not supported
104     if let ..=true = 0 {} //~ ERROR `..=X` range patterns are not supported
105     //~| ERROR only char and numeric types
106     if let ..=.0 = 0 {} //~ ERROR `..=X` range patterns are not supported
107     //~^ ERROR float literals must have an integer part
108     //~| ERROR mismatched types
109 }
110
111 fn inclusive2_to() {
112     if let ...3 = 0 {} //~ ERROR `...X` range patterns are not supported
113     //~^ ERROR `...` range patterns are deprecated
114     if let ...Y = 0 {} //~ ERROR `...X` range patterns are not supported
115     //~^ ERROR `...` range patterns are deprecated
116     if let ...true = 0 {} //~ ERROR `...X` range patterns are not supported
117     //~^ ERROR `...` range patterns are deprecated
118     //~| ERROR only char and numeric types
119     if let ....3 = 0 {} //~ ERROR `...X` range patterns are not supported
120     //~^ ERROR float literals must have an integer part
121     //~| ERROR `...` range patterns are deprecated
122     //~| ERROR mismatched types
123 }
124
125 fn with_macro_expr_var() {
126     macro_rules! mac2 {
127         ($e1:expr, $e2:expr) => {
128             let $e1..$e2;
129             let $e1...$e2;
130             //~^ ERROR `...` range patterns are deprecated
131             let $e1..=$e2;
132         }
133     }
134
135     mac2!(0, 1);
136
137     macro_rules! mac {
138         ($e:expr) => {
139             let ..$e; //~ ERROR `..X` range patterns are not supported
140             let ...$e; //~ ERROR `...X` range patterns are not supported
141             //~^ ERROR `...` range patterns are deprecated
142             let ..=$e; //~ ERROR `..=X` range patterns are not supported
143             let $e..; //~ ERROR `X..` range patterns are not supported
144             let $e...; //~ ERROR `X...` range patterns are not supported
145             //~^ ERROR `...` range patterns are deprecated
146             let $e..=; //~ ERROR `X..=` range patterns are not supported
147         }
148     }
149
150     mac!(0);
151 }