@@ -117,13 +117,20 @@ fn never_loop_expr(expr: &Expr<'_>, main_loop_id: HirId) -> NeverLoopResult {
117
117
| ExprKind :: Type ( e, _)
118
118
| ExprKind :: Field ( e, _)
119
119
| ExprKind :: AddrOf ( _, _, e)
120
- | ExprKind :: Struct ( _, _, Some ( e) )
121
120
| ExprKind :: Repeat ( e, _)
122
121
| ExprKind :: DropTemps ( e) => never_loop_expr ( e, main_loop_id) ,
123
122
ExprKind :: Let ( let_expr) => never_loop_expr ( let_expr. init , main_loop_id) ,
124
123
ExprKind :: Array ( es) | ExprKind :: MethodCall ( _, es, _) | ExprKind :: Tup ( es) => {
125
124
never_loop_expr_all ( & mut es. iter ( ) , main_loop_id)
126
125
} ,
126
+ ExprKind :: Struct ( _, fields, base) => {
127
+ let fields = never_loop_expr_all ( & mut fields. iter ( ) . map ( |f| f. expr ) , main_loop_id) ;
128
+ if let Some ( base) = base {
129
+ combine_both ( fields, never_loop_expr ( base, main_loop_id) )
130
+ } else {
131
+ fields
132
+ }
133
+ } ,
127
134
ExprKind :: Call ( e, es) => never_loop_expr_all ( & mut once ( e) . chain ( es. iter ( ) ) , main_loop_id) ,
128
135
ExprKind :: Binary ( _, e1, e2)
129
136
| ExprKind :: Assign ( e1, e2, _)
@@ -180,8 +187,7 @@ fn never_loop_expr(expr: &Expr<'_>, main_loop_id: HirId) -> NeverLoopResult {
180
187
| InlineAsmOperand :: SymStatic { .. } => NeverLoopResult :: Otherwise ,
181
188
} )
182
189
. fold ( NeverLoopResult :: Otherwise , combine_both) ,
183
- ExprKind :: Struct ( _, _, None )
184
- | ExprKind :: Yield ( _, _)
190
+ ExprKind :: Yield ( _, _)
185
191
| ExprKind :: Closure ( _, _, _, _, _)
186
192
| ExprKind :: Path ( _)
187
193
| ExprKind :: ConstBlock ( _)
0 commit comments