From 4c2383810bb783095e285ba56c5ecb3efe139dda Mon Sep 17 00:00:00 2001 From: Dylan MacKenzie Date: Thu, 21 May 2020 12:46:49 -0700 Subject: [PATCH] MIR const-checking --- src/librustc_mir/transform/check_consts/ops.rs | 13 ------------- .../transform/check_consts/validation.rs | 11 +---------- src/librustc_mir/transform/qualify_min_const_fn.rs | 10 ---------- 3 files changed, 1 insertion(+), 33 deletions(-) diff --git a/src/librustc_mir/transform/check_consts/ops.rs b/src/librustc_mir/transform/check_consts/ops.rs index 676688daf1c6..814437faa581 100644 --- a/src/librustc_mir/transform/check_consts/ops.rs +++ b/src/librustc_mir/transform/check_consts/ops.rs @@ -142,19 +142,6 @@ impl NonConstOp for HeapAllocation { } } -#[derive(Debug)] -pub struct IfOrMatch; -impl NonConstOp for IfOrMatch { - fn feature_gate() -> Option { - Some(sym::const_if_match) - } - - fn emit_error(&self, ccx: &ConstCx<'_, '_>, span: Span) { - // This should be caught by the HIR const-checker. - ccx.tcx.sess.delay_span_bug(span, "complex control flow is forbidden in a const context"); - } -} - #[derive(Debug)] pub struct InlineAsm; impl NonConstOp for InlineAsm {} diff --git a/src/librustc_mir/transform/check_consts/validation.rs b/src/librustc_mir/transform/check_consts/validation.rs index 238ad703fb00..a10e3ee93722 100644 --- a/src/librustc_mir/transform/check_consts/validation.rs +++ b/src/librustc_mir/transform/check_consts/validation.rs @@ -481,21 +481,12 @@ impl Visitor<'tcx> for Validator<'mir, 'tcx> { self.super_statement(statement, location); } - StatementKind::FakeRead( - FakeReadCause::ForMatchedPlace - | FakeReadCause::ForMatchGuard - | FakeReadCause::ForGuardBinding, - _, - ) => { - self.super_statement(statement, location); - self.check_op(ops::IfOrMatch); - } StatementKind::LlvmInlineAsm { .. } => { self.super_statement(statement, location); self.check_op(ops::InlineAsm); } - StatementKind::FakeRead(FakeReadCause::ForLet | FakeReadCause::ForIndex, _) + StatementKind::FakeRead(..) | StatementKind::StorageLive(_) | StatementKind::StorageDead(_) | StatementKind::Retag { .. } diff --git a/src/librustc_mir/transform/qualify_min_const_fn.rs b/src/librustc_mir/transform/qualify_min_const_fn.rs index caf6c7715a9e..5a3663384fb8 100644 --- a/src/librustc_mir/transform/qualify_min_const_fn.rs +++ b/src/librustc_mir/transform/qualify_min_const_fn.rs @@ -239,12 +239,6 @@ fn check_statement( check_rvalue(tcx, body, def_id, rval, span) } - StatementKind::FakeRead(FakeReadCause::ForMatchedPlace, _) - if !feature_allowed(tcx, def_id, sym::const_if_match) => - { - Err((span, "loops and conditional expressions are not stable in const fn".into())) - } - StatementKind::FakeRead(_, place) => check_place(tcx, **place, span, def_id, body), // just an assignment @@ -355,10 +349,6 @@ fn check_terminator( check_operand(tcx, value, span, def_id, body) } - TerminatorKind::SwitchInt { .. } if !feature_allowed(tcx, def_id, sym::const_if_match) => { - Err((span, "loops and conditional expressions are not stable in const fn".into())) - } - TerminatorKind::SwitchInt { discr, switch_ty: _, values: _, targets: _ } => { check_operand(tcx, discr, span, def_id, body) }