#undef F #undef N #undef B #undef TX #ifdef SKIP_VA const int test_va = 0; #else const int test_va = 1; #endif #define F(n, x, v, w) \ if (p->x != arg.x) FAIL (n, 74); #define N(n, x) #define B(n, x, v, w) \ if (p->x != arg.x) FAIL (n, 74); #define TX(n, type, attrs, fields, ops) \ void \ check##n##va (int z, ...) \ { \ type S##n arg, *p; \ va_list ap; \ int i; \ \ if (test_va) \ { \ va_start (ap, z); \ for (i = 0; i < 5; ++i) \ { \ p = NULL; \ switch ((z << 4) | i) \ { \ case 0x10: \ if (va_arg (ap, double) != 1.0) \ FAIL (n, 70); \ break; \ case 0x12: \ if (va_arg (ap, long long) != 2LL) \ FAIL (n, 71); \ break; \ case 0x22: \ if (va_arg (ap, long double) != 2.0L) \ FAIL (n, 72); \ break; \ case 0x11: \ case 0x20: \ case 0x21: \ case 0x24: \ p = &s##n; \ arg = va_arg (ap, type S##n); \ break; \ case 0x13: \ case 0x14: \ case 0x23: \ p = &a##n[2]; \ arg = va_arg (ap, type S##n); \ break; \ default: \ FAIL (n, 73); \ break; \ } \ if (p) \ { \ ops \ } \ } \ va_end (ap); \ } \ }