summaryrefslogtreecommitdiffstats
path: root/tests/ui/match
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/match')
-rw-r--r--tests/ui/match/match-range-fail-2.stderr6
-rw-r--r--tests/ui/match/match_non_exhaustive.stderr4
-rw-r--r--tests/ui/match/validate-range-endpoints.rs59
-rw-r--r--tests/ui/match/validate-range-endpoints.stderr84
4 files changed, 148 insertions, 5 deletions
diff --git a/tests/ui/match/match-range-fail-2.stderr b/tests/ui/match/match-range-fail-2.stderr
index 52a2bf2b3..089fa851f 100644
--- a/tests/ui/match/match-range-fail-2.stderr
+++ b/tests/ui/match/match-range-fail-2.stderr
@@ -2,19 +2,19 @@ error[E0030]: lower range bound must be less than or equal to upper
--> $DIR/match-range-fail-2.rs:5:9
|
LL | 6 ..= 1 => { }
- | ^ lower bound larger than upper bound
+ | ^^^^^^^ lower bound larger than upper bound
error[E0579]: lower range bound must be less than upper
--> $DIR/match-range-fail-2.rs:11:9
|
LL | 0 .. 0 => { }
- | ^
+ | ^^^^^^
error[E0030]: lower range bound must be less than or equal to upper
--> $DIR/match-range-fail-2.rs:17:9
|
LL | 0xFFFF_FFFF_FFFF_FFFF ..= 1 => { }
- | ^^^^^^^^^^^^^^^^^^^^^ lower bound larger than upper bound
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ lower bound larger than upper bound
error: aborting due to 3 previous errors
diff --git a/tests/ui/match/match_non_exhaustive.stderr b/tests/ui/match/match_non_exhaustive.stderr
index 7b8bdfe00..40be39ec0 100644
--- a/tests/ui/match/match_non_exhaustive.stderr
+++ b/tests/ui/match/match_non_exhaustive.stderr
@@ -5,10 +5,10 @@ LL | match l { L::A => () };
| ^ pattern `L::B` not covered
|
note: `L` defined here
- --> $DIR/match_non_exhaustive.rs:10:13
+ --> $DIR/match_non_exhaustive.rs:10:6
|
LL | enum L { A, B }
- | - ^ not covered
+ | ^ - not covered
= note: the matched value is of type `L`
help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
|
diff --git a/tests/ui/match/validate-range-endpoints.rs b/tests/ui/match/validate-range-endpoints.rs
new file mode 100644
index 000000000..1d1737f8b
--- /dev/null
+++ b/tests/ui/match/validate-range-endpoints.rs
@@ -0,0 +1,59 @@
+#![feature(exclusive_range_pattern)]
+#![feature(inline_const_pat)]
+#![allow(incomplete_features)]
+#![allow(overlapping_range_endpoints)]
+
+fn main() {
+ const TOO_BIG: u8 = 256;
+ match 0u8 {
+ 1..257 => {}
+ //~^ ERROR literal out of range
+ 1..=256 => {}
+ //~^ ERROR literal out of range
+
+ // overflow is detected in a later pass for these
+ 0..257 => {}
+ 0..=256 => {}
+ 256..=100 => {}
+
+ // There isn't really a way to detect these
+ 1..=TOO_BIG => {}
+ //~^ ERROR lower range bound must be less than or equal to upper
+ 1..=const { 256 } => {}
+ //~^ ERROR lower range bound must be less than or equal to upper
+ _ => {}
+ }
+
+ match 0u64 {
+ 10000000000000000000..=99999999999999999999 => {}
+ //~^ ERROR literal out of range
+ _ => {}
+ }
+
+ match 0i8 {
+ 0..129 => {}
+ //~^ ERROR literal out of range
+ 0..=128 => {}
+ //~^ ERROR literal out of range
+ -129..0 => {}
+ //~^ ERROR literal out of range
+ -10000..=-20 => {}
+ //~^ ERROR literal out of range
+
+ // overflow is detected in a later pass for these
+ 128..=0 => {}
+ 0..-129 => {}
+ -10000..=0 => {}
+ _ => {}
+ }
+
+ // FIXME: error message is confusing
+ match 0i8 {
+ //~^ ERROR `i8::MIN..=-17_i8` and `1_i8..=i8::MAX` not covered
+ -10000..=0 => {}
+ }
+ match 0i8 {
+ //~^ ERROR `i8::MIN..=-17_i8` not covered
+ -10000.. => {}
+ }
+}
diff --git a/tests/ui/match/validate-range-endpoints.stderr b/tests/ui/match/validate-range-endpoints.stderr
new file mode 100644
index 000000000..0813fccff
--- /dev/null
+++ b/tests/ui/match/validate-range-endpoints.stderr
@@ -0,0 +1,84 @@
+error: literal out of range for `u8`
+ --> $DIR/validate-range-endpoints.rs:9:12
+ |
+LL | 1..257 => {}
+ | ^^^ this value does not fit into the type `u8` whose range is `0..=255`
+
+error: literal out of range for `u8`
+ --> $DIR/validate-range-endpoints.rs:11:13
+ |
+LL | 1..=256 => {}
+ | ^^^ this value does not fit into the type `u8` whose range is `0..=255`
+
+error[E0030]: lower range bound must be less than or equal to upper
+ --> $DIR/validate-range-endpoints.rs:20:9
+ |
+LL | 1..=TOO_BIG => {}
+ | ^^^^^^^^^^^ lower bound larger than upper bound
+
+error[E0030]: lower range bound must be less than or equal to upper
+ --> $DIR/validate-range-endpoints.rs:22:9
+ |
+LL | 1..=const { 256 } => {}
+ | ^^^^^^^^^^^^^^^^^ lower bound larger than upper bound
+
+error: literal out of range for `u64`
+ --> $DIR/validate-range-endpoints.rs:28:32
+ |
+LL | 10000000000000000000..=99999999999999999999 => {}
+ | ^^^^^^^^^^^^^^^^^^^^ this value does not fit into the type `u64` whose range is `0..=18446744073709551615`
+
+error: literal out of range for `i8`
+ --> $DIR/validate-range-endpoints.rs:34:12
+ |
+LL | 0..129 => {}
+ | ^^^ this value does not fit into the type `i8` whose range is `-128..=127`
+
+error: literal out of range for `i8`
+ --> $DIR/validate-range-endpoints.rs:36:13
+ |
+LL | 0..=128 => {}
+ | ^^^ this value does not fit into the type `i8` whose range is `-128..=127`
+
+error: literal out of range for `i8`
+ --> $DIR/validate-range-endpoints.rs:38:9
+ |
+LL | -129..0 => {}
+ | ^^^^ this value does not fit into the type `i8` whose range is `-128..=127`
+
+error: literal out of range for `i8`
+ --> $DIR/validate-range-endpoints.rs:40:9
+ |
+LL | -10000..=-20 => {}
+ | ^^^^^^ this value does not fit into the type `i8` whose range is `-128..=127`
+
+error[E0004]: non-exhaustive patterns: `i8::MIN..=-17_i8` and `1_i8..=i8::MAX` not covered
+ --> $DIR/validate-range-endpoints.rs:51:11
+ |
+LL | match 0i8 {
+ | ^^^ patterns `i8::MIN..=-17_i8` and `1_i8..=i8::MAX` not covered
+ |
+ = note: the matched value is of type `i8`
+help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms
+ |
+LL ~ -10000..=0 => {},
+LL + i8::MIN..=-17_i8 | 1_i8..=i8::MAX => todo!()
+ |
+
+error[E0004]: non-exhaustive patterns: `i8::MIN..=-17_i8` not covered
+ --> $DIR/validate-range-endpoints.rs:55:11
+ |
+LL | match 0i8 {
+ | ^^^ pattern `i8::MIN..=-17_i8` not covered
+ |
+ = note: the matched value is of type `i8`
+help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
+ |
+LL ~ -10000.. => {},
+LL + i8::MIN..=-17_i8 => todo!()
+ |
+
+error: aborting due to 11 previous errors
+
+Some errors have detailed explanations: E0004, E0030.
+For more information about an error, try `rustc --explain E0004`.