// This tests sparse "-vcompound" output. #define NULL ((void*)0) typedef unsigned int uint32_t; typedef unsigned long long uint64_t; // Do not list functions. static int do_nothing(void) {} // no: static inline int zero(void) { return 0 / 1; } // no: struct inventory { unsigned char description[64]; unsigned char department[64]; uint32_t dept_number; uint32_t item_cost; uint64_t stock_number; uint32_t tally[12]; // per month }; // no static struct inventory *get_inv(uint64_t stocknum) { return NULL; } // no union un { struct inventory inv; unsigned char bytes[0]; }; // yes static union un un; // yes static struct inventory inven[100]; // no typedef struct inventory inventory_t; // no static struct inventory *invptr; // yes static inventory_t invent[10]; // no static float floater; static double double_float; // yes static float floats[42]; static double doubles[84]; // no int main(void) { // no, these are not global. struct inventory inv[10]; inventory_t invt[10]; // what about statics? static struct inventory invtop; static inventory_t inv_top; static uint64_t stocknums[100]; invptr = get_inv(42000); return 0; } /* * check-name: compound-sizes * check-command: sparse -vcompound $file * check-assert: _Alignof(long long) == 8 * * check-error-start compound-sizes.c:39:17: union un static [toplevel] un: compound size 192, alignment 8 compound-sizes.c:42:25: struct inventory static [toplevel] inven[100]: compound size 19200, alignment 8 compound-sizes.c:51:33: struct inventory static [toplevel] [usertype] invent[10]: compound size 1920, alignment 8 compound-sizes.c:58:25: float static [toplevel] floats[42]: compound size 168, alignment 4 compound-sizes.c:59:25: double static [toplevel] doubles[84]: compound size 672, alignment 8 * check-error-end */