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) {
|
if (type_val->special != ConstValSpecialLazy) {
|
||||||
assert(type_val->special == ConstValSpecialStatic);
|
assert(type_val->special == ConstValSpecialStatic);
|
||||||
if ((type_val->data.x_type->id == ZigTypeIdStruct &&
|
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->id == ZigTypeIdUnion &&
|
||||||
type_val->data.x_type->data.unionation.resolve_loop_flag_zero_bits) ||
|
type_val->data.x_type->data.unionation.resolve_loop_flag_zero_bits))
|
||||||
type_val->data.x_type->id == ZigTypeIdPointer)
|
|
||||||
{
|
{
|
||||||
// Does a struct/union which contains a pointer field to itself have bits? Yes.
|
// Does a struct/union which contains a pointer field to itself have bits? Yes.
|
||||||
*is_zero_bits = false;
|
*is_zero_bits = false;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
const builtin = @import("builtin");
|
const std = @import("std");
|
||||||
const expect = @import("std").testing.expect;
|
const builtin = std.builtin;
|
||||||
|
const expect = std.testing.expect;
|
||||||
|
const expectEqual = std.testing.expectEqual;
|
||||||
|
|
||||||
test "@sizeOf and @TypeOf" {
|
test "@sizeOf and @TypeOf" {
|
||||||
const y: @TypeOf(x) = 120;
|
const y: @TypeOf(x) = 120;
|
||||||
|
@ -135,3 +137,31 @@ test "@bitSizeOf" {
|
||||||
a: u2
|
a: u2
|
||||||
}) == 2);
|
}) == 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