@@ -189,38 +189,37 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
189
189
190
190
let initializer_span = this. thir [ * initializer] . span ;
191
191
let scope = ( * init_scope, source_info) ;
192
- let failure = unpack ! (
193
- block = this. in_scope( scope, * lint_level, |this| {
194
- this. declare_bindings(
195
- visibility_scope,
196
- remainder_span,
197
- pattern,
198
- None ,
199
- Some ( ( Some ( & destination) , initializer_span) ) ,
200
- ) ;
201
- this. visit_primary_bindings(
202
- pattern,
203
- UserTypeProjections :: none( ) ,
204
- & mut |this, _, _, node, span, _, _| {
205
- this. storage_live_binding(
206
- block,
207
- node,
208
- span,
209
- OutsideGuard ,
210
- true ,
211
- ) ;
212
- } ,
213
- ) ;
214
- this. ast_let_else(
215
- block,
216
- * initializer,
217
- initializer_span,
218
- * else_block,
219
- & last_remainder_scope,
220
- pattern,
221
- )
222
- } )
223
- ) ;
192
+ let failure_and_block = this. in_scope ( scope, * lint_level, |this| {
193
+ this. declare_bindings (
194
+ visibility_scope,
195
+ remainder_span,
196
+ pattern,
197
+ None ,
198
+ Some ( ( Some ( & destination) , initializer_span) ) ,
199
+ ) ;
200
+ this. visit_primary_bindings (
201
+ pattern,
202
+ UserTypeProjections :: none ( ) ,
203
+ & mut |this, _, _, node, span, _, _| {
204
+ this. storage_live_binding ( block, node, span, OutsideGuard , true ) ;
205
+ } ,
206
+ ) ;
207
+ let else_block_span = this. thir [ * else_block] . span ;
208
+ let ( matching, failure) =
209
+ this. in_if_then_scope ( last_remainder_scope, else_block_span, |this| {
210
+ this. lower_let_expr (
211
+ block,
212
+ * initializer,
213
+ pattern,
214
+ None ,
215
+ initializer_span,
216
+ false ,
217
+ true ,
218
+ )
219
+ } ) ;
220
+ matching. and ( failure)
221
+ } ) ;
222
+ let failure = unpack ! ( block = failure_and_block) ;
224
223
this. cfg . goto ( failure, source_info, failure_entry) ;
225
224
226
225
if let Some ( source_scope) = visibility_scope {
0 commit comments