1
Fork 0

Rollup merge of #102194 - fee1-dead-contrib:improve-const-drop, r=oli-obk

Note the type when unable to drop values in compile time
This commit is contained in:
fee1-dead 2022-09-25 22:06:39 +08:00 committed by GitHub
commit b7d9de72ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
37 changed files with 158 additions and 150 deletions

View file

@ -1009,7 +1009,10 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
if needs_non_const_drop { if needs_non_const_drop {
self.check_op_spanned( self.check_op_spanned(
ops::LiveDrop { dropped_at: Some(terminator.source_info.span) }, ops::LiveDrop {
dropped_at: Some(terminator.source_info.span),
dropped_ty: ty_of_dropped_place,
},
err_span, err_span,
); );
} }

View file

@ -422,10 +422,11 @@ impl<'tcx> NonConstOp<'tcx> for InlineAsm {
} }
#[derive(Debug)] #[derive(Debug)]
pub struct LiveDrop { pub struct LiveDrop<'tcx> {
pub dropped_at: Option<Span>, pub dropped_at: Option<Span>,
pub dropped_ty: Ty<'tcx>,
} }
impl<'tcx> NonConstOp<'tcx> for LiveDrop { impl<'tcx> NonConstOp<'tcx> for LiveDrop<'tcx> {
fn build_error( fn build_error(
&self, &self,
ccx: &ConstCx<'_, 'tcx>, ccx: &ConstCx<'_, 'tcx>,
@ -435,9 +436,13 @@ impl<'tcx> NonConstOp<'tcx> for LiveDrop {
ccx.tcx.sess, ccx.tcx.sess,
span, span,
E0493, E0493,
"destructors cannot be evaluated at compile-time" "destructor of `{}` cannot be evaluated at compile-time",
self.dropped_ty,
);
err.span_label(
span,
format!("the destructor for this type cannot be evaluated in {}s", ccx.const_kind()),
); );
err.span_label(span, format!("{}s cannot evaluate destructors", ccx.const_kind()));
if let Some(span) = self.dropped_at { if let Some(span) = self.dropped_at {
err.span_label(span, "value is dropped here"); err.span_label(span, "value is dropped here");
} }

View file

@ -1,6 +1,6 @@
use rustc_middle::mir::visit::Visitor; use rustc_middle::mir::visit::Visitor;
use rustc_middle::mir::{self, BasicBlock, Location}; use rustc_middle::mir::{self, BasicBlock, Location};
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::{Ty, TyCtxt};
use rustc_span::{symbol::sym, Span}; use rustc_span::{symbol::sym, Span};
use super::check::Qualifs; use super::check::Qualifs;
@ -58,9 +58,9 @@ impl<'mir, 'tcx> std::ops::Deref for CheckLiveDrops<'mir, 'tcx> {
} }
} }
impl CheckLiveDrops<'_, '_> { impl<'tcx> CheckLiveDrops<'_, 'tcx> {
fn check_live_drop(&self, span: Span) { fn check_live_drop(&self, span: Span, dropped_ty: Ty<'tcx>) {
ops::LiveDrop { dropped_at: None }.build_error(self.ccx, span).emit(); ops::LiveDrop { dropped_at: None, dropped_ty }.build_error(self.ccx, span).emit();
} }
} }
@ -90,7 +90,7 @@ impl<'tcx> Visitor<'tcx> for CheckLiveDrops<'_, 'tcx> {
} }
if dropped_place.is_indirect() { if dropped_place.is_indirect() {
self.check_live_drop(terminator.source_info.span); self.check_live_drop(terminator.source_info.span, dropped_ty);
return; return;
} }
@ -101,7 +101,7 @@ impl<'tcx> Visitor<'tcx> for CheckLiveDrops<'_, 'tcx> {
if self.qualifs.needs_non_const_drop(self.ccx, dropped_place.local, location) { if self.qualifs.needs_non_const_drop(self.ccx, dropped_place.local, location) {
// Use the span where the dropped local was declared for the error. // Use the span where the dropped local was declared for the error.
let span = self.body.local_decls[dropped_place.local].source_info.span; let span = self.body.local_decls[dropped_place.local].source_info.span;
self.check_live_drop(span); self.check_live_drop(span, dropped_ty);
} }
} }

View file

@ -63,7 +63,7 @@ static STATIC8: SafeStruct = SafeStruct{field1: SafeEnum::Variant1,
// This example should fail because field1 in the base struct is not safe // This example should fail because field1 in the base struct is not safe
static STATIC9: SafeStruct = SafeStruct{field1: SafeEnum::Variant1, static STATIC9: SafeStruct = SafeStruct{field1: SafeEnum::Variant1,
..SafeStruct{field1: SafeEnum::Variant3(WithDtor), ..SafeStruct{field1: SafeEnum::Variant3(WithDtor),
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
field2: SafeEnum::Variant1}}; field2: SafeEnum::Variant1}};
struct UnsafeStruct; struct UnsafeStruct;

View file

@ -1,4 +1,4 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `SafeStruct` cannot be evaluated at compile-time
--> $DIR/check-static-values-constraints.rs:65:43 --> $DIR/check-static-values-constraints.rs:65:43
| |
LL | ..SafeStruct{field1: SafeEnum::Variant3(WithDtor), LL | ..SafeStruct{field1: SafeEnum::Variant3(WithDtor),
@ -7,7 +7,7 @@ LL | |
LL | | field2: SafeEnum::Variant1}}; LL | | field2: SafeEnum::Variant1}};
| | ^- value is dropped here | | ^- value is dropped here
| |________________________________________________________________________________| | |________________________________________________________________________________|
| statics cannot evaluate destructors | the destructor for this type cannot be evaluated in statics
error[E0010]: allocations are not allowed in statics error[E0010]: allocations are not allowed in statics
--> $DIR/check-static-values-constraints.rs:79:33 --> $DIR/check-static-values-constraints.rs:79:33

