ensure that tail expr receive lifetime extension

This commit is contained in:
Ding Xiang Fei 2024-08-27 05:01:42 +08:00
parent c22887b4d9
commit aee8152805
No known key found for this signature in database
GPG Key ID: 3CD748647EEF6359
3 changed files with 21 additions and 6 deletions

View File

@ -0,0 +1 @@
("Hello", 1) [(("Hello", 1),)] "Hello" "Hello" "Hello" ("Hello", 1) ("Hello", 1) ("Hello", 1)

View File

@ -0,0 +1 @@
("Hello", 1) [(("Hello", 1),)] "Hello" "Hello" "Hello" ("Hello", 1) ("Hello", 1) ("Hello", 1)

View File

@ -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)
@ -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 => {