| #![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 | |
| }; | |
| const _: () = { | |
| 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 | |
| } |