1 // This tests sparse "-vcompound" output. 2 #define NULL ((void*)0) 3 typedef unsigned int uint32_t; 4 typedef unsigned long long uint64_t; 5 6 // Do not list functions. do_nothing(void)7static int do_nothing(void) 8 {} 9 10 // no: zero(void)11static inline int zero(void) 12 { 13 return 0 / 1; 14 } 15 16 // no: 17 struct inventory { 18 unsigned char description[64]; 19 unsigned char department[64]; 20 uint32_t dept_number; 21 uint32_t item_cost; 22 uint64_t stock_number; 23 uint32_t tally[12]; // per month 24 }; 25 26 // no get_inv(uint64_t stocknum)27static struct inventory *get_inv(uint64_t stocknum) 28 { 29 return NULL; 30 } 31 32 // no 33 union un { 34 struct inventory inv; 35 unsigned char bytes[0]; 36 }; 37 38 // yes 39 static union un un; 40 41 // yes 42 static struct inventory inven[100]; 43 44 // no 45 typedef struct inventory inventory_t; 46 47 // no 48 static struct inventory *invptr; 49 50 // yes 51 static inventory_t invent[10]; 52 53 // no 54 static float floater; 55 static double double_float; 56 57 // yes 58 static float floats[42]; 59 static double doubles[84]; 60 61 // no main(void)62int main(void) 63 { 64 // no, these are not global. 65 struct inventory inv[10]; 66 inventory_t invt[10]; 67 // what about statics? 68 static struct inventory invtop; 69 static inventory_t inv_top; 70 static uint64_t stocknums[100]; 71 72 invptr = get_inv(42000); 73 return 0; 74 } 75 76 /* 77 * check-name: compound-sizes 78 * check-command: sparse -vcompound $file 79 * check-assert: _Alignof(long long) == 8 80 * 81 * check-error-start 82 compound-sizes.c:39:17: union un static [toplevel] un: compound size 192, alignment 8 83 compound-sizes.c:42:25: struct inventory static [toplevel] inven[100]: compound size 19200, alignment 8 84 compound-sizes.c:51:33: struct inventory static [toplevel] [usertype] invent[10]: compound size 1920, alignment 8 85 compound-sizes.c:58:25: float static [toplevel] floats[42]: compound size 168, alignment 4 86 compound-sizes.c:59:25: double static [toplevel] doubles[84]: compound size 672, alignment 8 87 * check-error-end 88 */ 89