From fb9d6b8bd96b1d0403f04fd31b1ebc0881105f48 Mon Sep 17 00:00:00 2001 From: Evan Haas Date: Tue, 20 Jun 2023 00:20:32 -0700 Subject: codegen: Set c_char signedness based on the target --- src/type.zig | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/type.zig') diff --git a/src/type.zig b/src/type.zig index ac5305b3f4..bce97b65cb 100644 --- a/src/type.zig +++ b/src/type.zig @@ -2216,7 +2216,8 @@ pub const Type = struct { /// Returns true if and only if the type is a fixed-width, signed integer. pub fn isSignedInt(ty: Type, mod: *const Module) bool { return switch (ty.toIntern()) { - .c_char_type, .isize_type, .c_short_type, .c_int_type, .c_long_type, .c_longlong_type => true, + .c_char_type => mod.getTarget().charSignedness() == .signed, + .isize_type, .c_short_type, .c_int_type, .c_long_type, .c_longlong_type => true, else => switch (mod.intern_pool.indexToKey(ty.toIntern())) { .int_type => |int_type| int_type.signedness == .signed, else => false, @@ -2227,6 +2228,7 @@ pub const Type = struct { /// Returns true if and only if the type is a fixed-width, unsigned integer. pub fn isUnsignedInt(ty: Type, mod: *const Module) bool { return switch (ty.toIntern()) { + .c_char_type => mod.getTarget().charSignedness() == .unsigned, .usize_type, .c_ushort_type, .c_uint_type, .c_ulong_type, .c_ulonglong_type => true, else => switch (mod.intern_pool.indexToKey(ty.toIntern())) { .int_type => |int_type| int_type.signedness == .unsigned, @@ -2257,7 +2259,7 @@ pub const Type = struct { }, .usize_type => return .{ .signedness = .unsigned, .bits = target.ptrBitWidth() }, .isize_type => return .{ .signedness = .signed, .bits = target.ptrBitWidth() }, - .c_char_type => return .{ .signedness = .signed, .bits = target.c_type_bit_size(.char) }, + .c_char_type => return .{ .signedness = mod.getTarget().charSignedness(), .bits = target.c_type_bit_size(.char) }, .c_short_type => return .{ .signedness = .signed, .bits = target.c_type_bit_size(.short) }, .c_ushort_type => return .{ .signedness = .unsigned, .bits = target.c_type_bit_size(.ushort) }, .c_int_type => return .{ .signedness = .signed, .bits = target.c_type_bit_size(.int) }, -- cgit v1.2.3