View file

@ -14,16 +14,16 @@ const X2: FakeNeedsDrop = { let x; x = FakeNeedsDrop; x };
// error // error
const Y: FakeNeedsDrop = { let mut x = FakeNeedsDrop; x = FakeNeedsDrop; x }; const Y: FakeNeedsDrop = { let mut x = FakeNeedsDrop; x = FakeNeedsDrop; x };
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
// error // error
const Y2: FakeNeedsDrop = { let mut x; x = FakeNeedsDrop; x = FakeNeedsDrop; x }; const Y2: FakeNeedsDrop = { let mut x; x = FakeNeedsDrop; x = FakeNeedsDrop; x };
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
// error // error
const Z: () = { let mut x = None; x = Some(FakeNeedsDrop); }; const Z: () = { let mut x = None; x = Some(FakeNeedsDrop); };
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
// error // error
const Z2: () = { let mut x; x = None; x = Some(FakeNeedsDrop); }; const Z2: () = { let mut x; x = None; x = Some(FakeNeedsDrop); };
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of

View file

@ -1,34 +1,34 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `FakeNeedsDrop` cannot be evaluated at compile-time
--> $DIR/const_let.rs:16:32 --> $DIR/const_let.rs:16:32
| |
LL | const Y: FakeNeedsDrop = { let mut x = FakeNeedsDrop; x = FakeNeedsDrop; x }; LL | const Y: FakeNeedsDrop = { let mut x = FakeNeedsDrop; x = FakeNeedsDrop; x };
| ^^^^^ - value is dropped here | ^^^^^ - value is dropped here
| | | |
| constants cannot evaluate destructors | the destructor for this type cannot be evaluated in constants
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `FakeNeedsDrop` cannot be evaluated at compile-time
--> $DIR/const_let.rs:20:33 --> $DIR/const_let.rs:20:33
| |
LL | const Y2: FakeNeedsDrop = { let mut x; x = FakeNeedsDrop; x = FakeNeedsDrop; x }; LL | const Y2: FakeNeedsDrop = { let mut x; x = FakeNeedsDrop; x = FakeNeedsDrop; x };
| ^^^^^ - value is dropped here | ^^^^^ - value is dropped here
| | | |
| constants cannot evaluate destructors | the destructor for this type cannot be evaluated in constants
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<FakeNeedsDrop>` cannot be evaluated at compile-time
--> $DIR/const_let.rs:24:21 --> $DIR/const_let.rs:24:21
| |
LL | const Z: () = { let mut x = None; x = Some(FakeNeedsDrop); }; LL | const Z: () = { let mut x = None; x = Some(FakeNeedsDrop); };
| ^^^^^ - value is dropped here | ^^^^^ - value is dropped here
| | | |
| constants cannot evaluate destructors | the destructor for this type cannot be evaluated in constants
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<FakeNeedsDrop>` cannot be evaluated at compile-time
--> $DIR/const_let.rs:28:22 --> $DIR/const_let.rs:28:22
| |
LL | const Z2: () = { let mut x; x = None; x = Some(FakeNeedsDrop); }; LL | const Z2: () = { let mut x; x = None; x = Some(FakeNeedsDrop); };
| ^^^^^ - value is dropped here | ^^^^^ - value is dropped here
| | | |
| constants cannot evaluate destructors | the destructor for this type cannot be evaluated in constants
error: aborting due to 4 previous errors error: aborting due to 4 previous errors

View file

