diff options
Diffstat (limited to 'src/test/ui/traits/cache-reached-depth-ice.rs')
-rw-r--r-- | src/test/ui/traits/cache-reached-depth-ice.rs | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/src/test/ui/traits/cache-reached-depth-ice.rs b/src/test/ui/traits/cache-reached-depth-ice.rs deleted file mode 100644 index c36ac0857..000000000 --- a/src/test/ui/traits/cache-reached-depth-ice.rs +++ /dev/null @@ -1,45 +0,0 @@ -#![feature(rustc_attrs)] - -// Test for a particular corner case where the evaluation -// cache can get out of date. The problem here is that -// when we cache C, we have observed that it reaches -// to depth 2 (the node for B), but we later realize -// that B itself depends on A (reached depth 0). We -// failed to update the depth for C transitively, which -// resulted in an assertion failure when it was referenced -// from D. -// -// A (reached depth 0) -// E -// B // depth 2 -- reached depth = 0 -// C // depth 3 -- reached depth = 2 (should be 0) -// B -// A // depth 0 -// D (depth 1) -// C (cache -- reached depth = 2) - -struct A { - e: E, - d: C, -} - -struct E { - b: B, -} - -struct B { - a: Option<Box<A>>, - c: C, -} - -struct C { - b: Option<Box<B>>, -} - -#[rustc_evaluate_where_clauses] -fn test<X: ?Sized + Send>() {} - -fn main() { - test::<A>(); - //~^ ERROR evaluate(Binder(TraitPredicate(<A as std::marker::Send>, polarity:Positive), [])) = Ok(EvaluatedToOk) -} |