915a581bcb
Changes from #88558 allowed using `~const Drop` in constants by introducing a new `NeedsNonConstDrop` qualif. The new qualif was also used for promotion purposes, and allowed promotion to happen for values that needs to be dropped but which do have a const drop impl. Since for promoted the drop implementation is never executed, this lead to observable change in behaviour. For example: ```rust struct Panic(); impl const Drop for Panic { fn drop(&mut self) { panic!(); } } fn main() { let _ = &Panic(); } ``` Restore the use of `NeedsDrop` qualif during promotion to avoid the issue.
16 lines
318 B
Rust
16 lines
318 B
Rust
#![feature(const_trait_impl)]
|
|
#![feature(const_mut_refs)]
|
|
|
|
struct A();
|
|
|
|
impl const Drop for A {
|
|
fn drop(&mut self) {}
|
|
}
|
|
|
|
const C: A = A();
|
|
|
|
fn main() {
|
|
let _: &'static A = &A(); //~ ERROR temporary value dropped while borrowed
|
|
let _: &'static [A] = &[C]; //~ ERROR temporary value dropped while borrowed
|
|
}
|