about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorBastian Kauschke <bastian_kauschke@hotmail.de>2020-05-09 22:01:15 +0200
committerBastian Kauschke <bastian_kauschke@hotmail.de>2020-05-09 22:02:36 +0200
commita8c152dfc921e8ec2c00f65e7c731197e522a96d (patch)
tree03be495a3e80958ed6bde56f068461abb45c730d /src/test
parent7c59a81a5fcbaaca311f744cd7c68d99bfbb05d3 (diff)
add regression tests + improve method name
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/const-generics/issue-70180-1-stalled_on.rs35
-rw-r--r--src/test/ui/const-generics/issue-70180-2-stalled_on.rs35
2 files changed, 70 insertions, 0 deletions
diff --git a/src/test/ui/const-generics/issue-70180-1-stalled_on.rs b/src/test/ui/const-generics/issue-70180-1-stalled_on.rs
new file mode 100644
index 00000000000..ff2a5250263
--- /dev/null
+++ b/src/test/ui/const-generics/issue-70180-1-stalled_on.rs
@@ -0,0 +1,35 @@
+// build-pass
+#![feature(const_generics)]
+#![allow(incomplete_features)]
+
+pub fn works() {
+    let array/*: [_; _]*/ = default_array();
+    let _: [_; 4] = array;
+    Foo::foo(&array);
+}
+
+pub fn didnt_work() {
+    let array/*: [_; _]*/ = default_array();
+    Foo::foo(&array);
+    let _: [_; 4] = array;
+}
+
+trait Foo {
+    fn foo(&self) {}
+}
+
+impl Foo for [i32; 4] {}
+impl Foo for [i64; 8] {}
+
+// Only needed because `[_; _]` is not valid type syntax.
+fn default_array<T, const N: usize>() -> [T; N]
+where
+    [T; N]: Default,
+{
+    Default::default()
+}
+
+fn main() {
+    works();
+    didnt_work();
+}
diff --git a/src/test/ui/const-generics/issue-70180-2-stalled_on.rs b/src/test/ui/const-generics/issue-70180-2-stalled_on.rs
new file mode 100644
index 00000000000..83338668f4f
--- /dev/null
+++ b/src/test/ui/const-generics/issue-70180-2-stalled_on.rs
@@ -0,0 +1,35 @@
+// build-pass
+#![feature(const_generics)]
+#![allow(incomplete_features)]
+
+fn works() {
+    let array/*: [u8; _]*/ = default_byte_array();
+    let _: [_; 4] = array;
+    Foo::foo(&array);
+}
+
+fn didnt_work() {
+    let array/*: [u8; _]*/ = default_byte_array();
+    Foo::foo(&array);
+    let _: [_; 4] = array;
+}
+
+trait Foo<T> {
+    fn foo(&self) {}
+}
+
+impl Foo<i32> for [u8; 4] {}
+impl Foo<i64> for [u8; 8] {}
+
+// Only needed because `[u8; _]` is not valid type syntax.
+fn default_byte_array<const N: usize>() -> [u8; N]
+where
+    [u8; N]: Default,
+{
+    Default::default()
+}
+
+fn main() {
+    works();
+    didnt_work();
+}