#include <stdio.h>
#include <stddef.h>
/*
** Attempt to find any holes in struct toCheckSize.
**
** begin struct toCheckSize
** ----
** (possible hole above a)
** ----
** int a;
** ----
** (possible hole below a)
** ----
** char b;
** ----
** (possible hole below b)
** ----
** end struct
*/
struct toCheckSize
{
int a;
char b;
} x;
#define XXX \
X(struct_size, sizeof(x)) \
X(a_size, sizeof(x.a)) \
X(b_size, sizeof(x.b)) \
X(a_offset, offsetof(struct toCheckSize, a)) \
X(b_offset, offsetof(struct toCheckSize, b)) \
X(compact_size, a_size + b_size) \
X(hole_size, struct_size - compact_size) \
X(hole_size_above_a, a_offset) \
X(hole_size_below_a, b_offset - (a_offset + a_size)) \
X(hole_size_below_b, struct_size - (b_offset + b_size))
int main(void) {
#define X(N, V) size_t N = V;
XXX
#undef X
#define X(N, V) printf("%s = %zu\n", #N, N);
XXX
#undef X
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRkZWYuaD4KCi8qCioqIEF0dGVtcHQgdG8gZmluZCBhbnkgaG9sZXMgaW4gc3RydWN0IHRvQ2hlY2tTaXplLgoqKgoqKiBiZWdpbiBzdHJ1Y3QgdG9DaGVja1NpemUKKiogLS0tLQoqKiAocG9zc2libGUgaG9sZSBhYm92ZSBhKQoqKiAtLS0tCioqIGludCBhOwoqKiAtLS0tCioqIChwb3NzaWJsZSBob2xlIGJlbG93IGEpCioqIC0tLS0KKiogY2hhciBiOwoqKiAtLS0tCioqIChwb3NzaWJsZSBob2xlIGJlbG93IGIpCioqIC0tLS0KKiogZW5kIHN0cnVjdAoqLwoKc3RydWN0IHRvQ2hlY2tTaXplCnsKICAgIGludCBhOwogICAgY2hhciBiOwp9IHg7CgojZGVmaW5lIFhYWCBcCiAgICAgICAgWChzdHJ1Y3Rfc2l6ZSwgc2l6ZW9mKHgpKSBcCiAgICAgICAgWChhX3NpemUsIHNpemVvZih4LmEpKSBcCiAgICAgICAgWChiX3NpemUsIHNpemVvZih4LmIpKSBcCiAgICAgICAgWChhX29mZnNldCwgb2Zmc2V0b2Yoc3RydWN0IHRvQ2hlY2tTaXplLCBhKSkgXAogICAgICAgIFgoYl9vZmZzZXQsIG9mZnNldG9mKHN0cnVjdCB0b0NoZWNrU2l6ZSwgYikpIFwKICAgICAgICBYKGNvbXBhY3Rfc2l6ZSwgYV9zaXplICsgYl9zaXplKSBcCiAgICAgICAgWChob2xlX3NpemUsIHN0cnVjdF9zaXplIC0gY29tcGFjdF9zaXplKSBcCiAgICAgICAgWChob2xlX3NpemVfYWJvdmVfYSwgYV9vZmZzZXQpIFwKICAgICAgICBYKGhvbGVfc2l6ZV9iZWxvd19hLCBiX29mZnNldCAtIChhX29mZnNldCArIGFfc2l6ZSkpIFwKICAgICAgICBYKGhvbGVfc2l6ZV9iZWxvd19iLCBzdHJ1Y3Rfc2l6ZSAtIChiX29mZnNldCArIGJfc2l6ZSkpCgppbnQgbWFpbih2b2lkKSB7CgkjZGVmaW5lIFgoTiwgVikgc2l6ZV90IE4gPSBWOwoJWFhYCgkjdW5kZWYgWAoJI2RlZmluZSBYKE4sIFYpIHByaW50ZigiJXMgPSAlenVcbiIsICNOLCBOKTsKCVhYWAoJI3VuZGVmIFgKCXJldHVybiAwOwp9Cg==