@@ -4046,24 +4046,18 @@ impl<'a> LoweringContext<'a> {
4046
4046
// `_ => else_block` where `else_block` is `()` if there's `None`:
4047
4047
let else_pat = self . pat_wild ( e. span ) ;
4048
4048
let else_expr = match else_opt {
4049
- None => self . expr_tuple ( e. span , hir_vec ! [ ] ) ,
4049
+ None => self . expr_block_empty ( e. span ) ,
4050
4050
Some ( els) => match els. node {
4051
4051
ExprKind :: IfLet ( ..) => {
4052
4052
// Wrap the `if let` expr in a block.
4053
- let blk = P ( hir:: Block {
4054
- stmts : hir_vec ! [ ] ,
4055
- span : els. span ,
4056
- expr : Some ( P ( self . lower_expr ( els) ) ) ,
4057
- hir_id : self . next_id ( ) . hir_id ,
4058
- rules : hir:: DefaultBlock ,
4059
- targeted_by_break : false ,
4060
- } ) ;
4061
- P ( self . expr_block ( blk, ThinVec :: new ( ) ) )
4053
+ let els = self . lower_expr ( els) ;
4054
+ let blk = self . block_all ( els. span , hir_vec ! [ ] , Some ( P ( els) ) ) ;
4055
+ self . expr_block ( P ( blk) , ThinVec :: new ( ) )
4062
4056
}
4063
- _ => P ( self . lower_expr ( els) ) ,
4057
+ _ => self . lower_expr ( els) ,
4064
4058
}
4065
4059
} ;
4066
- let else_arm = self . arm ( hir_vec ! [ else_pat] , else_expr) ;
4060
+ let else_arm = self . arm ( hir_vec ! [ else_pat] , P ( else_expr) ) ;
4067
4061
4068
4062
// Lower condition:
4069
4063
let span_block = self . mark_span_with_reason ( IfTemporary , cond. span , None ) ;
@@ -5130,6 +5124,11 @@ impl<'a> LoweringContext<'a> {
5130
5124
)
5131
5125
}
5132
5126
5127
+ fn expr_block_empty ( & mut self , span : Span ) -> hir:: Expr {
5128
+ let blk = self . block_all ( span, hir_vec ! [ ] , None ) ;
5129
+ self . expr_block ( P ( blk) , ThinVec :: new ( ) )
5130
+ }
5131
+
5133
5132
fn block_expr ( & mut self , expr : P < hir:: Expr > ) -> hir:: Block {
5134
5133
self . block_all ( expr. span , hir:: HirVec :: new ( ) , Some ( expr) )
5135
5134
}
0 commit comments