authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-28 16:11:09-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-28 16:11:36-04:00
log9d16839420c674fd7dff0b28b3efcc9a7953ed74
treed1b2157bcf9b9a5cb713fe6c580ee8b3ce5a12d5
parent508fdfea7227bf8c201134bf0b8c2b9c1c3ff787
signaturelock-open Commit is signed but in an unrecognized format.

fix invalid LLVM IR generated for ?*void const casts

closes #2578

3 files changed, 14 insertions(+), 1 deletions(-)

src/codegen.cpp+1-1
...@@ -2002,7 +2002,7 @@ static LLVMValueRef ir_llvm_value(CodeGen *g, IrInstruction *instruction) {...@@ -2002,7 +2002,7 @@ static LLVMValueRef ir_llvm_value(CodeGen *g, IrInstruction *instruction) {
2002 render_const_val_global(g, &instruction->value, "");2002 render_const_val_global(g, &instruction->value, "");
2003 ZigType *ptr_type = get_pointer_to_type(g, instruction->value.type, true);2003 ZigType *ptr_type = get_pointer_to_type(g, instruction->value.type, true);
2004 instruction->llvm_value = LLVMBuildBitCast(g->builder, instruction->value.global_refs->llvm_global, get_llvm_type(g, ptr_type), "");2004 instruction->llvm_value = LLVMBuildBitCast(g->builder, instruction->value.global_refs->llvm_global, get_llvm_type(g, ptr_type), "");
2005 } else if (instruction->value.type->id == ZigTypeIdPointer) {2005 } else if (get_codegen_ptr_type(instruction->value.type) != nullptr) {
2006 instruction->llvm_value = LLVMBuildBitCast(g->builder, instruction->value.global_refs->llvm_value,2006 instruction->llvm_value = LLVMBuildBitCast(g->builder, instruction->value.global_refs->llvm_value,
2007 get_llvm_type(g, instruction->value.type), "");2007 get_llvm_type(g, instruction->value.type), "");
2008 } else {2008 } else {
test/stage1/behavior.zig+1
...@@ -26,6 +26,7 @@ comptime {...@@ -26,6 +26,7 @@ comptime {
26 _ = @import("behavior/bugs/2006.zig");26 _ = @import("behavior/bugs/2006.zig");
27 _ = @import("behavior/bugs/2114.zig");27 _ = @import("behavior/bugs/2114.zig");
28 _ = @import("behavior/bugs/2346.zig");28 _ = @import("behavior/bugs/2346.zig");
29 _ = @import("behavior/bugs/2578.zig");
29 _ = @import("behavior/bugs/394.zig");30 _ = @import("behavior/bugs/394.zig");
30 _ = @import("behavior/bugs/421.zig");31 _ = @import("behavior/bugs/421.zig");
31 _ = @import("behavior/bugs/529.zig");32 _ = @import("behavior/bugs/529.zig");
test/stage1/behavior/bugs/2578.zig created+12
...@@ -0,0 +1,12 @@
1const Foo = struct {
2 y: u8,
3};
4
5var foo: Foo = undefined;
6const t = &foo;
7
8fn bar(pointer: ?*c_void) void {}
9
10test "fixed" {
11 bar(t);
12}