2022-12-01 07:41:59 -06:00
|
|
|
#![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
|
2024-02-01 16:42:36 -06:00
|
|
|
};
|
2022-12-01 07:41:59 -06:00
|
|
|
|
2024-02-01 16:42:36 -06:00
|
|
|
const _: () = {
|
2022-12-01 07:41:59 -06:00
|
|
|
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
|
|
|
|
}
|