@ -4,7 +4,7 @@
// We will likely have to change this behavior before we allow `&mut` in a `const`. // We will likely have to change this behavior before we allow `&mut` in a `const`.
const _: Vec<i32> = { const _: Vec<i32> = {
let mut x = Vec::<i32>::new(); //~ ERROR destructors cannot be evaluated at compile-time let mut x = Vec::<i32>::new(); //~ ERROR destructor of
let r = &mut x; //~ ERROR mutable references are not allowed in constants let r = &mut x; //~ ERROR mutable references are not allowed in constants
let y = x; let y = x;
y y

View file

@ -7,11 +7,11 @@ LL | let r = &mut x;
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information = note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable = help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Vec<i32>` cannot be evaluated at compile-time
--> $DIR/issue-65394.rs:7:9 --> $DIR/issue-65394.rs:7:9
| |
LL | let mut x = Vec::<i32>::new(); LL | let mut x = Vec::<i32>::new();
| ^^^^^ constants cannot evaluate destructors | ^^^^^ the destructor for this type cannot be evaluated in constants
... ...
LL | }; LL | };
| - value is dropped here | - value is dropped here

View file

@ -1,6 +1,6 @@
const _: Option<Vec<i32>> = { const _: Option<Vec<i32>> = {
let mut never_returned = Some(Vec::new()); let mut never_returned = Some(Vec::new());
let mut always_returned = None; //~ ERROR destructors cannot be evaluated at compile-time let mut always_returned = None; //~ ERROR destructor of
let mut i = 0; let mut i = 0;
loop { loop {

View file

@ -1,8 +1,8 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<Vec<i32>>` cannot be evaluated at compile-time
--> $DIR/livedrop.rs:3:9 --> $DIR/livedrop.rs:3:9
| |
LL | let mut always_returned = None; LL | let mut always_returned = None;
| ^^^^^^^^^^^^^^^^^^^ constants cannot evaluate destructors | ^^^^^^^^^^^^^^^^^^^ the destructor for this type cannot be evaluated in constants
... ...
LL | always_returned = never_returned; LL | always_returned = never_returned;
| --------------- value is dropped here | --------------- value is dropped here

View file

@ -1,14 +1,14 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<Vec<i32>>` cannot be evaluated at compile-time
--> $DIR/drop-fail.rs:8:9 --> $DIR/drop-fail.rs:8:9
| |
LL | let x = Some(Vec::new()); LL | let x = Some(Vec::new());
| ^ constants cannot evaluate destructors | ^ the destructor for this type cannot be evaluated in constants
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<Vec<i32>>` cannot be evaluated at compile-time
--> $DIR/drop-fail.rs:39:9 --> $DIR/drop-fail.rs:39:9
| |
LL | let mut tmp = None; LL | let mut tmp = None;
| ^^^^^^^ constants cannot evaluate destructors | ^^^^^^^ the destructor for this type cannot be evaluated in constants
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -6,7 +6,7 @@
const _: Option<Vec<i32>> = { const _: Option<Vec<i32>> = {
let y: Option<Vec<i32>> = None; let y: Option<Vec<i32>> = None;
let x = Some(Vec::new()); let x = Some(Vec::new());
//[stock,precise]~^ ERROR destructors cannot be evaluated at compile-time //[stock,precise]~^ ERROR destructor of
if true { if true {
x x
@ -19,7 +19,7 @@ const _: Option<Vec<i32>> = {
// existing analysis. // existing analysis.
const _: Vec<i32> = { const _: Vec<i32> = {
let vec_tuple = (Vec::new(),); let vec_tuple = (Vec::new(),);
//[stock]~^ ERROR destructors cannot be evaluated at compile-time //[stock]~^ ERROR destructor of
vec_tuple.0 vec_tuple.0
}; };
@ -27,7 +27,7 @@ const _: Vec<i32> = {
// This applies to single-field enum variants as well. // This applies to single-field enum variants as well.
const _: Vec<i32> = { const _: Vec<i32> = {
let x: Result<_, Vec<i32>> = Ok(Vec::new()); let x: Result<_, Vec<i32>> = Ok(Vec::new());
//[stock]~^ ERROR destructors cannot be evaluated at compile-time //[stock]~^ ERROR destructor of
match x { match x {
Ok(x) | Err(x) => x, Ok(x) | Err(x) => x,
@ -37,7 +37,7 @@ const _: Vec<i32> = {
const _: Option<Vec<i32>> = { const _: Option<Vec<i32>> = {
let mut some = Some(Vec::new()); let mut some = Some(Vec::new());
let mut tmp = None; let mut tmp = None;
//[stock,precise]~^ ERROR destructors cannot be evaluated at compile-time //[stock,precise]~^ ERROR destructor of
let mut i = 0; let mut i = 0;
while i < 10 { while i < 10 {

View file

@ -1,35 +1,35 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<Vec<i32>>` cannot be evaluated at compile-time
--> $DIR/drop-fail.rs:8:9 --> $DIR/drop-fail.rs:8:9
| |
LL | let x = Some(Vec::new()); LL | let x = Some(Vec::new());
| ^ constants cannot evaluate destructors | ^ the destructor for this type cannot be evaluated in constants
... ...
LL | }; LL | };
| - value is dropped here | - value is dropped here
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `(Vec<i32>,)` cannot be evaluated at compile-time
--> $DIR/drop-fail.rs:21:9 --> $DIR/drop-fail.rs:21:9
| |
LL | let vec_tuple = (Vec::new(),); LL | let vec_tuple = (Vec::new(),);
| ^^^^^^^^^ constants cannot evaluate destructors | ^^^^^^^^^ the destructor for this type cannot be evaluated in constants
... ...
LL | }; LL | };
| - value is dropped here | - value is dropped here
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Result<Vec<i32>, Vec<i32>>` cannot be evaluated at compile-time
--> $DIR/drop-fail.rs:29:9 --> $DIR/drop-fail.rs:29:9
| |
LL | let x: Result<_, Vec<i32>> = Ok(Vec::new()); LL | let x: Result<_, Vec<i32>> = Ok(Vec::new());
| ^ constants cannot evaluate destructors | ^ the destructor for this type cannot be evaluated in constants
... ...
LL | }; LL | };
| - value is dropped here | - value is dropped here
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<Vec<i32>>` cannot be evaluated at compile-time
--> $DIR/drop-fail.rs:39:9 --> $DIR/drop-fail.rs:39:9
| |
LL | let mut tmp = None; LL | let mut tmp = None;
| ^^^^^^^ constants cannot evaluate destructors | ^^^^^^^ the destructor for this type cannot be evaluated in constants
... ...
LL | }; LL | };
| - value is dropped here | - value is dropped here

View file

@ -1,4 +1,4 @@
const fn f<T>(_: Box<T>) {} const fn f<T>(_: Box<T>) {}
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
fn main() {} fn main() {}

View file

@ -1,10 +1,10 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Box<T>` cannot be evaluated at compile-time
--> $DIR/drop_box.rs:1:15 --> $DIR/drop_box.rs:1:15
| |
LL | const fn f<T>(_: Box<T>) {} LL | const fn f<T>(_: Box<T>) {}
| ^ - value is dropped here | ^ - value is dropped here
| | | |
| constant functions cannot evaluate destructors | the destructor for this type cannot be evaluated in constant functions
error: aborting due to previous error error: aborting due to previous error

View file

@ -1,8 +1,8 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `S` cannot be evaluated at compile-time
--> $DIR/drop_zst.rs:14:9 --> $DIR/drop_zst.rs:14:9
| |
LL | let s = S; LL | let s = S;
| ^ constant functions cannot evaluate destructors | ^ the destructor for this type cannot be evaluated in constant functions
error: aborting due to previous error error: aborting due to previous error

View file

@ -34,7 +34,7 @@ const fn foo35(a: bool, b: bool) -> bool { a ^ b }
struct Foo<T: ?Sized>(T); struct Foo<T: ?Sized>(T);
impl<T> Foo<T> { impl<T> Foo<T> {
const fn new(t: T) -> Self { Foo(t) } const fn new(t: T) -> Self { Foo(t) }
const fn into_inner(self) -> T { self.0 } //~ destructors cannot be evaluated const fn into_inner(self) -> T { self.0 } //~ destructor of
const fn get(&self) -> &T { &self.0 } const fn get(&self) -> &T { &self.0 }
const fn get_mut(&mut self) -> &mut T { &mut self.0 } const fn get_mut(&mut self) -> &mut T { &mut self.0 }
//~^ mutable references //~^ mutable references
@ -43,7 +43,7 @@ impl<T> Foo<T> {
} }
impl<'a, T> Foo<T> { impl<'a, T> Foo<T> {
const fn new_lt(t: T) -> Self { Foo(t) } const fn new_lt(t: T) -> Self { Foo(t) }
const fn into_inner_lt(self) -> T { self.0 } //~ destructors cannot be evaluated const fn into_inner_lt(self) -> T { self.0 } //~ destructor of
const fn get_lt(&'a self) -> &T { &self.0 } const fn get_lt(&'a self) -> &T { &self.0 }
const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 } const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 }
//~^ mutable references //~^ mutable references
@ -52,7 +52,7 @@ impl<'a, T> Foo<T> {
} }
impl<T: Sized> Foo<T> { impl<T: Sized> Foo<T> {
const fn new_s(t: T) -> Self { Foo(t) } const fn new_s(t: T) -> Self { Foo(t) }
const fn into_inner_s(self) -> T { self.0 } //~ ERROR destructors const fn into_inner_s(self) -> T { self.0 } //~ ERROR destructor
const fn get_s(&self) -> &T { &self.0 } const fn get_s(&self) -> &T { &self.0 }
const fn get_mut_s(&mut self) -> &mut T { &mut self.0 } const fn get_mut_s(&mut self) -> &mut T { &mut self.0 }
//~^ mutable references //~^ mutable references

View file

@ -1,10 +1,10 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Foo<T>` cannot be evaluated at compile-time
--> $DIR/min_const_fn.rs:37:25 --> $DIR/min_const_fn.rs:37:25
| |
LL | const fn into_inner(self) -> T { self.0 } LL | const fn into_inner(self) -> T { self.0 }
| ^^^^ - value is dropped here | ^^^^ - value is dropped here
| | | |
| constant functions cannot evaluate destructors | the destructor for this type cannot be evaluated in constant functions
error[E0658]: mutable references are not allowed in constant functions error[E0658]: mutable references are not allowed in constant functions
--> $DIR/min_const_fn.rs:39:22 --> $DIR/min_const_fn.rs:39:22
@ -33,13 +33,13 @@ LL | const fn get_mut(&mut self) -> &mut T { &mut self.0 }
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information = note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable = help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Foo<T>` cannot be evaluated at compile-time
--> $DIR/min_const_fn.rs:46:28 --> $DIR/min_const_fn.rs:46:28
| |
LL | const fn into_inner_lt(self) -> T { self.0 } LL | const fn into_inner_lt(self) -> T { self.0 }
| ^^^^ - value is dropped here | ^^^^ - value is dropped here
| | | |
| constant functions cannot evaluate destructors | the destructor for this type cannot be evaluated in constant functions
error[E0658]: mutable references are not allowed in constant functions error[E0658]: mutable references are not allowed in constant functions
--> $DIR/min_const_fn.rs:48:25 --> $DIR/min_const_fn.rs:48:25
@ -68,13 +68,13 @@ LL | const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 }
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information = note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable = help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Foo<T>` cannot be evaluated at compile-time
--> $DIR/min_const_fn.rs:55:27 --> $DIR/min_const_fn.rs:55:27
| |
LL | const fn into_inner_s(self) -> T { self.0 } LL | const fn into_inner_s(self) -> T { self.0 }
| ^^^^ - value is dropped here | ^^^^ - value is dropped here
| | | |
| constant functions cannot evaluate destructors | the destructor for this type cannot be evaluated in constant functions
error[E0658]: mutable references are not allowed in constant functions error[E0658]: mutable references are not allowed in constant functions
--> $DIR/min_const_fn.rs:57:24 --> $DIR/min_const_fn.rs:57:24
@ -191,21 +191,21 @@ LL | const fn inc(x: &mut i32) { *x += 1 }
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information = note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable = help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `AlanTuring<impl std::fmt::Debug>` cannot be evaluated at compile-time
--> $DIR/min_const_fn.rs:122:19 --> $DIR/min_const_fn.rs:122:19
| |
LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {} LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
| ^^ - value is dropped here | ^^ - value is dropped here
| | | |
| constant functions cannot evaluate destructors | the destructor for this type cannot be evaluated in constant functions
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `impl std::fmt::Debug` cannot be evaluated at compile-time
--> $DIR/min_const_fn.rs:124:18 --> $DIR/min_const_fn.rs:124:18
| |
LL | const fn no_apit(_x: impl std::fmt::Debug) {} LL | const fn no_apit(_x: impl std::fmt::Debug) {}
| ^^ - value is dropped here | ^^ - value is dropped here
| | | |
| constant functions cannot evaluate destructors | the destructor for this type cannot be evaluated in constant functions
error: aborting due to 24 previous errors error: aborting due to 24 previous errors

View file

@ -8,7 +8,7 @@ trait Foo<T> {
} }
trait Bar<T, U: Foo<T>> { trait Bar<T, U: Foo<T>> {
const F: u32 = (U::X, 42).1; //~ ERROR destructors cannot be evaluated at compile-time const F: u32 = (U::X, 42).1; //~ ERROR destructor of
} }
impl Foo<u32> for () { impl Foo<u32> for () {

View file

@ -1,10 +1,10 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `(T, u32)` cannot be evaluated at compile-time
--> $DIR/feature-gate-unleash_the_miri_inside_of_you.rs:11:20 --> $DIR/feature-gate-unleash_the_miri_inside_of_you.rs:11:20
| |
LL | const F: u32 = (U::X, 42).1; LL | const F: u32 = (U::X, 42).1;
| ^^^^^^^^^^ - value is dropped here | ^^^^^^^^^^ - value is dropped here
| | | |
| constants cannot evaluate destructors | the destructor for this type cannot be evaluated in constants
error: aborting due to previous error error: aborting due to previous error

View file

@ -6,13 +6,13 @@
// Mutable borrow of a field with drop impl. // Mutable borrow of a field with drop impl.
pub const fn f() { pub const fn f() {
let mut a: (u32, Option<String>) = (0, None); //~ ERROR destructors cannot be evaluated let mut a: (u32, Option<String>) = (0, None); //~ ERROR destructor of
let _ = &mut a.1; let _ = &mut a.1;
} }
// Mutable borrow of a type with drop impl. // Mutable borrow of a type with drop impl.
pub const A1: () = { pub const A1: () = {
let mut x = None; //~ ERROR destructors cannot be evaluated let mut x = None; //~ ERROR destructor of
let mut y = Some(String::new()); let mut y = Some(String::new());
let a = &mut x; let a = &mut x;
let b = &mut y; let b = &mut y;
@ -28,12 +28,12 @@ pub const A2: () = {
let b = &mut y; let b = &mut y;
std::mem::swap(a, b); std::mem::swap(a, b);
std::mem::forget(y); std::mem::forget(y);
let _z = x; //~ ERROR destructors cannot be evaluated let _z = x; //~ ERROR destructor of
}; };
// Shared borrow of a type that might be !Freeze and Drop. // Shared borrow of a type that might be !Freeze and Drop.
pub const fn g1<T>() { pub const fn g1<T>() {
let x: Option<T> = None; //~ ERROR destructors cannot be evaluated let x: Option<T> = None; //~ ERROR destructor of
let _ = x.is_some(); let _ = x.is_some();
} }
@ -41,24 +41,24 @@ pub const fn g1<T>() {
pub const fn g2<T>() { pub const fn g2<T>() {
let x: Option<T> = None; let x: Option<T> = None;
let _ = x.is_some(); let _ = x.is_some();
let _y = x; //~ ERROR destructors cannot be evaluated let _y = x; //~ ERROR destructor of
} }
// Mutable raw reference to a Drop type. // Mutable raw reference to a Drop type.
pub const fn address_of_mut() { pub const fn address_of_mut() {
let mut x: Option<String> = None; //~ ERROR destructors cannot be evaluated let mut x: Option<String> = None; //~ ERROR destructor of
&raw mut x; &raw mut x;
let mut y: Option<String> = None; //~ ERROR destructors cannot be evaluated let mut y: Option<String> = None; //~ ERROR destructor of
std::ptr::addr_of_mut!(y); std::ptr::addr_of_mut!(y);
} }
// Const raw reference to a Drop type. Conservatively assumed to allow mutation // Const raw reference to a Drop type. Conservatively assumed to allow mutation
// until resolution of https://github.com/rust-lang/rust/issues/56604. // until resolution of https://github.com/rust-lang/rust/issues/56604.
pub const fn address_of_const() { pub const fn address_of_const() {
let x: Option<String> = None; //~ ERROR destructors cannot be evaluated let x: Option<String> = None; //~ ERROR destructor of
&raw const x; &raw const x;
let y: Option<String> = None; //~ ERROR destructors cannot be evaluated let y: Option<String> = None; //~ ERROR destructor of
std::ptr::addr_of!(y); std::ptr::addr_of!(y);
} }

View file

@ -1,56 +1,56 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `(u32, Option<String>)` cannot be evaluated at compile-time
--> $DIR/qualif-indirect-mutation-fail.rs:9:9 --> $DIR/qualif-indirect-mutation-fail.rs:9:9
| |
LL | let mut a: (u32, Option<String>) = (0, None); LL | let mut a: (u32, Option<String>) = (0, None);
| ^^^^^ constant functions cannot evaluate destructors | ^^^^^ the destructor for this type cannot be evaluated in constant functions
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<String>` cannot be evaluated at compile-time
--> $DIR/qualif-indirect-mutation-fail.rs:15:9 --> $DIR/qualif-indirect-mutation-fail.rs:15:9
| |
LL | let mut x = None; LL | let mut x = None;
| ^^^^^ constants cannot evaluate destructors | ^^^^^ the destructor for this type cannot be evaluated in constants
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<String>` cannot be evaluated at compile-time
--> $DIR/qualif-indirect-mutation-fail.rs:31:9 --> $DIR/qualif-indirect-mutation-fail.rs:31:9
| |
LL | let _z = x; LL | let _z = x;
| ^^ constants cannot evaluate destructors | ^^ the destructor for this type cannot be evaluated in constants
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<T>` cannot be evaluated at compile-time
--> $DIR/qualif-indirect-mutation-fail.rs:36:9 --> $DIR/qualif-indirect-mutation-fail.rs:36:9
| |
LL | let x: Option<T> = None; LL | let x: Option<T> = None;
| ^ constant functions cannot evaluate destructors | ^ the destructor for this type cannot be evaluated in constant functions
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<T>` cannot be evaluated at compile-time
--> $DIR/qualif-indirect-mutation-fail.rs:44:9 --> $DIR/qualif-indirect-mutation-fail.rs:44:9
| |
LL | let _y = x; LL | let _y = x;
| ^^ constant functions cannot evaluate destructors | ^^ the destructor for this type cannot be evaluated in constant functions
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<String>` cannot be evaluated at compile-time
--> $DIR/qualif-indirect-mutation-fail.rs:52:9 --> $DIR/qualif-indirect-mutation-fail.rs:52:9
| |
LL | let mut y: Option<String> = None; LL | let mut y: Option<String> = None;
| ^^^^^ constant functions cannot evaluate destructors | ^^^^^ the destructor for this type cannot be evaluated in constant functions
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<String>` cannot be evaluated at compile-time
--> $DIR/qualif-indirect-mutation-fail.rs:49:9 --> $DIR/qualif-indirect-mutation-fail.rs:49:9
| |
LL | let mut x: Option<String> = None; LL | let mut x: Option<String> = None;
| ^^^^^ constant functions cannot evaluate destructors | ^^^^^ the destructor for this type cannot be evaluated in constant functions
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<String>` cannot be evaluated at compile-time
--> $DIR/qualif-indirect-mutation-fail.rs:62:9 --> $DIR/qualif-indirect-mutation-fail.rs:62:9
| |
LL | let y: Option<String> = None; LL | let y: Option<String> = None;
| ^ constant functions cannot evaluate destructors | ^ the destructor for this type cannot be evaluated in constant functions
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Option<String>` cannot be evaluated at compile-time
--> $DIR/qualif-indirect-mutation-fail.rs:59:9 --> $DIR/qualif-indirect-mutation-fail.rs:59:9
| |
LL | let x: Option<String> = None; LL | let x: Option<String> = None;
| ^ constant functions cannot evaluate destructors | ^ the destructor for this type cannot be evaluated in constant functions
error: aborting due to 9 previous errors error: aborting due to 9 previous errors

View file

@ -11,7 +11,7 @@ impl<T> Either<T, T> {
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[rustc_const_stable(feature = "foo", since = "1.0.0")] #[rustc_const_stable(feature = "foo", since = "1.0.0")]
pub const fn unwrap(self) -> T { pub const fn unwrap(self) -> T {
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
match self { match self {
Self::Left(t) => t, Self::Left(t) => t,
Self::Right(t) => t, Self::Right(t) => t,

View file

@ -1,8 +1,8 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Either<T, T>` cannot be evaluated at compile-time
--> $DIR/stable-precise-live-drops-in-libcore.rs:13:25 --> $DIR/stable-precise-live-drops-in-libcore.rs:13:25
| |
LL | pub const fn unwrap(self) -> T { LL | pub const fn unwrap(self) -> T {
| ^^^^ constant functions cannot evaluate destructors | ^^^^ the destructor for this type cannot be evaluated in constant functions
... ...
LL | } LL | }
| - value is dropped here | - value is dropped here

View file

@ -15,8 +15,8 @@ impl<T> Opt<T> {
#[rustc_const_unstable(feature = "foo", issue = "none")] #[rustc_const_unstable(feature = "foo", issue = "none")]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
const fn unwrap_or_else<F: ~const FnOnce() -> T>(self, f: F) -> T { const fn unwrap_or_else<F: ~const FnOnce() -> T>(self, f: F) -> T {
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
//~| ERROR destructors cannot be evaluated at compile-time //~| ERROR destructor of
match self { match self {
Opt::Some(t) => t, Opt::Some(t) => t,
Opt::None => f(), Opt::None => f(),

View file

@ -1,17 +1,17 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `F` cannot be evaluated at compile-time
--> $DIR/unstable-const-fn-in-libcore.rs:17:60 --> $DIR/unstable-const-fn-in-libcore.rs:17:60
| |
LL | const fn unwrap_or_else<F: ~const FnOnce() -> T>(self, f: F) -> T { LL | const fn unwrap_or_else<F: ~const FnOnce() -> T>(self, f: F) -> T {
| ^ constant functions cannot evaluate destructors | ^ the destructor for this type cannot be evaluated in constant functions
... ...
LL | } LL | }
| - value is dropped here | - value is dropped here
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `Opt<T>` cannot be evaluated at compile-time
--> $DIR/unstable-const-fn-in-libcore.rs:17:54 --> $DIR/unstable-const-fn-in-libcore.rs:17:54
| |
LL | const fn unwrap_or_else<F: ~const FnOnce() -> T>(self, f: F) -> T { LL | const fn unwrap_or_else<F: ~const FnOnce() -> T>(self, f: F) -> T {
| ^^^^ constant functions cannot evaluate destructors | ^^^^ the destructor for this type cannot be evaluated in constant functions
... ...
LL | } LL | }
| - value is dropped here | - value is dropped here

View file

@ -5,7 +5,7 @@ fn borrowck_catch() {
} }
const _: [String; 0] = [String::new(); 0]; const _: [String; 0] = [String::new(); 0];
//~^ ERROR destructors cannot be evaluated at compile-time [E0493] //~^ ERROR destructor of `String` cannot be evaluated at compile-time [E0493]
fn must_be_init() { fn must_be_init() {
let x: u8; let x: u8;

View file

@ -8,13 +8,13 @@ LL | let _bar = foo;
LL | let _baz = [foo; 0]; LL | let _baz = [foo; 0];
| ^^^ value used here after move | ^^^ value used here after move
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `String` cannot be evaluated at compile-time
--> $DIR/repeat-drop-2.rs:7:25 --> $DIR/repeat-drop-2.rs:7:25
| |
LL | const _: [String; 0] = [String::new(); 0]; LL | const _: [String; 0] = [String::new(); 0];
| -^^^^^^^^^^^^^---- | -^^^^^^^^^^^^^----
| || | ||
| |constants cannot evaluate destructors | |the destructor for this type cannot be evaluated in constants
| value is dropped here | value is dropped here
error[E0381]: used binding `x` isn't initialized error[E0381]: used binding `x` isn't initialized

View file

@ -12,7 +12,7 @@ struct Bug {
} }
let f: F = async { 1 }; let f: F = async { 1 };
//~^ ERROR `async` blocks are not allowed in constants //~^ ERROR `async` blocks are not allowed in constants
//~| ERROR destructors cannot be evaluated at compile-time //~| ERROR destructor of
1 1
}], }],
} }

View file

@ -7,11 +7,11 @@ LL | let f: F = async { 1 };
= note: see issue #85368 <https://github.com/rust-lang/rust/issues/85368> for more information = note: see issue #85368 <https://github.com/rust-lang/rust/issues/85368> for more information
= help: add `#![feature(const_async_blocks)]` to the crate attributes to enable = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `F` cannot be evaluated at compile-time
--> $DIR/issue-78722.rs:13:13 --> $DIR/issue-78722.rs:13:13
| |
LL | let f: F = async { 1 }; LL | let f: F = async { 1 };
| ^ constants cannot evaluate destructors | ^ the destructor for this type cannot be evaluated in constants
... ...
LL | }], LL | }],
| - value is dropped here | - value is dropped here

View file

@ -3,9 +3,9 @@
static A: () = { static A: () = {
let a: [String; 1]; let a: [String; 1];
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
a[0] = String::new(); a[0] = String::new();
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
//~| ERROR binding `a` isn't initialized //~| ERROR binding `a` isn't initialized
}; };
@ -14,9 +14,9 @@ struct B<T>([T; 1]);
impl<T> B<T> { impl<T> B<T> {
pub const fn f(mut self, other: T) -> Self { pub const fn f(mut self, other: T) -> Self {
let _this = self; let _this = self;
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
self.0[0] = other; self.0[0] = other;
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
//~| ERROR use of moved value //~| ERROR use of moved value
self self
} }

View file

@ -1,17 +1,17 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `String` cannot be evaluated at compile-time
--> $DIR/drop-elaboration-after-borrowck-error.rs:7:5 --> $DIR/drop-elaboration-after-borrowck-error.rs:7:5
| |
LL | a[0] = String::new(); LL | a[0] = String::new();
| ^^^^ | ^^^^
| | | |
| statics cannot evaluate destructors | the destructor for this type cannot be evaluated in statics
| value is dropped here | value is dropped here
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `[String; 1]` cannot be evaluated at compile-time
--> $DIR/drop-elaboration-after-borrowck-error.rs:5:9 --> $DIR/drop-elaboration-after-borrowck-error.rs:5:9
| |
LL | let a: [String; 1]; LL | let a: [String; 1];
| ^ statics cannot evaluate destructors | ^ the destructor for this type cannot be evaluated in statics
... ...
LL | }; LL | };
| - value is dropped here | - value is dropped here
@ -25,20 +25,20 @@ LL |
LL | a[0] = String::new(); LL | a[0] = String::new();
| ^^^^ `a` used here but it isn't initialized | ^^^^ `a` used here but it isn't initialized
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `T` cannot be evaluated at compile-time
--> $DIR/drop-elaboration-after-borrowck-error.rs:18:9 --> $DIR/drop-elaboration-after-borrowck-error.rs:18:9
| |
LL | self.0[0] = other; LL | self.0[0] = other;
| ^^^^^^^^^ | ^^^^^^^^^
| | | |
| constant functions cannot evaluate destructors | the destructor for this type cannot be evaluated in constant functions
| value is dropped here | value is dropped here
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `B<T>` cannot be evaluated at compile-time
--> $DIR/drop-elaboration-after-borrowck-error.rs:16:13 --> $DIR/drop-elaboration-after-borrowck-error.rs:16:13
| |
LL | let _this = self; LL | let _this = self;
| ^^^^^ constant functions cannot evaluate destructors | ^^^^^ the destructor for this type cannot be evaluated in constant functions
... ...
LL | } LL | }
| - value is dropped here | - value is dropped here

View file

@ -15,7 +15,7 @@ impl Drop for Bar {
} }
const F : Foo = (Foo { a : 0 }, Foo { a : 1 }).1; const F : Foo = (Foo { a : 0 }, Foo { a : 1 }).1;
//~^ destructors cannot be evaluated at compile-time //~^ ERROR destructor of
fn main() { fn main() {
} }

View file

@ -1,10 +1,10 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `(Foo, Foo)` cannot be evaluated at compile-time
--> $DIR/E0493.rs:17:17 --> $DIR/E0493.rs:17:17
| |
LL | const F : Foo = (Foo { a : 0 }, Foo { a : 1 }).1; LL | const F : Foo = (Foo { a : 0 }, Foo { a : 1 }).1;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - value is dropped here | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - value is dropped here
| | | |
| constants cannot evaluate destructors | the destructor for this type cannot be evaluated in constants
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,33 +5,33 @@ impl Drop for WithDtor {
} }
static PROMOTION_FAIL_S: Option<&'static WithDtor> = Some(&WithDtor); static PROMOTION_FAIL_S: Option<&'static WithDtor> = Some(&WithDtor);
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
//~| ERROR temporary value dropped while borrowed //~| ERROR temporary value dropped while borrowed
const PROMOTION_FAIL_C: Option<&'static WithDtor> = Some(&WithDtor); const PROMOTION_FAIL_C: Option<&'static WithDtor> = Some(&WithDtor);
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
//~| ERROR temporary value dropped while borrowed //~| ERROR temporary value dropped while borrowed
static EARLY_DROP_S: i32 = (WithDtor, 0).1; static EARLY_DROP_S: i32 = (WithDtor, 0).1;
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
const EARLY_DROP_C: i32 = (WithDtor, 0).1; const EARLY_DROP_C: i32 = (WithDtor, 0).1;
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
const fn const_drop<T>(_: T) {} const fn const_drop<T>(_: T) {}
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
const fn const_drop2<T>(x: T) { const fn const_drop2<T>(x: T) {
(x, ()).1 (x, ()).1
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
} }
const EARLY_DROP_C_OPTION: i32 = (Some(WithDtor), 0).1; const EARLY_DROP_C_OPTION: i32 = (Some(WithDtor), 0).1;
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
const HELPER: Option<WithDtor> = Some(WithDtor); const HELPER: Option<WithDtor> = Some(WithDtor);
const EARLY_DROP_C_OPTION_CONSTANT: i32 = (HELPER, 0).1; const EARLY_DROP_C_OPTION_CONSTANT: i32 = (HELPER, 0).1;
//~^ ERROR destructors cannot be evaluated at compile-time //~^ ERROR destructor of
fn main () {} fn main () {}

View file

@ -1,10 +1,10 @@
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `WithDtor` cannot be evaluated at compile-time
--> $DIR/static-drop-scope.rs:7:60 --> $DIR/static-drop-scope.rs:7:60
| |
LL | static PROMOTION_FAIL_S: Option<&'static WithDtor> = Some(&WithDtor); LL | static PROMOTION_FAIL_S: Option<&'static WithDtor> = Some(&WithDtor);
| ^^^^^^^^- value is dropped here | ^^^^^^^^- value is dropped here
| | | |
| statics cannot evaluate destructors | the destructor for this type cannot be evaluated in statics
error[E0716]: temporary value dropped while borrowed error[E0716]: temporary value dropped while borrowed
--> $DIR/static-drop-scope.rs:7:60 --> $DIR/static-drop-scope.rs:7:60
@ -16,13 +16,13 @@ LL | static PROMOTION_FAIL_S: Option<&'static WithDtor> = Some(&WithDtor);
| | creates a temporary which is freed while still in use | | creates a temporary which is freed while still in use
| using this value as a static requires that borrow lasts for `'static` | using this value as a static requires that borrow lasts for `'static`
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `WithDtor` cannot be evaluated at compile-time
--> $DIR/static-drop-scope.rs:11:59 --> $DIR/static-drop-scope.rs:11:59
| |
LL | const PROMOTION_FAIL_C: Option<&'static WithDtor> = Some(&WithDtor); LL | const PROMOTION_FAIL_C: Option<&'static WithDtor> = Some(&WithDtor);
| ^^^^^^^^- value is dropped here | ^^^^^^^^- value is dropped here
| | | |
| constants cannot evaluate destructors | the destructor for this type cannot be evaluated in constants
error[E0716]: temporary value dropped while borrowed error[E0716]: temporary value dropped while borrowed
--> $DIR/static-drop-scope.rs:11:59 --> $DIR/static-drop-scope.rs:11:59
@ -34,54 +34,54 @@ LL | const PROMOTION_FAIL_C: Option<&'static WithDtor> = Some(&WithDtor);
| | creates a temporary which is freed while still in use | | creates a temporary which is freed while still in use
| using this value as a constant requires that borrow lasts for `'static` | using this value as a constant requires that borrow lasts for `'static`
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `(WithDtor, i32)` cannot be evaluated at compile-time
--> $DIR/static-drop-scope.rs:15:28 --> $DIR/static-drop-scope.rs:15:28
| |
LL | static EARLY_DROP_S: i32 = (WithDtor, 0).1; LL | static EARLY_DROP_S: i32 = (WithDtor, 0).1;
| ^^^^^^^^^^^^^ - value is dropped here | ^^^^^^^^^^^^^ - value is dropped here
| | | |
| statics cannot evaluate destructors | the destructor for this type cannot be evaluated in statics
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `(WithDtor, i32)` cannot be evaluated at compile-time
--> $DIR/static-drop-scope.rs:18:27 --> $DIR/static-drop-scope.rs:18:27
| |
LL | const EARLY_DROP_C: i32 = (WithDtor, 0).1; LL | const EARLY_DROP_C: i32 = (WithDtor, 0).1;
| ^^^^^^^^^^^^^ - value is dropped here | ^^^^^^^^^^^^^ - value is dropped here
| | | |
| constants cannot evaluate destructors | the destructor for this type cannot be evaluated in constants
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `T` cannot be evaluated at compile-time
--> $DIR/static-drop-scope.rs:21:24 --> $DIR/static-drop-scope.rs:21:24
| |
LL | const fn const_drop<T>(_: T) {} LL | const fn const_drop<T>(_: T) {}
| ^ - value is dropped here | ^ - value is dropped here
| | | |
| constant functions cannot evaluate destructors | the destructor for this type cannot be evaluated in constant functions
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `(T, ())` cannot be evaluated at compile-time
--> $DIR/static-drop-scope.rs:25:5 --> $DIR/static-drop-scope.rs:25:5
| |
LL | (x, ()).1 LL | (x, ()).1
| ^^^^^^^ constant functions cannot evaluate destructors | ^^^^^^^ the destructor for this type cannot be evaluated in constant functions
LL | LL |
LL | } LL | }
| - value is dropped here | - value is dropped here
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `(Option<WithDtor>, i32)` cannot be evaluated at compile-time
--> $DIR/static-drop-scope.rs:29:34 --> $DIR/static-drop-scope.rs:29:34
| |
LL | const EARLY_DROP_C_OPTION: i32 = (Some(WithDtor), 0).1; LL | const EARLY_DROP_C_OPTION: i32 = (Some(WithDtor), 0).1;
| ^^^^^^^^^^^^^^^^^^^ - value is dropped here | ^^^^^^^^^^^^^^^^^^^ - value is dropped here
| | | |
| constants cannot evaluate destructors | the destructor for this type cannot be evaluated in constants
error[E0493]: destructors cannot be evaluated at compile-time error[E0493]: destructor of `(Option<WithDtor>, i32)` cannot be evaluated at compile-time
--> $DIR/static-drop-scope.rs:34:43 --> $DIR/static-drop-scope.rs:34:43
| |
LL | const EARLY_DROP_C_OPTION_CONSTANT: i32 = (HELPER, 0).1; LL | const EARLY_DROP_C_OPTION_CONSTANT: i32 = (HELPER, 0).1;
| ^^^^^^^^^^^ - value is dropped here | ^^^^^^^^^^^ - value is dropped here
| | | |
| constants cannot evaluate destructors | the destructor for this type cannot be evaluated in constants
error: aborting due to 10 previous errors error: aborting due to 10 previous errors