From af844931b2600e50e586436dee0d607d67ed9ff2 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sat, 26 Mar 2022 00:33:14 -0700 Subject: stage2: resolve types more lazily This avoids unwanted "foo depends on itself" compilation errors. --- src/Module.zig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/Module.zig') diff --git a/src/Module.zig b/src/Module.zig index 0666936f1f..71e2bd8d7c 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -3904,7 +3904,7 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool { // Note this resolves the type of the Decl, not the value; if this Decl // is a struct, for example, this resolves `type` (which needs no resolution), // not the struct itself. - try sema.resolveTypeFully(&block_scope, src, decl_tv.ty); + try sema.resolveTypeLayout(&block_scope, src, decl_tv.ty); const decl_arena_state = try decl_arena_allocator.create(std.heap.ArenaAllocator.State); @@ -4049,6 +4049,10 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool { if (has_runtime_bits) { log.debug("queue linker work for {*} ({s})", .{ decl, decl.name }); + // Needed for codegen_decl which will call updateDecl and then the + // codegen backend wants full access to the Decl Type. + try sema.resolveTypeFully(&block_scope, src, decl.ty); + try mod.comp.bin_file.allocateDeclIndexes(decl); try mod.comp.work_queue.writeItem(.{ .codegen_decl = decl }); -- cgit v1.2.3