@@ -744,10 +744,13 @@ impl ExprCollector<'_> {
744744 args : Box :: new ( [ self . collect_pat_top ( e. pat ( ) ) ] ) ,
745745 ellipsis : None ,
746746 } ;
747+ let label = e. label ( ) . map ( |label| self . collect_label ( label) ) ;
747748 let some_arm = MatchArm {
748749 pat : self . alloc_pat_desugared ( some_pat) ,
749750 guard : None ,
750- expr : self . collect_expr_opt ( e. loop_body ( ) . map ( |x| x. into ( ) ) ) ,
751+ expr : self . with_opt_labeled_rib ( label, |this| {
752+ this. collect_expr_opt ( e. loop_body ( ) . map ( |x| x. into ( ) ) )
753+ } ) ,
751754 } ;
752755 let iter_name = Name :: generate_new_name ( ) ;
753756 let iter_binding = self . alloc_binding ( iter_name. clone ( ) , BindingAnnotation :: Mutable ) ;
@@ -769,7 +772,6 @@ impl ExprCollector<'_> {
769772 Expr :: Match { expr : iter_next_expr, arms : Box :: new ( [ none_arm, some_arm] ) } ,
770773 syntax_ptr. clone ( ) ,
771774 ) ;
772- let label = e. label ( ) . map ( |label| self . collect_label ( label) ) ;
773775 let loop_outer =
774776 self . alloc_expr ( Expr :: Loop { body : loop_inner, label } , syntax_ptr. clone ( ) ) ;
775777 let iter_pat = self . alloc_pat_desugared ( Pat :: Bind { id : iter_binding, subpat : None } ) ;
@@ -1426,6 +1428,17 @@ impl ExprCollector<'_> {
14261428 self . label_ribs . pop ( ) ;
14271429 res
14281430 }
1431+
1432+ fn with_opt_labeled_rib < T > (
1433+ & mut self ,
1434+ label : Option < LabelId > ,
1435+ f : impl FnOnce ( & mut Self ) -> T ,
1436+ ) -> T {
1437+ match label {
1438+ None => f ( self ) ,
1439+ Some ( label) => self . with_labeled_rib ( label, f) ,
1440+ }
1441+ }
14291442 // endregion: labels
14301443}
14311444
0 commit comments