43 lines
1.3 KiB
Rust
43 lines
1.3 KiB
Rust
|
#![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
|
||
|
}
|