Skip to content

Commit

Permalink
Rollup merge of rust-lang#64347 - GuillaumeGomez:E0312, r=oli-obk
Browse files Browse the repository at this point in the history
Add long error explanation for E0312

Part of rust-lang#61137.
  • Loading branch information
Centril committed Sep 21, 2019
2 parents d021dba + cf6a1fe commit a93c0da
Show file tree
Hide file tree
Showing 16 changed files with 50 additions and 3 deletions.
34 changes: 33 additions & 1 deletion src/librustc/error_codes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/test/ui/issues/issue-10291.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
1 change: 1 addition & 0 deletions src/test/ui/issues/issue-52533.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
1 change: 1 addition & 0 deletions src/test/ui/lub-if.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
1 change: 1 addition & 0 deletions src/test/ui/lub-match.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
1 change: 1 addition & 0 deletions src/test/ui/nll/issue-52742.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ LL | | }

error: aborting due to previous error

For more information about this error, try `rustc --explain E0312`.
1 change: 1 addition & 0 deletions src/test/ui/nll/issue-55401.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
1 change: 1 addition & 0 deletions src/test/ui/regions/regions-early-bound-error.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
1 change: 1 addition & 0 deletions src/test/ui/regions/regions-nested-fns.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
3 changes: 2 additions & 1 deletion src/test/ui/regions/regions-static-bound.migrate.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@ LL | | });

error: aborting due to previous error

For more information about this error, try `rustc --explain E0312`.
3 changes: 2 additions & 1 deletion src/test/ui/wf/wf-static-method.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -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`.

0 comments on commit a93c0da

Please sign in to comment.