authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-02-08 21:10:29-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-02-08 21:10:29-07:00
loge06ac9537e94cf4863de7ca64112d7a63af60008
tree02bf950b8443c06ccff6fce2e4c9a8b42364b28c
parent61ed4fe07ad660f3cb4372937ccd5188ce404a44

stage2: fix x86_64-windows C ABI

It didn't return integer status for pointers and also it incorrectly returned memory for optionals sometimes.

1 files changed, 27 insertions(+), 3 deletions(-)

src/arch/x86_64/abi.zig+27-3
...@@ -18,10 +18,34 @@ pub fn classifyWindows(ty: Type, target: Target) Class {...@@ -18,10 +18,34 @@ pub fn classifyWindows(ty: Type, target: Target) Class {
18 else => return .memory,18 else => return .memory,
19 }19 }
20 return switch (ty.zigTypeTag()) {20 return switch (ty.zigTypeTag()) {
21 .Int, .Bool, .Enum, .Void, .NoReturn, .ErrorSet, .Struct, .Union => .integer,21 .Pointer,
22 .Optional => if (ty.isPtrLikeOptional()) return .integer else return .memory,22 .Int,
23 .Bool,
24 .Enum,
25 .Void,
26 .NoReturn,
27 .ErrorSet,
28 .Struct,
29 .Union,
30 .Optional,
31 .Array,
32 .ErrorUnion,
33 .AnyFrame,
34 .Frame,
35 => .integer,
36
23 .Float, .Vector => .sse,37 .Float, .Vector => .sse,
24 else => unreachable,38
39 .Type,
40 .ComptimeFloat,
41 .ComptimeInt,
42 .Undefined,
43 .Null,
44 .BoundFn,
45 .Fn,
46 .Opaque,
47 .EnumLiteral,
48 => unreachable,
25 };49 };
26}50}
2751