diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 8b10895068aadee29de339b0bac98bf165e8e436..129d4581b7c5f99e6e126e0bb300f05e38ee53e0 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -10432,11 +10432,6 @@ const ParamTypeIterator = struct { it.llvm_index += 1; return .abi_sized_int; } - if (classes[0] == .sse and classes[1] == .none) { - it.zig_index += 1; - it.llvm_index += 1; - return .byval; - } it.llvm_types_buffer = llvm_types_buffer; it.llvm_types_len = llvm_types_index; it.llvm_index += llvm_types_index; diff --git a/test/c_abi/cfuncs.c b/test/c_abi/cfuncs.c index c47f89ebaf5e03e9a43ba25daf804e3cca2fd2c1..5891ee29d757a1b1c1e95b81f171d443cbeac830 100644 --- a/test/c_abi/cfuncs.c +++ b/test/c_abi/cfuncs.c @@ -758,3 +758,15 @@ void c_big_vec(BigVec vec) { BigVec c_ret_big_vec(void) { return (BigVec){9, 10, 11, 12, 13, 14, 15, 16}; } + +typedef struct { + float x, y; +} Vector2; + +void c_ptr_size_float_struct(Vector2 vec) { + assert_or_panic(vec.x == 1); + assert_or_panic(vec.y == 2); +} +Vector2 c_ret_ptr_size_float_struct(void) { + return (Vector2){3, 4}; +} diff --git a/test/c_abi/main.zig b/test/c_abi/main.zig index c9f697dfb0ffe1b55de41d2bbded536c371235d0..d9fb25f4b3b2b5996997607eca0f6e8717ca9107 100644 --- a/test/c_abi/main.zig +++ b/test/c_abi/main.zig @@ -813,3 +813,21 @@ test "big simd vector" { try expect(x[6] == 15); try expect(x[7] == 16); } + +const Vector2 = extern struct { x: f32, y: f32 }; + +extern fn c_ptr_size_float_struct(Vector2) void; +extern fn c_ret_ptr_size_float_struct() Vector2; + +test "C ABI pointer sized float struct" { + if (builtin.cpu.arch == .i386) return error.SkipZigTest; + if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest; + if (comptime builtin.cpu.arch.isRISCV()) return error.SkipZigTest; + if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest; + + c_ptr_size_float_struct(.{ .x = 1, .y = 2 }); + + var x = c_ret_ptr_size_float_struct(); + try expect(x.x == 3); + try expect(x.y == 4); +} diff --git a/test/tests.zig b/test/tests.zig index f204a683fbf312aeec7021d16a1c56e1155985ae..266d2a37d0ca6321afaaecba34d9a747b6f660fd 100644 --- a/test/tests.zig +++ b/test/tests.zig @@ -1314,7 +1314,7 @@ const c_abi_targets = [_]CrossTarget{ .{ .cpu_arch = .powerpc64le, .os_tag = .linux, - .abi = .none, + .abi = .musl, }, };