Skip to content

Commit

Permalink
Rollup merge of #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 c9010d6 + 5269459 commit 344b5e0
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 344b5e0

Please sign in to comment.