zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 9d16839420c674fd7dff0b28b3efcc9a7953ed74 (tree)
parent 508fdfea7227bf8c201134bf0b8c2b9c1c3ff787
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Tue, 28 May 2019 16:11:09 -0400

fix invalid LLVM IR generated for ?*void const casts

closes #2578

Diffstat:
Msrc/codegen.cpp | 2+-
Mtest/stage1/behavior.zig | 1+
Atest/stage1/behavior/bugs/2578.zig | 12++++++++++++
3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/codegen.cpp b/src/codegen.cpp @@ -2002,7 +2002,7 @@ static LLVMValueRef ir_llvm_value(CodeGen *g, IrInstruction *instruction) { render_const_val_global(g, &instruction->value, ""); ZigType *ptr_type = get_pointer_to_type(g, instruction->value.type, true); instruction->llvm_value = LLVMBuildBitCast(g->builder, instruction->value.global_refs->llvm_global, get_llvm_type(g, ptr_type), ""); - } else if (instruction->value.type->id == ZigTypeIdPointer) { + } else if (get_codegen_ptr_type(instruction->value.type) != nullptr) { instruction->llvm_value = LLVMBuildBitCast(g->builder, instruction->value.global_refs->llvm_value, get_llvm_type(g, instruction->value.type), ""); } else { diff --git a/test/stage1/behavior.zig b/test/stage1/behavior.zig @@ -26,6 +26,7 @@ comptime { _ = @import("behavior/bugs/2006.zig"); _ = @import("behavior/bugs/2114.zig"); _ = @import("behavior/bugs/2346.zig"); + _ = @import("behavior/bugs/2578.zig"); _ = @import("behavior/bugs/394.zig"); _ = @import("behavior/bugs/421.zig"); _ = @import("behavior/bugs/529.zig"); diff --git a/test/stage1/behavior/bugs/2578.zig b/test/stage1/behavior/bugs/2578.zig @@ -0,0 +1,12 @@ +const Foo = struct { + y: u8, +}; + +var foo: Foo = undefined; +const t = &foo; + +fn bar(pointer: ?*c_void) void {} + +test "fixed" { + bar(t); +}