Skip to content

Commit

Permalink
Extend tests to cover runtime promotion cases, too
Browse files Browse the repository at this point in the history
  • Loading branch information
oli-obk committed Dec 1, 2022
1 parent 9ec72df commit d779062
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 6 deletions.
6 changes: 5 additions & 1 deletion src/test/ui/consts/promoted_const_call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,8 @@ pub const C: () = {
//~| ERROR: temporary value dropped while borrowed
};

fn main() {}
fn main() {
let _: &'static _ = &id(&Panic);
//~^ ERROR: temporary value dropped while borrowed
//~| ERROR: temporary value dropped while borrowed
}
22 changes: 21 additions & 1 deletion src/test/ui/consts/promoted_const_call.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,26 @@ LL | let _: &'static _ = &id(&Panic);
| | creates a temporary value which is freed while still in use
| type annotation requires that borrow lasts for `'static`

error: aborting due to 2 previous errors
error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call.rs:13:26
|
LL | let _: &'static _ = &id(&Panic);
| ---------- ^^^^^^^^^^ creates a temporary value which is freed while still in use
| |
| type annotation requires that borrow lasts for `'static`
...
LL | }
| - temporary value is freed at the end of this statement

error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call.rs:13:30
|
LL | let _: &'static _ = &id(&Panic);
| ---------- ^^^^^ - temporary value is freed at the end of this statement
| | |
| | creates a temporary value which is freed while still in use
| type annotation requires that borrow lasts for `'static`

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0716`.
6 changes: 5 additions & 1 deletion src/test/ui/consts/promoted_const_call2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,8 @@ pub const C: () = {
//~| ERROR: destructor of `String` cannot be evaluated at compile-time
};

fn main() {}
fn main() {
let _: &'static _ = &id(&String::new());
//~^ ERROR: temporary value dropped while borrowed
//~| ERROR: temporary value dropped while borrowed
}
22 changes: 21 additions & 1 deletion src/test/ui/consts/promoted_const_call2.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,33 @@ LL | let _: &'static _ = &id(&String::new());
| | creates a temporary value which is freed while still in use
| type annotation requires that borrow lasts for `'static`

error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call2.rs:11:26
|
LL | let _: &'static _ = &id(&String::new());
| ---------- ^^^^^^^^^^^^^^^^^^ creates a temporary value which is freed while still in use
| |
| type annotation requires that borrow lasts for `'static`
...
LL | }
| - temporary value is freed at the end of this statement

error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call2.rs:11:30
|
LL | let _: &'static _ = &id(&String::new());
| ---------- ^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
| | |
| | creates a temporary value which is freed while still in use
| type annotation requires that borrow lasts for `'static`

error[E0493]: destructor of `String` cannot be evaluated at compile-time
--> $DIR/promoted_const_call2.rs:4:30
|
LL | let _: &'static _ = &id(&String::new());
| ^^^^^^^^^^^^^ the destructor for this type cannot be evaluated in constants

error: aborting due to 3 previous errors
error: aborting due to 5 previous errors

Some errors have detailed explanations: E0493, E0716.
For more information about an error, try `rustc --explain E0493`.
12 changes: 11 additions & 1 deletion src/test/ui/consts/promoted_const_call3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,14 @@ pub const C: () = {
//~^ ERROR: temporary value dropped while borrowed
};

fn main() {}
fn main() {
let _: &'static _ = &String::new();
//~^ ERROR: temporary value dropped while borrowed

let _: &'static _ = &id(&String::new());
//~^ ERROR: temporary value dropped while borrowed
//~| ERROR: temporary value dropped while borrowed

let _: &'static _ = &std::mem::ManuallyDrop::new(String::new());
//~^ ERROR: temporary value dropped while borrowed
}
44 changes: 43 additions & 1 deletion src/test/ui/consts/promoted_const_call3.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,49 @@ LL |
LL | };
| - temporary value is freed at the end of this statement

error: aborting due to 6 previous errors
error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call3.rs:17:26
|
LL | let _: &'static _ = &String::new();
| ---------- ^^^^^^^^^^^^^ creates a temporary value which is freed while still in use
| |
| type annotation requires that borrow lasts for `'static`
...
LL | }
| - temporary value is freed at the end of this statement

error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call3.rs:20:26
|
LL | let _: &'static _ = &id(&String::new());
| ---------- ^^^^^^^^^^^^^^^^^^ creates a temporary value which is freed while still in use
| |
| type annotation requires that borrow lasts for `'static`
...
LL | }
| - temporary value is freed at the end of this statement

error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call3.rs:20:30
|
LL | let _: &'static _ = &id(&String::new());
| ---------- ^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
| | |
| | creates a temporary value which is freed while still in use
| type annotation requires that borrow lasts for `'static`

error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call3.rs:24:26
|
LL | let _: &'static _ = &std::mem::ManuallyDrop::new(String::new());
| ---------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ creates a temporary value which is freed while still in use
| |
| type annotation requires that borrow lasts for `'static`
LL |
LL | }
| - temporary value is freed at the end of this statement

error: aborting due to 10 previous errors

Some errors have detailed explanations: E0493, E0716.
For more information about an error, try `rustc --explain E0493`.

0 comments on commit d779062

Please sign in to comment.