diff --git a/core/raw.odin b/core/raw.odin index 9e6d4864b..2f5a9e019 100644 --- a/core/raw.odin +++ b/core/raw.odin @@ -4,8 +4,8 @@ Any :: struct #ordered { } String :: struct #ordered { - data: ^byte, - len: int, + data: ^byte, + len: int, }; Slice :: struct #ordered { diff --git a/src/check_expr.c b/src/check_expr.c index 9d4eb0905..ab8611e52 100644 --- a/src/check_expr.c +++ b/src/check_expr.c @@ -1018,6 +1018,7 @@ Type *type_to_abi_compat_param_type(gbAllocator a, Type *original_type) { Type *new_type = original_type; // NOTE(bill): Changing the passing parameter value type is to match C's ABI // IMPORTANT TODO(bill): This only matches the ABI on MSVC at the moment + // SEE: https://msdn.microsoft.com/en-us/library/zthk2dkh.aspx Type *bt = core_type(original_type); switch (bt->kind) { // Okay to pass by value diff --git a/src/ir.c b/src/ir.c index 40b7005d0..794f6cb07 100644 --- a/src/ir.c +++ b/src/ir.c @@ -1436,6 +1436,8 @@ irValue *ir_emit_bitcast(irProcedure *proc, irValue *data, Type *type) { return ir_emit(proc, ir_instr_conv(proc, irConv_bitcast, data, ir_type(data), type)); } +irValue *ir_emit_transmute(irProcedure *proc, irValue *value, Type *t); + irValue *ir_emit_call(irProcedure *p, irValue *value, irValue **args, isize arg_count) { Type *pt = base_type(ir_type(value)); GB_ASSERT(pt->kind == Type_Proc); @@ -1450,7 +1452,7 @@ irValue *ir_emit_call(irProcedure *p, irValue *value, irValue **args, isize arg_ if (is_type_pointer(new_type)) { args[i] = ir_copy_value_to_ptr(p, args[i], 16); } else if (is_type_integer(new_type)) { - args[i] = ir_emit_bitcast(p, args[i], new_type); + args[i] = ir_emit_transmute(p, args[i], new_type); } } }