fix invalid LLVM IR generated for ?*void const casts

closes #2578
This commit is contained in:
Andrew Kelley 2019-05-28 16:11:09 -04:00
parent 508fdfea72
commit 9d16839420
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
3 changed files with 14 additions and 1 deletions

View File

@ -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 {

View File

@ -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");

View File

@ -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);
}