| ... | ... | @@ -22287,7 +22287,6 @@ fn zirBuiltinExtern( |
| 22287 | 22287 | extended: Zir.Inst.Extended.InstData, |
| 22288 | 22288 | ) CompileError!Air.Inst.Ref { |
| 22289 | 22289 | const extra = sema.code.extraData(Zir.Inst.BinNode, extended.operand).data; |
| 22290 | | const src = LazySrcLoc.nodeOffset(extra.node); |
| 22291 | 22290 | const ty_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = extra.node }; |
| 22292 | 22291 | const options_src: LazySrcLoc = .{ .node_offset_builtin_call_arg1 = extra.node }; |
| 22293 | 22292 | |
| ... | ... | @@ -22315,39 +22314,41 @@ fn zirBuiltinExtern( |
| 22315 | 22314 | const new_decl = sema.mod.declPtr(new_decl_index); |
| 22316 | 22315 | new_decl.name = try sema.gpa.dupeZ(u8, options.name); |
| 22317 | 22316 | |
| 22318 | | var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa); |
| 22319 | | errdefer new_decl_arena.deinit(); |
| 22320 | | const new_decl_arena_allocator = new_decl_arena.allocator(); |
| 22317 | { |
| 22318 | var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa); |
| 22319 | errdefer new_decl_arena.deinit(); |
| 22320 | const new_decl_arena_allocator = new_decl_arena.allocator(); |
| 22321 | 22321 | |
| 22322 | | const new_var = try new_decl_arena_allocator.create(Module.Var); |
| 22323 | | errdefer new_decl_arena_allocator.destroy(new_var); |
| 22322 | const new_var = try new_decl_arena_allocator.create(Module.Var); |
| 22323 | new_var.* = .{ |
| 22324 | .owner_decl = sema.owner_decl_index, |
| 22325 | .init = Value.initTag(.unreachable_value), |
| 22326 | .is_extern = true, |
| 22327 | .is_mutable = false, |
| 22328 | .is_threadlocal = options.is_thread_local, |
| 22329 | .is_weak_linkage = options.linkage == .Weak, |
| 22330 | .lib_name = null, |
| 22331 | }; |
| 22324 | 22332 | |
| 22325 | | new_var.* = .{ |
| 22326 | | .owner_decl = sema.owner_decl_index, |
| 22327 | | .init = Value.initTag(.unreachable_value), |
| 22328 | | .is_extern = true, |
| 22329 | | .is_mutable = false, |
| 22330 | | .is_threadlocal = options.is_thread_local, |
| 22331 | | .is_weak_linkage = options.linkage == .Weak, |
| 22332 | | .lib_name = null, |
| 22333 | | }; |
| 22333 | new_decl.src_line = sema.owner_decl.src_line; |
| 22334 | // We only access this decl through the decl_ref with the correct type created |
| 22335 | // below, so this type doesn't matter |
| 22336 | new_decl.ty = Type.Tag.init(.anyopaque); |
| 22337 | new_decl.val = try Value.Tag.variable.create(new_decl_arena_allocator, new_var); |
| 22338 | new_decl.@"align" = 0; |
| 22339 | new_decl.@"linksection" = null; |
| 22340 | new_decl.has_tv = true; |
| 22341 | new_decl.analysis = .complete; |
| 22342 | new_decl.generation = sema.mod.generation; |
| 22334 | 22343 | |
| 22335 | | new_decl.src_line = sema.owner_decl.src_line; |
| 22336 | | new_decl.ty = try ty.copy(new_decl_arena_allocator); |
| 22337 | | new_decl.val = try Value.Tag.variable.create(new_decl_arena_allocator, new_var); |
| 22338 | | new_decl.@"align" = 0; |
| 22339 | | new_decl.@"linksection" = null; |
| 22340 | | new_decl.has_tv = true; |
| 22341 | | new_decl.analysis = .complete; |
| 22342 | | new_decl.generation = sema.mod.generation; |
| 22344 | try new_decl.finalizeNewArena(&new_decl_arena); |
| 22345 | } |
| 22343 | 22346 | |
| 22344 | | const arena_state = try new_decl_arena_allocator.create(std.heap.ArenaAllocator.State); |
| 22345 | | arena_state.* = new_decl_arena.state; |
| 22346 | | new_decl.value_arena = arena_state; |
| 22347 | try sema.mod.declareDeclDependency(sema.owner_decl_index, new_decl_index); |
| 22348 | try sema.ensureDeclAnalyzed(new_decl_index); |
| 22347 | 22349 | |
| 22348 | | const ref = try sema.analyzeDeclRef(new_decl_index); |
| 22349 | | try sema.requireRuntimeBlock(block, src, null); |
| 22350 | | return block.addBitCast(ty, ref); |
| 22350 | const ref = try Value.Tag.decl_ref.create(sema.arena, new_decl_index); |
| 22351 | return sema.addConstant(ty, ref); |
| 22351 | 22352 | } |
| 22352 | 22353 | |
| 22353 | 22354 | fn requireRuntimeBlock(sema: *Sema, block: *Block, src: LazySrcLoc, runtime_src: ?LazySrcLoc) !void { |