mirror of
https://github.com/ziglang/zig.git
synced 2025-12-28 09:03:21 +00:00
Merge pull request #13561 from jacobly0/gcc-warnings
This commit is contained in:
commit
07671838b0
48
lib/zig.h
48
lib/zig.h
@ -929,8 +929,8 @@ typedef signed __int128 zig_i128;
|
||||
#define zig_bitcast_u128(val) ((zig_u128)(val))
|
||||
#define zig_bitcast_i128(val) ((zig_i128)(val))
|
||||
#define zig_cmp_int128(Type) \
|
||||
static inline zig_i8 zig_cmp_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
return (zig_i8)((lhs > rhs) - (lhs < rhs)); \
|
||||
static inline zig_i32 zig_cmp_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
return (lhs > rhs) - (lhs < rhs); \
|
||||
}
|
||||
#define zig_bit_int128(Type, operation, operator) \
|
||||
static inline zig_##Type zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
@ -956,7 +956,7 @@ typedef struct { zig_align(16) zig_i64 hi; zig_u64 lo; } zig_i128;
|
||||
#define zig_bitcast_u128(val) zig_as_u128((zig_u64)(val).hi, (val).lo)
|
||||
#define zig_bitcast_i128(val) zig_as_i128((zig_i64)(val).hi, (val).lo)
|
||||
#define zig_cmp_int128(Type) \
|
||||
static inline zig_i8 zig_cmp_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
static inline zig_i32 zig_cmp_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
return (lhs.hi == rhs.hi) \
|
||||
? (lhs.lo > rhs.lo) - (lhs.lo < rhs.lo) \
|
||||
: (lhs.hi > rhs.hi) - (lhs.hi < rhs.hi); \
|
||||
@ -1123,23 +1123,23 @@ static inline zig_i128 zig_mod_i128(zig_i128 lhs, zig_i128 rhs) {
|
||||
#define zig_mod_u128 zig_rem_u128
|
||||
|
||||
static inline zig_u128 zig_min_u128(zig_u128 lhs, zig_u128 rhs) {
|
||||
return zig_cmp_u128(lhs, rhs) < 0 ? lhs : rhs;
|
||||
return zig_cmp_u128(lhs, rhs) < zig_as_i32(0) ? lhs : rhs;
|
||||
}
|
||||
|
||||
static inline zig_i128 zig_min_i128(zig_i128 lhs, zig_i128 rhs) {
|
||||
return zig_cmp_i128(lhs, rhs) < 0 ? lhs : rhs;
|
||||
return zig_cmp_i128(lhs, rhs) < zig_as_i32(0) ? lhs : rhs;
|
||||
}
|
||||
|
||||
static inline zig_u128 zig_max_u128(zig_u128 lhs, zig_u128 rhs) {
|
||||
return zig_cmp_u128(lhs, rhs) > 0 ? lhs : rhs;
|
||||
return zig_cmp_u128(lhs, rhs) > zig_as_i32(0) ? lhs : rhs;
|
||||
}
|
||||
|
||||
static inline zig_i128 zig_max_i128(zig_i128 lhs, zig_i128 rhs) {
|
||||
return zig_cmp_i128(lhs, rhs) > 0 ? lhs : rhs;
|
||||
return zig_cmp_i128(lhs, rhs) > zig_as_i32(0) ? lhs : rhs;
|
||||
}
|
||||
|
||||
static inline zig_i128 zig_shr_i128(zig_i128 lhs, zig_u8 rhs) {
|
||||
zig_i128 sign_mask = zig_cmp_i128(lhs, zig_as_i128(0, 0)) < zig_as_i8(0) ? -zig_as_i128(0, 1) : zig_as_i128(0, 0);
|
||||
zig_i128 sign_mask = zig_cmp_i128(lhs, zig_as_i128(0, 0)) < zig_as_i32(0) ? -zig_as_i128(0, 1) : zig_as_i128(0, 0);
|
||||
return zig_xor_i128(zig_bitcast_i128(zig_shr_u128(zig_bitcast_u128(zig_xor_i128(lhs, sign_mask)), rhs)), sign_mask);
|
||||
}
|
||||
|
||||
@ -1193,8 +1193,8 @@ static inline zig_bool zig_shlo_u128(zig_u128 *res, zig_u128 lhs, zig_u8 rhs, zi
|
||||
static inline zig_bool zig_shlo_i128(zig_i128 *res, zig_i128 lhs, zig_u8 rhs, zig_u8 bits) {
|
||||
*res = zig_shlw_i128(lhs, rhs, bits);
|
||||
zig_i128 mask = zig_bitcast_i128(zig_shl_u128(zig_maxInt_u128, bits - rhs - zig_as_u8(1)));
|
||||
return zig_cmp_i128(zig_and_i128(lhs, mask), zig_as_i128(0, 0)) != zig_as_i8(0) &&
|
||||
zig_cmp_i128(zig_and_i128(lhs, mask), mask) != zig_as_i8(0);
|
||||
return zig_cmp_i128(zig_and_i128(lhs, mask), zig_as_i128(0, 0)) != zig_as_i32(0) &&
|
||||
zig_cmp_i128(zig_and_i128(lhs, mask), mask) != zig_as_i32(0);
|
||||
}
|
||||
|
||||
static inline zig_bool zig_addo_u128(zig_u128 *res, zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
|
||||
@ -1291,15 +1291,15 @@ static inline zig_bool zig_subo_u128(zig_u128 *res, zig_u128 lhs, zig_u128 rhs)
|
||||
|
||||
static inline zig_u128 zig_shls_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
|
||||
zig_u128 res;
|
||||
if (zig_cmp_u128(rhs, zig_as_u128(0, bits)) >= zig_as_i8(0))
|
||||
return zig_cmp_u128(lhs, zig_as_u128(0, 0)) != zig_as_i8(0) ? zig_maxInt(u128, bits) : lhs;
|
||||
if (zig_cmp_u128(rhs, zig_as_u128(0, bits)) >= zig_as_i32(0))
|
||||
return zig_cmp_u128(lhs, zig_as_u128(0, 0)) != zig_as_i32(0) ? zig_maxInt(u128, bits) : lhs;
|
||||
return zig_shlo_u128(&res, lhs, (zig_u8)rhs, bits) ? zig_maxInt(u128, bits) : res;
|
||||
}
|
||||
|
||||
static inline zig_i128 zig_shls_i128(zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
|
||||
zig_i128 res;
|
||||
if (zig_cmp_u128(zig_bitcast_u128(rhs), zig_as_u128(0, bits)) < zig_as_i8(0) && !zig_shlo_i128(&res, lhs, rhs, bits)) return res;
|
||||
return zig_cmp_i128(lhs, zig_as_i128(0, 0)) < zig_as_i8(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
|
||||
if (zig_cmp_u128(zig_bitcast_u128(rhs), zig_as_u128(0, bits)) < zig_as_i32(0) && !zig_shlo_i128(&res, lhs, rhs, bits)) return res;
|
||||
return zig_cmp_i128(lhs, zig_as_i128(0, 0)) < zig_as_i32(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
|
||||
}
|
||||
|
||||
static inline zig_u128 zig_adds_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
|
||||
@ -1310,7 +1310,7 @@ static inline zig_u128 zig_adds_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
|
||||
static inline zig_i128 zig_adds_i128(zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
|
||||
zig_i128 res;
|
||||
if (!zig_addo_i128(&res, lhs, rhs, bits)) return res;
|
||||
return zig_cmp_i128(res, zig_as_i128(0, 0)) >= zig_as_i8(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
|
||||
return zig_cmp_i128(res, zig_as_i128(0, 0)) >= zig_as_i32(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
|
||||
}
|
||||
|
||||
static inline zig_u128 zig_subs_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
|
||||
@ -1321,7 +1321,7 @@ static inline zig_u128 zig_subs_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
|
||||
static inline zig_i128 zig_subs_i128(zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
|
||||
zig_i128 res;
|
||||
if (!zig_subo_i128(&res, lhs, rhs, bits)) return res;
|
||||
return zig_cmp_i128(res, zig_as_i128(0, 0)) >= zig_as_i8(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
|
||||
return zig_cmp_i128(res, zig_as_i128(0, 0)) >= zig_as_i32(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
|
||||
}
|
||||
|
||||
static inline zig_u128 zig_muls_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
|
||||
@ -1332,7 +1332,7 @@ static inline zig_u128 zig_muls_u128(zig_u128 lhs, zig_u128 rhs, zig_u8 bits) {
|
||||
static inline zig_i128 zig_muls_i128(zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
|
||||
zig_i128 res;
|
||||
if (!zig_mulo_i128(&res, lhs, rhs, bits)) return res;
|
||||
return zig_cmp_i128(zig_xor_i128(lhs, rhs), zig_as_i128(0, 0)) < zig_as_i8(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
|
||||
return zig_cmp_i128(zig_xor_i128(lhs, rhs), zig_as_i128(0, 0)) < zig_as_i32(0) ? zig_minInt(i128, bits) : zig_maxInt(i128, bits);
|
||||
}
|
||||
|
||||
static inline zig_u8 zig_clz_u128(zig_u128 val, zig_u8 bits) {
|
||||
@ -1584,21 +1584,21 @@ zig_convert_builtin(f128, extend, f80, 2)
|
||||
}
|
||||
|
||||
#define zig_float_less_builtin_0(Type, operation) \
|
||||
zig_extern zig_i8 zig_expand_concat(zig_expand_concat(__##operation, \
|
||||
zig_extern zig_i32 zig_expand_concat(zig_expand_concat(__##operation, \
|
||||
zig_compiler_rt_abbrev_##Type), 2)(zig_##Type, zig_##Type); \
|
||||
static inline zig_i8 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
return (zig_i8)zig_expand_concat(zig_expand_concat(__##operation, zig_compiler_rt_abbrev_##Type), 2)(lhs, rhs); \
|
||||
static inline zig_i32 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
return zig_expand_concat(zig_expand_concat(__##operation, zig_compiler_rt_abbrev_##Type), 2)(lhs, rhs); \
|
||||
}
|
||||
#define zig_float_less_builtin_1(Type, operation) \
|
||||
static inline zig_i8 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
return (zig_i8)(!(lhs <= rhs) - (lhs < rhs)); \
|
||||
static inline zig_i32 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
return (!(lhs <= rhs) - (lhs < rhs)); \
|
||||
}
|
||||
|
||||
#define zig_float_greater_builtin_0(Type, operation) \
|
||||
zig_float_less_builtin_0(Type, operation)
|
||||
#define zig_float_greater_builtin_1(Type, operation) \
|
||||
static inline zig_i8 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
return (zig_i8)((lhs > rhs) - !(lhs >= rhs)); \
|
||||
static inline zig_i32 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
|
||||
return ((lhs > rhs) - !(lhs >= rhs)); \
|
||||
}
|
||||
|
||||
#define zig_float_binary_builtin_0(Type, operation, operator) \
|
||||
|
||||
@ -176,7 +176,7 @@ const reserved_idents = std.ComptimeStringMap(void, .{
|
||||
.{ "register", {} },
|
||||
.{ "restrict", {} },
|
||||
.{ "return", {} },
|
||||
.{ "short ", {} },
|
||||
.{ "short", {} },
|
||||
.{ "signed", {} },
|
||||
.{ "size_t", {} },
|
||||
.{ "sizeof", {} },
|
||||
@ -1140,10 +1140,16 @@ pub const DeclGen = struct {
|
||||
const index = ty.unionTagFieldIndex(union_obj.tag, dg.module).?;
|
||||
const field_ty = ty.unionFields().values()[index].ty;
|
||||
const field_name = ty.unionFields().keys()[index];
|
||||
var it = ty.unionFields().iterator();
|
||||
if (field_ty.hasRuntimeBits()) {
|
||||
try writer.print(".{ } = ", .{fmtIdent(field_name)});
|
||||
try dg.renderValue(writer, field_ty, union_obj.val, .Initializer);
|
||||
} else try writer.writeByte('0');
|
||||
} else while (it.next()) |field| {
|
||||
if (!field.value_ptr.ty.hasRuntimeBits()) continue;
|
||||
try writer.print(".{ } = ", .{fmtIdent(field.key_ptr.*)});
|
||||
try dg.renderValue(writer, field.value_ptr.ty, Value.undef, .Initializer);
|
||||
break;
|
||||
} else try writer.writeAll(".empty_union = 0");
|
||||
if (ty.unionTagTypeSafety()) |_| try writer.writeByte('}');
|
||||
try writer.writeByte('}');
|
||||
},
|
||||
@ -2658,12 +2664,14 @@ fn airPtrElemPtr(f: *Function, inst: Air.Inst.Index) !CValue {
|
||||
const ty_pl = f.air.instructions.items(.data)[inst].ty_pl;
|
||||
const bin_op = f.air.extraData(Air.Bin, ty_pl.payload).data;
|
||||
const ptr_ty = f.air.typeOf(bin_op.lhs);
|
||||
const child_ty = ptr_ty.childType();
|
||||
|
||||
const ptr = try f.resolveInst(bin_op.lhs);
|
||||
if (!child_ty.hasRuntimeBitsIgnoreComptime()) return ptr;
|
||||
const index = try f.resolveInst(bin_op.rhs);
|
||||
|
||||
const writer = f.object.writer();
|
||||
const local = try f.allocLocal(f.air.typeOfIndex(inst), .Const);
|
||||
|
||||
try writer.writeAll(" = &(");
|
||||
if (ptr_ty.ptrSize() == .One) {
|
||||
// It's a pointer to an array, so we need to de-reference.
|
||||
@ -2717,15 +2725,23 @@ fn airSliceElemPtr(f: *Function, inst: Air.Inst.Index) !CValue {
|
||||
const ty_pl = f.air.instructions.items(.data)[inst].ty_pl;
|
||||
const bin_op = f.air.extraData(Air.Bin, ty_pl.payload).data;
|
||||
|
||||
const slice_ty = f.air.typeOf(bin_op.lhs);
|
||||
const child_ty = slice_ty.elemType2();
|
||||
const slice = try f.resolveInst(bin_op.lhs);
|
||||
const index = try f.resolveInst(bin_op.rhs);
|
||||
|
||||
const writer = f.object.writer();
|
||||
const local = try f.allocLocal(f.air.typeOfIndex(inst), .Const);
|
||||
try writer.writeAll(" = &");
|
||||
try writer.writeAll(" = ");
|
||||
if (child_ty.hasRuntimeBitsIgnoreComptime()) try writer.writeByte('&');
|
||||
try f.writeCValue(writer, slice, .Other);
|
||||
try writer.writeAll(".ptr[");
|
||||
try f.writeCValue(writer, index, .Other);
|
||||
try writer.writeAll("];\n");
|
||||
try writer.writeAll(".ptr");
|
||||
if (child_ty.hasRuntimeBitsIgnoreComptime()) {
|
||||
const index = try f.resolveInst(bin_op.rhs);
|
||||
try writer.writeByte('[');
|
||||
try f.writeCValue(writer, index, .Other);
|
||||
try writer.writeByte(']');
|
||||
}
|
||||
try writer.writeAll(";\n");
|
||||
return local;
|
||||
}
|
||||
|
||||
@ -4825,7 +4841,7 @@ fn airCmpBuiltinCall(
|
||||
try f.writeCValue(writer, try f.resolveInst(bin_op.lhs), .FunctionArgument);
|
||||
try writer.writeAll(", ");
|
||||
try f.writeCValue(writer, try f.resolveInst(bin_op.rhs), .FunctionArgument);
|
||||
try writer.print(") {s} {};\n", .{ operator, try f.fmtIntLiteral(Type.initTag(.i8), Value.zero) });
|
||||
try writer.print(") {s} {};\n", .{ operator, try f.fmtIntLiteral(Type.initTag(.i32), Value.zero) });
|
||||
return local;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user