about summary refs log tree commit diff
path: root/src/test/ui/pattern
diff options
context:
space:
mode:
authorJubilee <46493976+workingjubilee@users.noreply.github.com>2021-10-04 21:12:33 -0700
committerGitHub <noreply@github.com>2021-10-04 21:12:33 -0700
commit4f6afee4e58afcdf14f49173f52e7ce035a7ceab (patch)
tree4551cfa7a1d99ad11ae12eeb42b9b96332337a05 /src/test/ui/pattern
parent99e6e3ff078162ffec3bb5fd810d54246add2196 (diff)
parent52a040379010f78a75ffc4806c968b3489372311 (diff)
downloadrust-4f6afee4e58afcdf14f49173f52e7ce035a7ceab.tar.gz
rust-4f6afee4e58afcdf14f49173f52e7ce035a7ceab.zip
Rollup merge of #88090 - nbdd0121:inference, r=nikomatsakis
Perform type inference in range pattern

Fix #88074
Diffstat (limited to 'src/test/ui/pattern')
-rw-r--r--src/test/ui/pattern/issue-88074-pat-range-type-inference-err.rs28
-rw-r--r--src/test/ui/pattern/issue-88074-pat-range-type-inference-err.stderr21
-rw-r--r--src/test/ui/pattern/issue-88074-pat-range-type-inference.rs16
-rw-r--r--src/test/ui/pattern/patkind-litrange-no-expr.rs1
-rw-r--r--src/test/ui/pattern/patkind-litrange-no-expr.stderr12
5 files changed, 66 insertions, 12 deletions
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`.
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 => {},
+        _ => {},
+    }
+}
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`.