More tests

This commit is contained in:
Oli Scherer 2022-12-01 13:41:59 +00:00
parent d779062758
commit b4a6047e4b
5 changed files with 160 additions and 1 deletions

View file

@ -13,4 +13,7 @@ fn main() {
let _: &'static _ = &id(&Panic);
//~^ ERROR: temporary value dropped while borrowed
//~| ERROR: temporary value dropped while borrowed
let _: &'static _ = &&(Panic, 0).1;
//~^ ERROR: temporary value dropped while borrowed
//~| ERROR: temporary value dropped while borrowed
}

View file

@ -38,6 +38,28 @@ 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 4 previous errors
error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call.rs:16:26
|
LL | let _: &'static _ = &&(Panic, 0).1;
| ---------- ^^^^^^^^^^^^^ 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:16:27
|
LL | let _: &'static _ = &&(Panic, 0).1;
| ---------- ^^^^^^^^^^ 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: aborting due to 6 previous errors
For more information about this error, try `rustc --explain E0716`.

View file

@ -0,0 +1,18 @@
// run-pass
use std::sync::atomic::*;
static FLAG: AtomicBool = AtomicBool::new(false);
struct NoisyDrop(&'static str);
impl Drop for NoisyDrop {
fn drop(&mut self) {
FLAG.store(true, Ordering::SeqCst);
}
}
fn main() {
{
let _val = &&(NoisyDrop("drop!"), 0).1;
}
assert!(FLAG.load(Ordering::SeqCst));
}

View file

@ -0,0 +1,42 @@
#![feature(rustc_attrs)]
#![feature(staged_api)]
#![stable(feature = "a", since = "1.0.0")]
#[rustc_promotable]
#[stable(feature = "a", since = "1.0.0")]
#[rustc_const_stable(feature = "a", since = "1.0.0")]
pub const fn id<T>(x: &'static T) -> &'static T { x }
#[rustc_promotable]
#[stable(feature = "a", since = "1.0.0")]
#[rustc_const_stable(feature = "a", since = "1.0.0")]
pub const fn new_string() -> String {
String::new()
}
#[rustc_promotable]
#[stable(feature = "a", since = "1.0.0")]
#[rustc_const_stable(feature = "a", since = "1.0.0")]
pub const fn new_manually_drop<T>(t: T) -> std::mem::ManuallyDrop<T> {
std::mem::ManuallyDrop::new(t)
}
const C: () = {
let _: &'static _ = &id(&new_string());
//~^ ERROR destructor of `String` cannot be evaluated at compile-time
//~| ERROR: temporary value dropped while borrowed
//~| ERROR: temporary value dropped while borrowed
let _: &'static _ = &new_manually_drop(new_string());
//~^ ERROR: temporary value dropped while borrowed
};
fn main() {
let _: &'static _ = &id(&new_string());
//~^ ERROR: temporary value dropped while borrowed
//~| ERROR: temporary value dropped while borrowed
let _: &'static _ = &new_manually_drop(new_string());
//~^ ERROR: temporary value dropped while borrowed
}

View file

@ -0,0 +1,74 @@
error[E0493]: destructor of `String` cannot be evaluated at compile-time
--> $DIR/promoted_const_call5.rs:26:30
|
LL | let _: &'static _ = &id(&new_string());
| ^^^^^^^^^^^^ - value is dropped here
| |
| the destructor for this type cannot be evaluated in constants
error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call5.rs:26:26
|
LL | let _: &'static _ = &id(&new_string());
| ---------- ^^^^^^^^^^^^^^^^^ 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_call5.rs:26:30
|
LL | let _: &'static _ = &id(&new_string());
| ----^^^^^^^^^^^^-- temporary value is freed at the end of this statement
| | |
| | creates a temporary value which is freed while still in use
| argument requires that borrow lasts for `'static`
error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call5.rs:31:26
|
LL | let _: &'static _ = &new_manually_drop(new_string());
| ---------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 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[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call5.rs:36:26
|
LL | let _: &'static _ = &id(&new_string());
| ---------- ^^^^^^^^^^^^^^^^^ 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_call5.rs:36:30
|
LL | let _: &'static _ = &id(&new_string());
| ----^^^^^^^^^^^^-- temporary value is freed at the end of this statement
| | |
| | creates a temporary value which is freed while still in use
| argument requires that borrow lasts for `'static`
error[E0716]: temporary value dropped while borrowed
--> $DIR/promoted_const_call5.rs:40:26
|
LL | let _: &'static _ = &new_manually_drop(new_string());
| ---------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 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 7 previous errors
Some errors have detailed explanations: E0493, E0716.
For more information about an error, try `rustc --explain E0493`.