properly fill a promoted's required_consts
then we can also make all_required_consts_are_checked a constant instead of a function
This commit is contained in:
@@ -1179,9 +1179,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||
) -> InterpResult<'tcx, OpTy<'tcx, M::Provenance>> {
|
||||
M::eval_mir_constant(self, *val, span, layout, |ecx, val, span, layout| {
|
||||
let const_val = val.eval(*ecx.tcx, ecx.param_env, span).map_err(|err| {
|
||||
if M::all_required_consts_are_checked(self)
|
||||
&& !matches!(err, ErrorHandled::TooGeneric(..))
|
||||
{
|
||||
if M::ALL_CONSTS_ARE_PRECHECKED && !matches!(err, ErrorHandled::TooGeneric(..)) {
|
||||
// Looks like the const is not captued by `required_consts`, that's bad.
|
||||
bug!("interpret const eval failure of {val:?} which is not in required_consts");
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ pub trait Machine<'mir, 'tcx: 'mir>: Sized {
|
||||
|
||||
/// Determines whether `eval_mir_constant` can never fail because all required consts have
|
||||
/// already been checked before.
|
||||
fn all_required_consts_are_checked(ecx: &InterpCx<'mir, 'tcx, Self>) -> bool;
|
||||
const ALL_CONSTS_ARE_PRECHECKED: bool = true;
|
||||
|
||||
/// Whether memory accesses should be alignment-checked.
|
||||
fn enforce_alignment(ecx: &InterpCx<'mir, 'tcx, Self>) -> bool;
|
||||
|
||||
Reference in New Issue
Block a user