Skip to content

Commit 9c44dd7

Browse files
committed
disable byval parameters on windows to work around llvm bug
See #536
1 parent ba405ed commit 9c44dd7

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/codegen.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2272,7 +2272,9 @@ static LLVMValueRef ir_render_call(CodeGen *g, IrExecutable *executable, IrInstr
22722272

22732273
for (size_t param_i = 0; param_i < fn_type_id->param_count; param_i += 1) {
22742274
FnGenParamInfo *gen_info = &fn_type->data.fn.gen_param_info[param_i];
2275-
if (gen_info->is_byval) {
2275+
// Note: byval is disabled on windows due to an LLVM bug:
2276+
// https://github.com/zig-lang/zig/issues/536
2277+
if (gen_info->is_byval && g->zig_target.os != ZigLLVM_Win32) {
22762278
addLLVMCallsiteAttr(result, (unsigned)gen_info->gen_index, "byval");
22772279
}
22782280
}
@@ -4023,6 +4025,7 @@ static void generate_enum_name_tables(CodeGen *g) {
40234025
TypeTableEntry *u8_ptr_type = get_pointer_to_type(g, g->builtin_types.entry_u8, true);
40244026
TypeTableEntry *str_type = get_slice_type(g, u8_ptr_type);
40254027

4028+
40264029
for (size_t enum_i = 0; enum_i < g->name_table_enums.length; enum_i += 1) {
40274030
TypeTableEntry *enum_tag_type = g->name_table_enums.at(enum_i);
40284031
assert(enum_tag_type->id == TypeTableEntryIdEnumTag);
@@ -4257,7 +4260,9 @@ static void do_code_gen(CodeGen *g) {
42574260
if (param_type->id == TypeTableEntryIdPointer) {
42584261
addLLVMArgAttr(fn_val, (unsigned)gen_index, "nonnull");
42594262
}
4260-
if (is_byval) {
4263+
// Note: byval is disabled on windows due to an LLVM bug:
4264+
// https://github.com/zig-lang/zig/issues/536
4265+
if (is_byval && g->zig_target.os != ZigLLVM_Win32) {
42614266
addLLVMArgAttr(fn_val, (unsigned)gen_index, "byval");
42624267
}
42634268
}

0 commit comments

Comments
 (0)