root/usr/src/tools/smatch/src/validation/compound-sizes.c
// 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
 */