blob: d8ccf6052ada6e19cc56516d9cf3a7b0112b71c3 [file] [log] [blame]
// 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
*/