const-checking: add some corner case tests, and fix some nits
This commit is contained in:
parent
d9a2886ef8
commit
279465b5e8
5 changed files with 51 additions and 6 deletions
|
@ -412,10 +412,10 @@ pub fn const_validate_mplace<'mir, 'tcx>(
|
|||
_ if cid.promoted.is_some() => CtfeValidationMode::Promoted,
|
||||
Some(mutbl) => CtfeValidationMode::Static { mutbl }, // a `static`
|
||||
None => {
|
||||
// In normal `const` (not promoted), the outermost allocation is always only copied,
|
||||
// so having `UnsafeCell` in there is okay despite them being in immutable memory.
|
||||
let allow_immutable_unsafe_cell = cid.promoted.is_none() && !inner;
|
||||
CtfeValidationMode::Const { allow_immutable_unsafe_cell }
|
||||
// This is a normal `const` (not promoted).
|
||||
// The outermost allocation is always only copied, so having `UnsafeCell` in there
|
||||
// is okay despite them being in immutable memory.
|
||||
CtfeValidationMode::Const { allow_immutable_unsafe_cell: !inner }
|
||||
}
|
||||
};
|
||||
ecx.const_validate_operand(&mplace.into(), path, &mut ref_tracking, mode)?;
|
||||
|
|
|
@ -30,7 +30,7 @@ type QualifResults<'mir, 'tcx, Q> =
|
|||
rustc_mir_dataflow::ResultsCursor<'mir, 'tcx, FlowSensitiveAnalysis<'mir, 'mir, 'tcx, Q>>;
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Qualifs<'mir, 'tcx> {
|
||||
pub(crate) struct Qualifs<'mir, 'tcx> {
|
||||
has_mut_interior: Option<QualifResults<'mir, 'tcx, HasMutInterior>>,
|
||||
needs_drop: Option<QualifResults<'mir, 'tcx, NeedsDrop>>,
|
||||
needs_non_const_drop: Option<QualifResults<'mir, 'tcx, NeedsNonConstDrop>>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue