parent
26b2e5fda8
commit
b46efcde82
|
@ -1132,10 +1132,9 @@ Error type_val_resolve_zero_bits(CodeGen *g, ZigValue *type_val, ZigType *parent
|
|||
if (type_val->special != ConstValSpecialLazy) {
|
||||
assert(type_val->special == ConstValSpecialStatic);
|
||||
if ((type_val->data.x_type->id == ZigTypeIdStruct &&
|
||||
type_val->data.x_type->data.structure.resolve_loop_flag_zero_bits) ||
|
||||
type_val->data.x_type->data.structure.resolve_loop_flag_zero_bits) ||
|
||||
(type_val->data.x_type->id == ZigTypeIdUnion &&
|
||||
type_val->data.x_type->data.unionation.resolve_loop_flag_zero_bits) ||
|
||||
type_val->data.x_type->id == ZigTypeIdPointer)
|
||||
type_val->data.x_type->data.unionation.resolve_loop_flag_zero_bits))
|
||||
{
|
||||
// Does a struct/union which contains a pointer field to itself have bits? Yes.
|
||||
*is_zero_bits = false;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
const builtin = @import("builtin");
|
||||
const expect = @import("std").testing.expect;
|
||||
const std = @import("std");
|
||||
const builtin = std.builtin;
|
||||
const expect = std.testing.expect;
|
||||
const expectEqual = std.testing.expectEqual;
|
||||
|
||||
test "@sizeOf and @TypeOf" {
|
||||
const y: @TypeOf(x) = 120;
|
||||
|
@ -135,3 +137,31 @@ test "@bitSizeOf" {
|
|||
a: u2
|
||||
}) == 2);
|
||||
}
|
||||
|
||||
test "@sizeOf comparison against zero" {
|
||||
const S0 = struct {
|
||||
f: *@This(),
|
||||
};
|
||||
const U0 = union {
|
||||
f: *@This(),
|
||||
};
|
||||
const S = struct {
|
||||
fn doTheTest(comptime T: type, comptime result: bool) void {
|
||||
expectEqual(result, @sizeOf(T) > 0);
|
||||
}
|
||||
};
|
||||
// Zero-sized type
|
||||
S.doTheTest(u0, false);
|
||||
S.doTheTest(*u0, false);
|
||||
// Non byte-sized type
|
||||
S.doTheTest(u1, true);
|
||||
S.doTheTest(*u1, true);
|
||||
// Regular type
|
||||
S.doTheTest(u8, true);
|
||||
S.doTheTest(*u8, true);
|
||||
S.doTheTest(f32, true);
|
||||
S.doTheTest(*f32, true);
|
||||
// Container with ptr pointing to themselves
|
||||
S.doTheTest(S0, true);
|
||||
S.doTheTest(U0, true);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue