-
Notifications
You must be signed in to change notification settings - Fork 488
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Explicitly describe temporary drop order difference between return expr;
and final block expression
#452
Comments
Its probably worth expanding this issue to also cover the difference between (To which many might say "... there's a difference between those two?" Yes, and its similar to the difference cited in this issues title.) For the start of a neat test for illustrating this, you might look at the tests I added related to rust-lang/rust#54556, such as https://github.com/rust-lang/rust/blob/master/src/test/ui/nll/issue-54556-stephaneyfx.rs. Its diagnostic output under NLL tries hard to explain what the issue is: link:
|
See also discussion here: rust-lang/rust#37612 which has examples where you get a deadlock because a temporary is surviving longer than the programmer expected, due to the these rules regarding the dynamic extent of temporaries. |
Due to temporaries in the final expression of a block living longer than the block expression itself, there's actually a difference between a return expression and the final expression in a block. This should be explicitly documented so that we can link to people about it.
Associated Rust issue: rust-lang/rust#21114
The text was updated successfully, but these errors were encountered: