From d8dae4f8e51d3085664cf5035b0c7d9c237207c8 Mon Sep 17 00:00:00 2001 From: Gary Guo Date: Mon, 16 Aug 2021 20:53:40 +0100 Subject: Perform type inference in range pattern --- src/test/ui/pattern/patkind-litrange-no-expr.rs | 1 - src/test/ui/pattern/patkind-litrange-no-expr.stderr | 12 +----------- 2 files changed, 1 insertion(+), 12 deletions(-) (limited to 'src/test/ui/pattern') diff --git a/src/test/ui/pattern/patkind-litrange-no-expr.rs b/src/test/ui/pattern/patkind-litrange-no-expr.rs index 9464f277fb0..7ef541cb585 100644 --- a/src/test/ui/pattern/patkind-litrange-no-expr.rs +++ b/src/test/ui/pattern/patkind-litrange-no-expr.rs @@ -19,7 +19,6 @@ enum_number!(Change { Neg = -1, Arith = 1 + 1, //~ ERROR arbitrary expressions aren't allowed in patterns //~| ERROR arbitrary expressions aren't allowed in patterns - //~| ERROR only `char` and numeric types are allowed in range patterns }); fn main() {} diff --git a/src/test/ui/pattern/patkind-litrange-no-expr.stderr b/src/test/ui/pattern/patkind-litrange-no-expr.stderr index 51af167a7c1..eb1ee7e4567 100644 --- a/src/test/ui/pattern/patkind-litrange-no-expr.stderr +++ b/src/test/ui/pattern/patkind-litrange-no-expr.stderr @@ -10,15 +10,5 @@ error: arbitrary expressions aren't allowed in patterns LL | Arith = 1 + 1, | ^^^^^ -error[E0029]: only `char` and numeric types are allowed in range patterns - --> $DIR/patkind-litrange-no-expr.rs:20:13 - | -LL | $( $value ..= 42 => Some($name::$variant), )* // PatKind::Range - | -- this is of type `{integer}` -... -LL | Arith = 1 + 1, - | ^^^^^ this is of type `_` but it should be `char` or numeric - -error: aborting due to 3 previous errors +error: aborting due to 2 previous errors -For more information about this error, try `rustc --explain E0029`. -- cgit 1.4.1-3-g733a5 From ca1616c75b64bf7edebefcc70be010e5ac736c97 Mon Sep 17 00:00:00 2001 From: Gary Guo Date: Mon, 16 Aug 2021 21:00:17 +0100 Subject: Add ui test for issue 88074 --- .../ui/pattern/issue-88074-pat-range-type-inference.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/test/ui/pattern/issue-88074-pat-range-type-inference.rs (limited to 'src/test/ui/pattern') diff --git a/src/test/ui/pattern/issue-88074-pat-range-type-inference.rs b/src/test/ui/pattern/issue-88074-pat-range-type-inference.rs new file mode 100644 index 00000000000..27db7d8c7ab --- /dev/null +++ b/src/test/ui/pattern/issue-88074-pat-range-type-inference.rs @@ -0,0 +1,16 @@ +// check-pass + +trait Zero { + const ZERO: Self; +} + +impl Zero for i32 { + const ZERO: Self = 0; +} + +fn main() { + match 1 { + Zero::ZERO ..= 1 => {}, + _ => {}, + } +} -- cgit 1.4.1-3-g733a5 From 52a040379010f78a75ffc4806c968b3489372311 Mon Sep 17 00:00:00 2001 From: Gary Guo Date: Mon, 16 Aug 2021 21:23:48 +0100 Subject: Add a range pattern inference failing test --- .../issue-88074-pat-range-type-inference-err.rs | 28 ++++++++++++++++++++++ ...issue-88074-pat-range-type-inference-err.stderr | 21 ++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/test/ui/pattern/issue-88074-pat-range-type-inference-err.rs create mode 100644 src/test/ui/pattern/issue-88074-pat-range-type-inference-err.stderr (limited to 'src/test/ui/pattern') diff --git a/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.rs b/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.rs new file mode 100644 index 00000000000..16df272df6b --- /dev/null +++ b/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.rs @@ -0,0 +1,28 @@ +trait Zero { + const ZERO: Self; +} + +impl Zero for String { + const ZERO: Self = String::new(); +} + +fn foo() { + match String::new() { + Zero::ZERO ..= Zero::ZERO => {}, + //~^ ERROR only `char` and numeric types are allowed in range patterns + _ => {}, + } +} + +fn bar() { + match Zero::ZERO { + Zero::ZERO ..= Zero::ZERO => {}, + //~^ ERROR type annotations needed [E0282] + _ => {}, + } +} + +fn main() { + foo(); + bar(); +} diff --git a/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.stderr b/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.stderr new file mode 100644 index 00000000000..06a279925ed --- /dev/null +++ b/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.stderr @@ -0,0 +1,21 @@ +error[E0029]: only `char` and numeric types are allowed in range patterns + --> $DIR/issue-88074-pat-range-type-inference-err.rs:11:9 + | +LL | Zero::ZERO ..= Zero::ZERO => {}, + | ----------^^^^^---------- + | | | + | | this is of type `String` but it should be `char` or numeric + | this is of type `String` but it should be `char` or numeric + +error[E0282]: type annotations needed + --> $DIR/issue-88074-pat-range-type-inference-err.rs:19:9 + | +LL | Zero::ZERO ..= Zero::ZERO => {}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type + | + = note: type must be known at this point + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0029, E0282. +For more information about an error, try `rustc --explain E0029`. -- cgit 1.4.1-3-g733a5