@@ -753,10 +753,13 @@ impl ExprCollector<'_> {
753753 args : Box :: new ( [ self . collect_pat_top ( e. pat ( ) ) ] ) ,
754754 ellipsis : None ,
755755 } ;
756+ let label = e. label ( ) . map ( |label| self . collect_label ( label) ) ;
756757 let some_arm = MatchArm {
757758 pat : self . alloc_pat_desugared ( some_pat) ,
758759 guard : None ,
759- expr : self . collect_expr_opt ( e. loop_body ( ) . map ( |x| x. into ( ) ) ) ,
760+ expr : self . with_opt_labeled_rib ( label, |this| {
761+ this. collect_expr_opt ( e. loop_body ( ) . map ( |x| x. into ( ) ) )
762+ } ) ,
760763 } ;
761764 let iter_name = Name :: generate_new_name ( ) ;
762765 let iter_binding = self . alloc_binding ( iter_name. clone ( ) , BindingAnnotation :: Mutable ) ;
@@ -778,7 +781,6 @@ impl ExprCollector<'_> {
778781 Expr :: Match { expr : iter_next_expr, arms : Box :: new ( [ none_arm, some_arm] ) } ,
779782 syntax_ptr. clone ( ) ,
780783 ) ;
781- let label = e. label ( ) . map ( |label| self . collect_label ( label) ) ;
782784 let loop_outer =
783785 self . alloc_expr ( Expr :: Loop { body : loop_inner, label } , syntax_ptr. clone ( ) ) ;
784786 let iter_pat = self . alloc_pat_desugared ( Pat :: Bind { id : iter_binding, subpat : None } ) ;
@@ -1449,6 +1451,17 @@ impl ExprCollector<'_> {
14491451 self . label_ribs . pop ( ) ;
14501452 res
14511453 }
1454+
1455+ fn with_opt_labeled_rib < T > (
1456+ & mut self ,
1457+ label : Option < LabelId > ,
1458+ f : impl FnOnce ( & mut Self ) -> T ,
1459+ ) -> T {
1460+ match label {
1461+ None => f ( self ) ,
1462+ Some ( label) => self . with_labeled_rib ( label, f) ,
1463+ }
1464+ }
14521465 // endregion: labels
14531466}
14541467
0 commit comments