Rollup merge of #64347 - GuillaumeGomez:E0312, r=oli-obk

Add long error explanation for E0312

Part of #61137.
This commit is contained in:
Mazdak Farrokhzad 2019-09-21 16:01:28 +02:00 committed by GitHub
commit a93c0da8d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 50 additions and 3 deletions

View File

@ -1347,6 +1347,39 @@ struct Foo<T: 'static> {
```
"##,
E0312: r##"
Reference's lifetime of borrowed content doesn't match the expected lifetime.
Erroneous code example:
```compile_fail,E0312
pub fn opt_str<'a>(maybestr: &'a Option<String>) -> &'static str {
if maybestr.is_none() {
"(none)"
} else {
let s: &'a str = maybestr.as_ref().unwrap();
s // Invalid lifetime!
}
}
```
To fix this error, either lessen the expected lifetime or find a way to not have
to use this reference outside of its current scope (by running the code directly
in the same block for example?):
```
// In this case, we can fix the issue by switching from "static" lifetime to 'a
pub fn opt_str<'a>(maybestr: &'a Option<String>) -> &'a str {
if maybestr.is_none() {
"(none)"
} else {
let s: &'a str = maybestr.as_ref().unwrap();
s // Ok!
}
}
```
"##,
E0317: r##"
This error occurs when an `if` expression without an `else` block is used in a
context where a type other than `()` is expected, for example a `let`
@ -2202,7 +2235,6 @@ static X: u32 = 42;
// E0304, // expected signed integer constant
// E0305, // expected constant
E0311, // thing may not live long enough
E0312, // lifetime of reference outlives lifetime of borrowed content
E0313, // lifetime of borrowed pointer outlives lifetime of captured
// variable
E0314, // closure outlives stack frame

View File

@ -20,3 +20,4 @@ LL | fn test<'x>(x: &'x isize) {
error: aborting due to previous error
For more information about this error, try `rustc --explain E0312`.

View File

@ -17,3 +17,4 @@ LL | foo(|a, b| b)
error: aborting due to previous error
For more information about this error, try `rustc --explain E0312`.

View File

@ -26,3 +26,4 @@ LL | pub fn opt_str3<'a>(maybestr: &'a Option<String>) -> &'static str {
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0312`.

View File

@ -26,3 +26,4 @@ LL | pub fn opt_str3<'a>(maybestr: &'a Option<String>) -> &'static str {
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0312`.

View File

@ -20,3 +20,4 @@ LL | | }
error: aborting due to previous error
For more information about this error, try `rustc --explain E0312`.

View File

@ -13,3 +13,4 @@ LL | fn static_to_a_to_static_through_ref_in_tuple<'a>(x: &'a u32) -> &'static u
error: aborting due to previous error
For more information about this error, try `rustc --explain E0312`.

View File

@ -13,3 +13,4 @@ LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
error: aborting due to previous error
For more information about this error, try `rustc --explain E0312`.

View File

@ -13,3 +13,4 @@ LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
error: aborting due to previous error
For more information about this error, try `rustc --explain E0312`.

View File

@ -13,3 +13,4 @@ LL | fn foo<'a, T: Foo<'a>>() -> &'static u32 {
error: aborting due to previous error
For more information about this error, try `rustc --explain E0312`.

View File

@ -17,3 +17,4 @@ LL | fn or<'b,G:GetRef<'b>>(&self, g2: G) -> &'a isize {
error: aborting due to previous error
For more information about this error, try `rustc --explain E0312`.

View File

@ -17,3 +17,4 @@ LL | fn get<'a,'b,G:GetRef<'a, isize>>(g1: G, b: &'b isize) -> &'b isize {
error: aborting due to previous error
For more information about this error, try `rustc --explain E0312`.

View File

@ -57,3 +57,4 @@ LL | fn nested<'x>(x: &'x isize) {
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0312`.

View File

@ -30,4 +30,5 @@ LL | static_id_indirect(&v);
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0621`.
Some errors have detailed explanations: E0312, E0621.
For more information about an error, try `rustc --explain E0312`.

View File

@ -23,3 +23,4 @@ LL | | });
error: aborting due to previous error
For more information about this error, try `rustc --explain E0312`.

View File

@ -105,4 +105,5 @@ LL | <IndirectEvil>::static_evil(b)
error: aborting due to 5 previous errors
For more information about this error, try `rustc --explain E0478`.
Some errors have detailed explanations: E0312, E0478.
For more information about an error, try `rustc --explain E0312`.