diff --git a/lib/std/fmt.zig b/lib/std/fmt.zig index 240a3ad2334c44e63a06f8a72f3f9a8f7756d9e4..b6594f193c9e51850b40747df52a69f2fe5dbe3a 100644 --- a/lib/std/fmt.zig +++ b/lib/std/fmt.zig @@ -77,7 +77,6 @@ pub fn format( ) !void { const ArgsType = @TypeOf(args); const args_type_info = @typeInfo(ArgsType); - // XXX: meta.trait.is(.Struct)(ArgsType) doesn't seem to work... if (args_type_info != .Struct) { @compileError("Expected tuple or struct argument, found " ++ @typeName(ArgsType)); } diff --git a/src/AstGen.zig b/src/AstGen.zig index 0652a6232fe1733761f356281fbeb825a33bf978..bf34ce4780415fe17ef51616d960d1996954516d 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -319,6 +319,21 @@ fn reachableExpr( node: Ast.Node.Index, reachable_node: Ast.Node.Index, ) InnerError!Zir.Inst.Ref { + return reachableExprComptime(gz, scope, rl, node, reachable_node, false); +} + +fn reachableExprComptime( + gz: *GenZir, + scope: *Scope, + rl: ResultLoc, + node: Ast.Node.Index, + reachable_node: Ast.Node.Index, + force_comptime: bool, +) InnerError!Zir.Inst.Ref { + const prev_force_comptime = gz.force_comptime; + gz.force_comptime = prev_force_comptime or force_comptime; + defer gz.force_comptime = prev_force_comptime; + const result_inst = try expr(gz, scope, rl, node); if (gz.refIsNoReturn(result_inst)) { try gz.astgen.appendErrorNodeNotes(reachable_node, "unreachable code", .{}, &[_]u32{ @@ -2758,7 +2773,7 @@ fn varDecl( resolve_inferred_alloc = alloc; break :a .{ .alloc = alloc, .result_loc = .{ .inferred_ptr = alloc } }; }; - _ = try reachableExpr(gz, scope, var_data.result_loc, var_decl.ast.init_node, node); + _ = try reachableExprComptime(gz, scope, var_data.result_loc, var_decl.ast.init_node, node, is_comptime); if (resolve_inferred_alloc != .none) { _ = try gz.addUnNode(.resolve_inferred_alloc, resolve_inferred_alloc, node); }