]> git.lizzy.rs Git - rust.git/commitdiff
Add long diagnostic explanation for E0275
authorManish Goregaokar <manishsmail@gmail.com>
Wed, 22 Jul 2015 15:43:22 +0000 (21:13 +0530)
committerManish Goregaokar <manishsmail@gmail.com>
Fri, 24 Jul 2015 18:34:11 +0000 (00:04 +0530)
src/librustc/diagnostics.rs

index cb29f01776578f52c6a8ff99d6028f2a81da2993..5bd03ce598a3d00257efd36606f036b6f96dcee4 100644 (file)
@@ -1439,6 +1439,29 @@ trait Index<Idx> { ... }
 trait.
 "##,
 
+E0275: r##"
+This error occurs when there was a recursive trait requirement that overflowed
+before it could be evaluated. Often this means that there is unbounded recursion
+in resolving some type bounds.
+
+For example, in the following code
+
+```
+trait Foo {}
+
+struct Bar<T>(T);
+
+impl<T> Foo for T where Bar<T>: Foo {}
+```
+
+to determine if a `T` is `Foo`, we need to check if `Bar<T>` is `Foo`. However,
+to do this check, we need to determine that `Bar<Bar<T>>` is `Foo`. To determine
+this, we check if `Bar<Bar<Bar<T>>>` is `Foo`, and so on. This is clearly a
+recursive requirement that can't be resolved directly.
+
+Consider changing your trait bounds so that they're less self-referential.
+"##,
+
 E0277: r##"
 You tried to use a type which doesn't implement some trait in a place which
 expected that trait. Erroneous code example:
@@ -1863,7 +1886,6 @@ fn foo<'a>(arg: &Box<SomeTrait+'a>) { ... }
 //  E0134,
 //  E0135,
     E0264, // unknown external lang item
-    E0275, // overflow evaluating requirement
     E0276, // requirement appears on impl method but not on corresponding trait method
     E0278, // requirement is not satisfied
     E0279, // requirement is not satisfied