| ... | ... | @@ -319,6 +319,21 @@ fn reachableExpr( |
| 319 | 319 | node: Ast.Node.Index, |
| 320 | 320 | reachable_node: Ast.Node.Index, |
| 321 | 321 | ) InnerError!Zir.Inst.Ref { |
| 322 | return reachableExprComptime(gz, scope, rl, node, reachable_node, false); |
| 323 | } |
| 324 | |
| 325 | fn reachableExprComptime( |
| 326 | gz: *GenZir, |
| 327 | scope: *Scope, |
| 328 | rl: ResultLoc, |
| 329 | node: Ast.Node.Index, |
| 330 | reachable_node: Ast.Node.Index, |
| 331 | force_comptime: bool, |
| 332 | ) InnerError!Zir.Inst.Ref { |
| 333 | const prev_force_comptime = gz.force_comptime; |
| 334 | gz.force_comptime = prev_force_comptime or force_comptime; |
| 335 | defer gz.force_comptime = prev_force_comptime; |
| 336 | |
| 322 | 337 | const result_inst = try expr(gz, scope, rl, node); |
| 323 | 338 | if (gz.refIsNoReturn(result_inst)) { |
| 324 | 339 | try gz.astgen.appendErrorNodeNotes(reachable_node, "unreachable code", .{}, &[_]u32{ |
| ... | ... | @@ -2758,7 +2773,7 @@ fn varDecl( |
| 2758 | 2773 | resolve_inferred_alloc = alloc; |
| 2759 | 2774 | break :a .{ .alloc = alloc, .result_loc = .{ .inferred_ptr = alloc } }; |
| 2760 | 2775 | }; |
| 2761 | | _ = try reachableExpr(gz, scope, var_data.result_loc, var_decl.ast.init_node, node); |
| 2776 | _ = try reachableExprComptime(gz, scope, var_data.result_loc, var_decl.ast.init_node, node, is_comptime); |
| 2762 | 2777 | if (resolve_inferred_alloc != .none) { |
| 2763 | 2778 | _ = try gz.addUnNode(.resolve_inferred_alloc, resolve_inferred_alloc, node); |
| 2764 | 2779 | } |