From 972d8daf47d8a61e00304e1e362b32ca380ce947 Mon Sep 17 00:00:00 2001 From: Zalathar Date: Sat, 2 Mar 2024 17:45:38 +1100 Subject: [PATCH] The ordinary lowering of `thir::ExprKind::Let` is unreachable After desugaring, `let` expressions should only appear inside `if` expressions or `match` guards, possibly nested within a let-chain. In both cases they are specifically handled by the lowerings of those expressions, so this case is currently unreachable. --- .../rustc_mir_build/src/build/expr/into.rs | 38 +++---------------- 1 file changed, 6 insertions(+), 32 deletions(-) diff --git a/compiler/rustc_mir_build/src/build/expr/into.rs b/compiler/rustc_mir_build/src/build/expr/into.rs index 2978491d646e8..f2cf6fe613c33 100644 --- a/compiler/rustc_mir_build/src/build/expr/into.rs +++ b/compiler/rustc_mir_build/src/build/expr/into.rs @@ -109,38 +109,12 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { this.cfg.goto(else_blk, source_info, join_block); join_block.unit() } - ExprKind::Let { expr, ref pat } => { - let scope = this.local_scope(); - let (true_block, false_block) = this.in_if_then_scope(scope, expr_span, |this| { - this.lower_let_expr(block, expr, pat, scope, None, expr_span, true) - }); - - this.cfg.push_assign_constant( - true_block, - source_info, - destination, - ConstOperand { - span: expr_span, - user_ty: None, - const_: Const::from_bool(this.tcx, true), - }, - ); - - this.cfg.push_assign_constant( - false_block, - source_info, - destination, - ConstOperand { - span: expr_span, - user_ty: None, - const_: Const::from_bool(this.tcx, false), - }, - ); - - let join_block = this.cfg.start_new_block(); - this.cfg.goto(true_block, source_info, join_block); - this.cfg.goto(false_block, source_info, join_block); - join_block.unit() + ExprKind::Let { .. } => { + // After desugaring, `let` expressions should only appear inside `if` + // expressions or `match` guards, possibly nested within a let-chain. + // In both cases they are specifically handled by the lowerings of + // those expressions, so this case is currently unreachable. + span_bug!(expr_span, "unexpected let expression outside of if or match-guard"); } ExprKind::NeverToAny { source } => { let source_expr = &this.thir[source];