diff options
| author | Tyler Mandry <tmandry@gmail.com> | 2020-01-17 17:28:22 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-17 17:28:22 -0800 |
| commit | dd6a83875e4236966cb846236b243fd3ccaf56af (patch) | |
| tree | 495ac7508e3e632dc876fb35218ebe48b455f53c | |
| parent | 9d9c8c69e3a1206480a0382f22da24b6bb85e191 (diff) | |
| parent | cdc828e7f92c5835db4188f27cbdb7170d32c94e (diff) | |
| download | rust-dd6a83875e4236966cb846236b243fd3ccaf56af.tar.gz rust-dd6a83875e4236966cb846236b243fd3ccaf56af.zip | |
Rollup merge of #68314 - oli-obk:true_unwind, r=eddyb
Stop treating `FalseEdges` and `FalseUnwind` as having semantic value for const eval This change does not expose loops or conditions to stable const fns because we check those at the HIR level and in the regular const validity checks. cc @ecstatic-morse r? @eddyb
| -rw-r--r-- | src/librustc_mir/transform/qualify_min_const_fn.rs | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/src/librustc_mir/transform/qualify_min_const_fn.rs b/src/librustc_mir/transform/qualify_min_const_fn.rs index 70345567408..d927553c72e 100644 --- a/src/librustc_mir/transform/qualify_min_const_fn.rs +++ b/src/librustc_mir/transform/qualify_min_const_fn.rs @@ -309,7 +309,11 @@ fn check_terminator( ) -> McfResult { let span = terminator.source_info.span; match &terminator.kind { - TerminatorKind::Goto { .. } | TerminatorKind::Return | TerminatorKind::Resume => Ok(()), + TerminatorKind::FalseEdges { .. } + | TerminatorKind::FalseUnwind { .. } + | TerminatorKind::Goto { .. } + | TerminatorKind::Return + | TerminatorKind::Resume => Ok(()), TerminatorKind::Drop { location, .. } => check_place(tcx, location, span, def_id, body), TerminatorKind::DropAndReplace { location, value, .. } => { @@ -317,13 +321,10 @@ fn check_terminator( check_operand(tcx, value, span, def_id, body) } - TerminatorKind::FalseEdges { .. } | TerminatorKind::SwitchInt { .. } - if !feature_allowed(tcx, def_id, sym::const_if_match) => - { + 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::FalseEdges { .. } => Ok(()), TerminatorKind::SwitchInt { discr, switch_ty: _, values: _, targets: _ } => { check_operand(tcx, discr, span, def_id, body) } @@ -367,13 +368,5 @@ fn check_terminator( TerminatorKind::Assert { cond, expected: _, msg: _, target: _, cleanup: _ } => { check_operand(tcx, cond, span, def_id, body) } - - TerminatorKind::FalseUnwind { .. } if feature_allowed(tcx, def_id, sym::const_loop) => { - Ok(()) - } - - TerminatorKind::FalseUnwind { .. } => { - Err((span, "loops are not allowed in const fn".into())) - } } } |
