]> git.lizzy.rs Git - rust.git/commitdiff
Add long diagnostic for E0269
authorManish Goregaokar <manishsmail@gmail.com>
Sun, 19 Jul 2015 13:43:25 +0000 (19:13 +0530)
committerManish Goregaokar <manishsmail@gmail.com>
Thu, 23 Jul 2015 07:19:26 +0000 (12:49 +0530)
src/librustc/diagnostics.rs

index 0d949c98023c6e9c0821d6f355b38707ac260cbc..969293800f1b1ebd81ddd148048f2523301c42b2 100644 (file)
@@ -1121,6 +1121,41 @@ fn some_func() {
 ```
 "##,
 
+E0269: r##"
+Functions must eventually return a value of their return type. For example, in
+the following function
+
+```
+fn foo(x: u8) -> u8 {
+    if x > 0 {
+        x // alternatively, `return x`
+    }
+    // nothing here
+}
+```
+
+if the condition is true, the value `x` is returned, but if the condition is
+false, control exits the `if` block and reaches a place where nothing is being
+returned. All possible control paths must eventually return a `u8`, which is not
+happening here.
+
+An easy fix for this in a complicated function is to specify a default return
+value, if possible:
+
+```
+fn foo(x: u8) -> u8 {
+    if x > 0 {
+        x // alternatively, `return x`
+    }
+    // lots of other if branches
+    0 // return 0 if all else fails
+}
+```
+
+It is advisable to find out what the unhandled cases are and check for them,
+returning an appropriate value or panicking if necessary.
+"##,
+
 E0271: r##"
 This is because of a type mismatch between the associated type of some
 trait (e.g. `T::Bar`, where `T` implements `trait Quux { type Bar; }`)
@@ -1681,7 +1716,6 @@ fn foo<'a>(arg: &Box<SomeTrait+'a>) { ... }
 //  E0134,
 //  E0135,
     E0264, // unknown external lang item
-    E0269, // not all control paths return a value
     E0270, // computation may converge in a function marked as diverging
     E0272, // rustc_on_unimplemented attribute refers to non-existent type parameter
     E0273, // rustc_on_unimplemented must have named format arguments