authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-14 11:33:13-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-14 11:33:13-04:00
loged3181f029809f8cd608f2c20b60d1b7c6e353e3
treef0a9143d8c6a682e974768f0b095a159e8db9415
parent2a719ee6c598b7096060168a0e7c93ae3e244008
parentf78d4ed30c1bd92fc5ecc26c2d5f11751b406255

Merge branch 'eduardosm-extern-return-small-struct'


3 files changed, 19 insertions(+), 0 deletions(-)

src/codegen.cpp+4
......@@ -3166,6 +3166,10 @@ static LLVMValueRef ir_render_call(CodeGen *g, IrExecutable *executable, IrInstr
31663166 return nullptr;
31673167 } else if (first_arg_ret) {
31683168 return instruction->tmp_ptr;
3169 } else if (handle_is_ptr(src_return_type)) {
3170 auto store_instr = LLVMBuildStore(g->builder, result, instruction->tmp_ptr);
3171 LLVMSetAlignment(store_instr, LLVMGetAlignment(instruction->tmp_ptr));
3172 return instruction->tmp_ptr;
31693173 } else {
31703174 return result;
31713175 }
test/behavior.zig+1
......@@ -9,6 +9,7 @@ comptime {
99 _ = @import("cases/bitcast.zig");
1010 _ = @import("cases/bool.zig");
1111 _ = @import("cases/bugs/1111.zig");
12 _ = @import("cases/bugs/1230.zig");
1213 _ = @import("cases/bugs/394.zig");
1314 _ = @import("cases/bugs/655.zig");
1415 _ = @import("cases/bugs/656.zig");
test/cases/bugs/1230.zig created+14
......@@ -0,0 +1,14 @@
1const assert = @import("std").debug.assert;
2
3const S = extern struct {
4 x: i32,
5};
6
7extern fn ret_struct() S {
8 return S{ .x = 42 };
9}
10
11test "extern return small struct (bug 1230)" {
12 const s = ret_struct();
13 assert(s.x == 42);
14}