From 3ef831069a7bb249f2ce5bfb8abeaac21a0e9183 Mon Sep 17 00:00:00 2001 From: Ben Lewis Date: Sat, 4 Jan 2020 13:42:02 +1300 Subject: [PATCH] Add lazy normalization tests --- .../ui/const-generics/issues/issue-61935.rs | 24 ++++++++ ...ssue-61336-1.stderr => issue-61935.stderr} | 3 - .../ui/const-generics/issues/issue-67185-1.rs | 32 ++++++++++ .../issues/issue-67185-1.stderr | 8 +++ .../ui/const-generics/issues/issue-67185-2.rs | 34 +++++++++++ .../issues/issue-67185-2.stderr | 61 +++++++++++++++++++ .../lazy-normalization/issue-71986.rs | 8 +++ 7 files changed, 167 insertions(+), 3 deletions(-) create mode 100644 src/test/ui/const-generics/issues/issue-61935.rs rename src/test/ui/const-generics/issues/{issue-61336-1.stderr => issue-61935.stderr} (84%) create mode 100644 src/test/ui/const-generics/issues/issue-67185-1.rs create mode 100644 src/test/ui/const-generics/issues/issue-67185-1.stderr create mode 100644 src/test/ui/const-generics/issues/issue-67185-2.rs create mode 100644 src/test/ui/const-generics/issues/issue-67185-2.stderr create mode 100644 src/test/ui/const-generics/lazy-normalization/issue-71986.rs diff --git a/src/test/ui/const-generics/issues/issue-61935.rs b/src/test/ui/const-generics/issues/issue-61935.rs new file mode 100644 index 000000000000..35fb435b812a --- /dev/null +++ b/src/test/ui/const-generics/issues/issue-61935.rs @@ -0,0 +1,24 @@ +// check-pass + +#![feature(const_generics)] +//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash + +trait Foo {} + +impl Foo for [(); N] + where + Self:FooImpl<{N==0}> +{} + +trait FooImpl{} + +impl FooImpl for [(); 0] {} + +impl FooImpl for [();N] {} + +fn foo(_: impl Foo) {} + +fn main() { + foo([]); + foo([()]); +} diff --git a/src/test/ui/const-generics/issues/issue-61336-1.stderr b/src/test/ui/const-generics/issues/issue-61935.stderr similarity index 84% rename from src/test/ui/const-generics/issues/issue-61336-1.stderr rename to src/test/ui/const-generics/issues/issue-61935.stderr index b2c69d57c40b..5ada50c34492 100644 --- a/src/test/ui/const-generics/issues/issue-61336-1.stderr +++ b/src/test/ui/const-generics/issues/issue-61935.stderr @@ -1,5 +1,4 @@ warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-61336-1.rs:1:12 | LL | #![feature(const_generics)] | ^^^^^^^^^^^^^^ @@ -7,5 +6,3 @@ LL | #![feature(const_generics)] = note: `#[warn(incomplete_features)]` on by default = note: see issue #44580 for more information -warning: 1 warning emitted - diff --git a/src/test/ui/const-generics/issues/issue-67185-1.rs b/src/test/ui/const-generics/issues/issue-67185-1.rs new file mode 100644 index 000000000000..89e0b7f62da5 --- /dev/null +++ b/src/test/ui/const-generics/issues/issue-67185-1.rs @@ -0,0 +1,32 @@ +// check-pass + +#![feature(const_generics)] +//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash + +trait Baz { + type Quaks; +} +impl Baz for u8 { + type Quaks = [u16; 3]; +} + +trait Bar {} +impl Bar for [u16; 3] {} +impl Bar for [[u16; 3]; 2] {} + +trait Foo + where + [::Quaks; 2]: Bar, + ::Quaks: Bar, +{ +} + +struct FooImpl; + +impl Foo for FooImpl {} + +fn f(_: impl Foo) {} + +fn main() { + f(FooImpl) +} diff --git a/src/test/ui/const-generics/issues/issue-67185-1.stderr b/src/test/ui/const-generics/issues/issue-67185-1.stderr new file mode 100644 index 000000000000..01c09763314a --- /dev/null +++ b/src/test/ui/const-generics/issues/issue-67185-1.stderr @@ -0,0 +1,8 @@ +warning: the feature `const_generics` is incomplete and may cause the compiler to crash + --> $DIR/issue-67185-1.rs:3:12 + | +LL | #![feature(const_generics)] + | ^^^^^^^^^^^^^^ + | + = note: `#[warn(incomplete_features)]` on by default + diff --git a/src/test/ui/const-generics/issues/issue-67185-2.rs b/src/test/ui/const-generics/issues/issue-67185-2.rs new file mode 100644 index 000000000000..af797721324e --- /dev/null +++ b/src/test/ui/const-generics/issues/issue-67185-2.rs @@ -0,0 +1,34 @@ +#![feature(const_generics)] +//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash + +trait Baz { + type Quaks; +} +impl Baz for u8 { + type Quaks = [u16; 3]; +} + +trait Bar {} +impl Bar for [u16; 4] {} +impl Bar for [[u16; 3]; 3] {} + +trait Foo //~ ERROR mismatched types + where + [::Quaks; 2]: Bar, + ::Quaks: Bar, +{ +} + +struct FooImpl; + +impl Foo for FooImpl {} +//~^ ERROR mismatched types +//~^^ ERROR mismatched types + +fn f(_: impl Foo) {} +//~^ ERROR mismatched types +//~^^ ERROR mismatched types + +fn main() { + f(FooImpl) +} diff --git a/src/test/ui/const-generics/issues/issue-67185-2.stderr b/src/test/ui/const-generics/issues/issue-67185-2.stderr new file mode 100644 index 000000000000..3a46d8fece88 --- /dev/null +++ b/src/test/ui/const-generics/issues/issue-67185-2.stderr @@ -0,0 +1,61 @@ +warning: the feature `const_generics` is incomplete and may cause the compiler to crash + --> $DIR/issue-67185-2.rs:1:12 + | +LL | #![feature(const_generics)] + | ^^^^^^^^^^^^^^ + | + = note: `#[warn(incomplete_features)]` on by default + +error[E0308]: mismatched types + --> $DIR/issue-67185-2.rs:15:1 + | +LL | / trait Foo +LL | | where +LL | | [::Quaks; 2]: Bar, +LL | | ::Quaks: Bar, +LL | | { +LL | | } + | |_^ expected `3usize`, found `4usize` + | + = note: expected type `3usize` + found type `4usize` + +error[E0308]: mismatched types + --> $DIR/issue-67185-2.rs:24:6 + | +LL | impl Foo for FooImpl {} + | ^^^ expected `3usize`, found `4usize` + | + = note: expected type `3usize` + found type `4usize` + +error[E0308]: mismatched types + --> $DIR/issue-67185-2.rs:24:6 + | +LL | impl Foo for FooImpl {} + | ^^^ expected `2usize`, found `3usize` + | + = note: expected type `2usize` + found type `3usize` + +error[E0308]: mismatched types + --> $DIR/issue-67185-2.rs:28:1 + | +LL | fn f(_: impl Foo) {} + | ^^^^^^^^^^^^^^^^^^^^ expected `2usize`, found `3usize` + | + = note: expected type `2usize` + found type `3usize` + +error[E0308]: mismatched types + --> $DIR/issue-67185-2.rs:28:1 + | +LL | fn f(_: impl Foo) {} + | ^^^^^^^^^^^^^^^^^^^^ expected `3usize`, found `4usize` + | + = note: expected type `3usize` + found type `4usize` + +error: aborting due to 5 previous errors + +For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/const-generics/lazy-normalization/issue-71986.rs b/src/test/ui/const-generics/lazy-normalization/issue-71986.rs new file mode 100644 index 000000000000..a07bf2a1a549 --- /dev/null +++ b/src/test/ui/const-generics/lazy-normalization/issue-71986.rs @@ -0,0 +1,8 @@ +// check-pass +#![allow(incomplete_features)] +#![feature(const_generics, lazy_normalization_consts)] + +pub trait Foo {} +pub fn bar>() {} + +fn main() {}