From 657fe557115d9fde5de5b8c6b65a4db4e3a2e567 Mon Sep 17 00:00:00 2001 From: Evan Haas Date: Sat, 22 Apr 2023 10:26:27 -0700 Subject: std.Target: Add a function for determining char signedess Copied from arocc https://github.com/Vexu/arocc/blob/c1955a474270562a4640217e62c888b52c79d39e/src/target.zig#L7 --- lib/std/target.zig | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'lib/std') diff --git a/lib/std/target.zig b/lib/std/target.zig index 912eb141ea..5d5e71c20b 100644 --- a/lib/std/target.zig +++ b/lib/std/target.zig @@ -1910,6 +1910,30 @@ pub const Target = struct { } } + /// Default signedness of `char` for the native C compiler for this target + /// Note that char signedness is implementation-defined and many compilers provide + /// an option to override the default signedness e.g. GCC's -funsigned-char / -fsigned-char + pub fn charSignedness(target: Target) std.builtin.Signedness { + switch (target.cpu.arch) { + .aarch64, + .aarch64_32, + .aarch64_be, + .arm, + .armeb, + .thumb, + .thumbeb, + => return if (target.os.tag.isDarwin() or target.os.tag == .windows) .signed else .unsigned, + .powerpc, .powerpc64 => return if (target.os.tag.isDarwin()) .signed else .unsigned, + .powerpc64le, + .s390x, + .xcore, + .arc, + .msp430, + => return .unsigned, + else => return .signed, + } + } + pub const CType = enum { char, short, -- cgit v1.2.3