Merge branch 'eduardosm-extern-return-small-struct'
This commit is contained in:
commit
ed3181f029
|
@ -3166,6 +3166,10 @@ static LLVMValueRef ir_render_call(CodeGen *g, IrExecutable *executable, IrInstr
|
|||
return nullptr;
|
||||
} else if (first_arg_ret) {
|
||||
return instruction->tmp_ptr;
|
||||
} else if (handle_is_ptr(src_return_type)) {
|
||||
auto store_instr = LLVMBuildStore(g->builder, result, instruction->tmp_ptr);
|
||||
LLVMSetAlignment(store_instr, LLVMGetAlignment(instruction->tmp_ptr));
|
||||
return instruction->tmp_ptr;
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ comptime {
|
|||
_ = @import("cases/bitcast.zig");
|
||||
_ = @import("cases/bool.zig");
|
||||
_ = @import("cases/bugs/1111.zig");
|
||||
_ = @import("cases/bugs/1230.zig");
|
||||
_ = @import("cases/bugs/394.zig");
|
||||
_ = @import("cases/bugs/655.zig");
|
||||
_ = @import("cases/bugs/656.zig");
|
||||
|
|
14
test/cases/bugs/1230.zig
Normal file
14
test/cases/bugs/1230.zig
Normal file
|
@ -0,0 +1,14 @@
|
|||
const assert = @import("std").debug.assert;
|
||||
|
||||
const S = extern struct {
|
||||
x: i32,
|
||||
};
|
||||
|
||||
extern fn ret_struct() S {
|
||||
return S{ .x = 42 };
|
||||
}
|
||||
|
||||
test "extern return small struct (bug 1230)" {
|
||||
const s = ret_struct();
|
||||
assert(s.x == 42);
|
||||
}
|
Loading…
Reference in New Issue
Block a user