Skip to content

Commit

Permalink
Rollup merge of rust-lang#129627 - dingxiangfei2009:ensure-tail-expr-…
Browse files Browse the repository at this point in the history
…in-let-block-works, r=jieyouxu

Ensure that tail expr receive lifetime extension

cc `@jieyouxu` `@traviscross`

It just came to me that we should add a test to make sure that we honor the contract from the temporary lifetime rule rust-lang#121346. We should continue to implement this rule in Edition 2021 onward and shorter tail expression lifetime should not override it.

This is a small PR to improve our assurance and establish a stronger contract.

Tracked by rust-lang#123739
  • Loading branch information
matthiaskrgr authored and mati865 committed Nov 12, 2024
2 parents 3035d51 + e2f613d commit 99b22be
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
("Hello", 1) [(("Hello", 1),)] "Hello" "Hello" "Hello" ("Hello", 1) ("Hello", 1) ("Hello", 1)
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
("Hello", 1) [(("Hello", 1),)] "Hello" "Hello" "Hello" ("Hello", 1) ("Hello", 1) ("Hello", 1)
25 changes: 19 additions & 6 deletions tests/ui/lifetimes/temporary-lifetime-extension.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,21 @@
//@ check-pass
// This is a test for the new temporary lifetime behaviour as implemented for RFC 3606.
// In essence, with #3606 we can write the following variable initialisation without
// a borrow checking error because the temporary lifetime is automatically extended.
// ```rust
// let x = if condition() {
// &something()
// } else {
// &something_else()
// };
// ```
// More details can be found in https://github.com/rust-lang/rfcs/pull/3606

//@ run-pass
//@ check-run-results
//@ revisions: edition2021 edition2024
//@ [edition2021] edition: 2021
//@ [edition2024] edition: 2024
//@ [edition2024] compile-flags: -Z unstable-options

fn temp() -> (String, i32) {
(String::from("Hello"), 1)
Expand All @@ -13,11 +30,7 @@ fn main() {
let _ = 123;
&(*temp().0)[..]
};
let f = if true {
&temp()
} else {
&temp()
};
let f = if true { &temp() } else { &temp() };
let g = match true {
true => &temp(),
false => {
Expand Down

0 comments on commit 99b22be

Please sign in to comment.