diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-02-08 20:33:45 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2022-02-09 10:28:48 +0100 |
| commit | e5ce87f1b198bfcb022e9ea91f2a9a58b1b75026 (patch) | |
| tree | 19edf20a27751a4c96a2c5a63f9328de1923bd52 /src | |
| parent | 4d1e5ef730630badf92a613cdc57a42d2321df12 (diff) | |
| download | zig-e5ce87f1b198bfcb022e9ea91f2a9a58b1b75026.tar.gz zig-e5ce87f1b198bfcb022e9ea91f2a9a58b1b75026.zip | |
stage2: handle decl ref to void types
Fixes behavior test 1914
Diffstat (limited to 'src')
| -rw-r--r-- | src/codegen.zig | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index 5873fd439c..d1c249d99d 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -487,19 +487,14 @@ fn lowerDeclRef( return Result{ .appended = {} }; } + const target = bin_file.options.target; + const ptr_width = target.cpu.arch.ptrBitWidth(); const is_fn_body = decl.ty.zigTypeTag() == .Fn; if (!is_fn_body and !decl.ty.hasRuntimeBits()) { - return Result{ - .fail = try ErrorMsg.create( - bin_file.allocator, - src_loc, - "TODO handle void types when lowering decl ref", - .{}, - ), - }; + try code.writer().writeByteNTimes(0xaa, @divExact(ptr_width, 8)); + return Result{ .appended = {} }; } - if (decl.analysis != .complete) return error.AnalysisFail; decl.markAlive(); const vaddr = vaddr: { if (bin_file.cast(link.File.MachO)) |macho_file| { @@ -510,8 +505,8 @@ fn lowerDeclRef( break :vaddr bin_file.getDeclVAddr(decl); }; - const endian = bin_file.options.target.cpu.arch.endian(); - switch (bin_file.options.target.cpu.arch.ptrBitWidth()) { + const endian = target.cpu.arch.endian(); + switch (ptr_width) { 16 => mem.writeInt(u16, try code.addManyAsArray(2), @intCast(u16, vaddr), endian), 32 => mem.writeInt(u32, try code.addManyAsArray(4), @intCast(u32, vaddr), endian), 64 => mem.writeInt(u64, try code.addManyAsArray(8), vaddr, endian), |
