From: Zbigniew Jędrzejewski-Szmek Date: Tue, 22 May 2018 07:07:35 +0000 (+0200) Subject: test-sizeof: show that a small 64 field is not enough to force the enum to be 64... X-Git-Tag: v239~227^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=994282d2dedfda8a4a89ba1735637884a3dc3a2d;p=thirdparty%2Fsystemd.git test-sizeof: show that a small 64 field is not enough to force the enum to be 64 bits On both 32 and 64 bits, the result is: enum Enum → 32 bits, unsigned enum BigEnum → 32 bits, unsigned enum BigEnum2 → 64 bits, unsigned big_enum2_pos → 4 big_enum2_neg → 8 The last two lines show that even if the enum is 64 bit, and the field of an enum is defined with UINT64_C(), the field can still be smaller. --- diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c index 2ebbbb304a5..d7897ed7659 100644 --- a/src/test/test-sizeof.c +++ b/src/test/test-sizeof.c @@ -26,7 +26,12 @@ enum Enum { }; enum BigEnum { - big_enum_value = UINT64_C(-1), + big_enum_value = UINT64_C(1), +}; + +enum BigEnum2 { + big_enum2_pos = UINT64_C(1), + big_enum2_neg = UINT64_C(-1), }; int main(void) { @@ -55,6 +60,10 @@ int main(void) { info(enum Enum); info(enum BigEnum); + info(enum BigEnum2); + assert_cc(sizeof(enum BigEnum2) == 8); + printf("big_enum2_pos → %zu\n", sizeof(big_enum2_pos)); + printf("big_enum2_neg → %zu\n", sizeof(big_enum2_neg)); return 0; }