about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-07-30 05:37:39 +0200
committerGitHub <noreply@github.com>2019-07-30 05:37:39 +0200
commit09eb0b1b32410819f178f24b34f8f8d02a6f0ebd (patch)
tree50fc09dcbe23f519b00dfc9e733bc970f1481b0b /src
parentf3750e34b460d0a1afd3c0c2531ba6854073585b (diff)
parenta54dd2318ae42fa4c6602cd37d07e837464df082 (diff)
downloadrust-09eb0b1b32410819f178f24b34f8f8d02a6f0ebd.tar.gz
rust-09eb0b1b32410819f178f24b34f8f8d02a6f0ebd.zip
Rollup merge of #63096 - Centril:existential-type-add-tests, r=varkor
Add tests for some `existential_type` ICEs

Fix #53678
Fix #60407
Fix #60564

https://github.com/rust-lang/rust/issues/54899 will need some minimization before it can be added.

r? @varkor
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/existential_types/existential_type-pass.rs (renamed from src/test/ui/existential_type.rs)0
-rw-r--r--src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs19
-rw-r--r--src/test/ui/existential_types/issue-58887.rs (renamed from src/test/ui/existential-type/issue-58887.rs)0
-rw-r--r--src/test/ui/existential_types/issue-58887.stderr (renamed from src/test/ui/existential-type/issue-58887.stderr)0
-rw-r--r--src/test/ui/existential_types/issue-60371.rs (renamed from src/test/ui/existential-type/issue-60371.rs)0
-rw-r--r--src/test/ui/existential_types/issue-60371.stderr (renamed from src/test/ui/existential-type/issue-60371.stderr)0
-rw-r--r--src/test/ui/existential_types/issue-60407.rs15
-rw-r--r--src/test/ui/existential_types/issue-60564.rs26
-rw-r--r--src/test/ui/existential_types/issue-60564.stderr25
9 files changed, 85 insertions, 0 deletions
diff --git a/src/test/ui/existential_type.rs b/src/test/ui/existential_types/existential_type-pass.rs
index c2cf0eeed3d..c2cf0eeed3d 100644
--- a/src/test/ui/existential_type.rs
+++ b/src/test/ui/existential_types/existential_type-pass.rs
diff --git a/src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs b/src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs
new file mode 100644
index 00000000000..d964f2b74ff
--- /dev/null
+++ b/src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs
@@ -0,0 +1,19 @@
+// check-pass
+
+#![feature(const_fn, generators, generator_trait, existential_type)]
+
+use std::ops::Generator;
+
+existential type GenOnce<Y, R>: Generator<Yield = Y, Return = R>;
+
+const fn const_generator<Y, R>(yielding: Y, returning: R) -> GenOnce<Y, R> {
+    move || {
+        yield yielding;
+
+        return returning;
+    }
+}
+
+const FOO: GenOnce<usize, usize> = const_generator(10, 100);
+
+fn main() {}
diff --git a/src/test/ui/existential-type/issue-58887.rs b/src/test/ui/existential_types/issue-58887.rs
index f038648ec21..f038648ec21 100644
--- a/src/test/ui/existential-type/issue-58887.rs
+++ b/src/test/ui/existential_types/issue-58887.rs
diff --git a/src/test/ui/existential-type/issue-58887.stderr b/src/test/ui/existential_types/issue-58887.stderr
index 800f4b7e059..800f4b7e059 100644
--- a/src/test/ui/existential-type/issue-58887.stderr
+++ b/src/test/ui/existential_types/issue-58887.stderr
diff --git a/src/test/ui/existential-type/issue-60371.rs b/src/test/ui/existential_types/issue-60371.rs
index f9def11d193..f9def11d193 100644
--- a/src/test/ui/existential-type/issue-60371.rs
+++ b/src/test/ui/existential_types/issue-60371.rs
diff --git a/src/test/ui/existential-type/issue-60371.stderr b/src/test/ui/existential_types/issue-60371.stderr
index 092cb31f97d..092cb31f97d 100644
--- a/src/test/ui/existential-type/issue-60371.stderr
+++ b/src/test/ui/existential_types/issue-60371.stderr
diff --git a/src/test/ui/existential_types/issue-60407.rs b/src/test/ui/existential_types/issue-60407.rs
new file mode 100644
index 00000000000..52162c491b5
--- /dev/null
+++ b/src/test/ui/existential_types/issue-60407.rs
@@ -0,0 +1,15 @@
+// check-pass
+
+#![feature(existential_type)]
+
+existential type Debuggable: core::fmt::Debug;
+
+static mut TEST: Option<Debuggable> = None;
+
+fn main() {
+    unsafe { TEST = Some(foo()) }
+}
+
+fn foo() -> Debuggable {
+    0u32
+}
diff --git a/src/test/ui/existential_types/issue-60564.rs b/src/test/ui/existential_types/issue-60564.rs
new file mode 100644
index 00000000000..cb3914ddd1d
--- /dev/null
+++ b/src/test/ui/existential_types/issue-60564.rs
@@ -0,0 +1,26 @@
+#![feature(existential_type)]
+
+trait IterBits {
+    type BitsIter: Iterator<Item = u8>;
+    fn iter_bits(self, n: u8) -> Self::BitsIter;
+}
+
+existential type IterBitsIter<T, E, I>: std::iter::Iterator<Item = I>;
+//~^ ERROR could not find defining uses
+
+impl<T, E> IterBits for T
+where
+    T: std::ops::Shr<Output = T>
+        + std::ops::BitAnd<T, Output = T>
+        + std::convert::From<u8>
+        + std::convert::TryInto<u8, Error = E>,
+    E: std::fmt::Debug,
+{
+    type BitsIter = IterBitsIter<T, E, u8>;
+    fn iter_bits(self, n: u8) -> Self::BitsIter {
+    //~^ ERROR type parameter `E` is part of concrete type but not used
+        (0u8..n)
+            .rev()
+            .map(move |shift| ((self >> T::from(shift)) & T::from(1)).try_into().unwrap())
+    }
+}
diff --git a/src/test/ui/existential_types/issue-60564.stderr b/src/test/ui/existential_types/issue-60564.stderr
new file mode 100644
index 00000000000..d8480b52157
--- /dev/null
+++ b/src/test/ui/existential_types/issue-60564.stderr
@@ -0,0 +1,25 @@
+error[E0601]: `main` function not found in crate `issue_60564`
+   |
+   = note: consider adding a `main` function to `$DIR/issue-60564.rs`
+
+error: type parameter `E` is part of concrete type but not used in parameter list for existential type
+  --> $DIR/issue-60564.rs:20:49
+   |
+LL |       fn iter_bits(self, n: u8) -> Self::BitsIter {
+   |  _________________________________________________^
+LL | |
+LL | |         (0u8..n)
+LL | |             .rev()
+LL | |             .map(move |shift| ((self >> T::from(shift)) & T::from(1)).try_into().unwrap())
+LL | |     }
+   | |_____^
+
+error: could not find defining uses
+  --> $DIR/issue-60564.rs:8:1
+   |
+LL | existential type IterBitsIter<T, E, I>: std::iter::Iterator<Item = I>;
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0601`.