aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm.zig
diff options
context:
space:
mode:
authorkcbanner <kcbanner@gmail.com>2023-01-19 00:37:20 -0500
committerkcbanner <kcbanner@gmail.com>2023-01-19 00:37:56 -0500
commit5949851074597dbc315476237f42fa67a0b6770a (patch)
tree28002d1b10b993ac93cf25865a570715e0927659 /src/codegen/llvm.zig
parentd389dba04f66deb3dd1831ed96b6843a9eee1309 (diff)
downloadzig-5949851074597dbc315476237f42fa67a0b6770a.tar.gz
zig-5949851074597dbc315476237f42fa67a0b6770a.zip
llvm: pass non-scalars as byref in .Stdcall
- add c_abi tests for .Stdcall - enable (x86|x86_64)-windows-gnu in the c_abi tests
Diffstat (limited to 'src/codegen/llvm.zig')
-rw-r--r--src/codegen/llvm.zig16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index 8604c7d7f6..178c0aaf0a 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -10798,6 +10798,22 @@ const ParamTypeIterator = struct {
},
}
},
+ .Stdcall => {
+ it.zig_index += 1;
+ it.llvm_index += 1;
+
+ if (it.target.cpu.arch != .x86 or it.target.os.tag != .windows) {
+ return .byval;
+ }
+
+ const is_scalar = isScalar(ty);
+ if (is_scalar) {
+ return .byval;
+ } else {
+ it.byval_attr = true;
+ return .byref;
+ }
+ },
else => {
it.zig_index += 1;
it.llvm_index += 1;