Skip to content

Commit

Permalink
Rollup merge of rust-lang#74364 - lcnr:lazy-norm-tests, r=nikomatsakis
Browse files Browse the repository at this point in the history
add lazy normalization regression tests

We previously didn't have simple tests which fail if we aren't careful around lazy normalization.

We now do.
  • Loading branch information
Manishearth committed Jul 17, 2020
2 parents 966d33c + 5269459 commit 2451e80
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/test/ui/lazy_normalization_consts/trait-resolution-breakage.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// check-pass

trait Trait<T> {
const ASSOC_CONST: usize = 0;
}

impl Trait<()> for u8 {}

// `u8::ASSOC_CONST` is resolved today, but will be ambiguous
// under lazy normalization.
fn foo<T, U>() -> [(T, U); u8::ASSOC_CONST]
where
u8: Trait<T> + Trait<U>,
{
todo!()
}

fn main() {}
18 changes: 18 additions & 0 deletions src/test/ui/lazy_normalization_consts/unevaluated-consts.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// check-pass

// If we allow the parent generics here without using lazy normalization
// this results in a cycle error.
struct Foo<T, U>(T, U);

impl<T> From<[u8; 1 + 1]> for Foo<T, [u8; 1 + 1]> {
fn from(value: [u8; 1 + 1]) -> Foo<T, [u8; 1 + 1]> {
todo!();
}
}

fn break_me<T>()
where
[u8; 1 + 1]: From<[u8; 1 + 1]>
{}

fn main() {}

0 comments on commit 2451e80

Please sign in to comment.