aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEvan Haas <evan@lagerdata.com>2023-04-22 10:26:27 -0700
committerEvan Haas <evan@lagerdata.com>2023-06-20 00:26:40 -0700
commit657fe557115d9fde5de5b8c6b65a4db4e3a2e567 (patch)
tree149510d102e92de907ed910ff17a05dcde457a9a /lib
parenta72d634b731952ee227d026c27e83c5702dcea4a (diff)
downloadzig-657fe557115d9fde5de5b8c6b65a4db4e3a2e567.tar.gz
zig-657fe557115d9fde5de5b8c6b65a4db4e3a2e567.zip
std.Target: Add a function for determining char signedess
Copied from arocc https://github.com/Vexu/arocc/blob/c1955a474270562a4640217e62c888b52c79d39e/src/target.zig#L7
Diffstat (limited to 'lib')
-rw-r--r--lib/std/target.zig24
1 files changed, 24 insertions, 0 deletions
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,