forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e9e13a6
commit 1544905
Showing
4 changed files
with
78 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
//@ edition:2024 | ||
//@ compile-flags: -Z validate-mir -Zunstable-options | ||
//@ run-rustfix | ||
|
||
#![deny(if_let_rescope)] | ||
#![feature(if_let_rescope)] | ||
|
||
struct Droppy; | ||
impl Drop for Droppy { | ||
fn drop(&mut self) { | ||
println!("dropped"); | ||
} | ||
} | ||
impl Droppy { | ||
fn get_ref(&self) -> Option<&u8> { | ||
None | ||
} | ||
} | ||
|
||
fn do_something<T>(_: &T) {} | ||
|
||
fn main() { | ||
let binding = Droppy; | ||
do_something(match binding.get_ref() { Some(value) => { value } _ => { &0 }}); | ||
//~^ ERROR: temporary value dropped while borrowed | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
//@ edition:2024 | ||
//@ compile-flags: -Z validate-mir -Zunstable-options | ||
//@ run-rustfix | ||
|
||
#![deny(if_let_rescope)] | ||
#![feature(if_let_rescope)] | ||
|
||
struct Droppy; | ||
impl Drop for Droppy { | ||
fn drop(&mut self) { | ||
println!("dropped"); | ||
} | ||
} | ||
impl Droppy { | ||
fn get_ref(&self) -> Option<&u8> { | ||
None | ||
} | ||
} | ||
|
||
fn do_something<T>(_: &T) {} | ||
|
||
fn main() { | ||
do_something(if let Some(value) = Droppy.get_ref() { value } else { &0 }); | ||
//~^ ERROR: temporary value dropped while borrowed | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
error[E0716]: temporary value dropped while borrowed | ||
--> $DIR/if-let-rescope-suggestions.rs:23:39 | ||
| | ||
LL | do_something(if let Some(value) = Droppy.get_ref() { value } else { &0 }); | ||
| ^^^^^^ - temporary value is freed at the end of this statement | ||
| | | ||
| creates a temporary value which is freed while still in use | ||
| | ||
note: lifetime for temporaries generated in `if let`s have been shorted in Edition 2024 | ||
--> $DIR/if-let-rescope-suggestions.rs:23:65 | ||
| | ||
LL | do_something(if let Some(value) = Droppy.get_ref() { value } else { &0 }); | ||
| ^ | ||
help: consider using a `let` binding to create a longer lived value | ||
| | ||
LL ~ let binding = Droppy; | ||
LL ~ do_something(if let Some(value) = binding.get_ref() { value } else { &0 }); | ||
| | ||
help: consider rewriting the `if` into `match` which preserves the extended lifetime | ||
| | ||
LL | do_something(match Droppy.get_ref() { Some(value) => { value } _ => { &0 }}); | ||
| ~~~~~ ++++++++++++++++ ~~~~ + | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0716`. |