| #include "struct-layout-1.h" |
| |
| #define F(n, x, v, w) \ |
| if (info.flds[i] != &s##n.x) \ |
| FAIL (n, 50); \ |
| if (info.sizes[i] != sizeof (s##n.x)) \ |
| FAIL (n, 51); \ |
| if (info.aligns[i] != __alignof__ (s##n.x)) \ |
| FAIL (n, 52); \ |
| if (s##n.x != (__typeof__ (s##n.x)) v) \ |
| FAIL (n, 53); \ |
| if (a##n[2].x != (__typeof__ (s##n.x)) w) \ |
| FAIL (n, 54); \ |
| if (arg0.x != s##n.x) \ |
| FAIL (n, 55); \ |
| if (arg2.x != a##n[2].x) \ |
| FAIL (n, 56); \ |
| ret.x = s##n.x; \ |
| ++i; |
| #define N(n, x) \ |
| if (info.flds[i] != &s##n.x) \ |
| FAIL (n, 50); \ |
| if (info.sizes[i] != sizeof (s##n.x)) \ |
| FAIL (n, 51); \ |
| if (info.aligns[i] != __alignof__ (s##n.x)) \ |
| FAIL (n, 52); \ |
| ++i; |
| #define B(n, x, v, w) \ |
| b1.x = v; b2.x = w; \ |
| if (s##n.x != b1.x) \ |
| FAIL (n, 53); \ |
| if (a##n[2].x != b2.x) \ |
| FAIL (n, 54); \ |
| if (arg0.x != s##n.x) \ |
| FAIL (n, 55); \ |
| if (arg2.x != a##n[2].x) \ |
| FAIL (n, 56); \ |
| ret.x = s##n.x; \ |
| ++j; |
| #ifdef CXX14_VS_CXX17 |
| struct empty_base {}; |
| #define EMPTY_BASE : public empty_base |
| #else |
| #define EMPTY_BASE |
| #endif |
| #define TX(n, type, attrs, fields, ops) \ |
| type S##n EMPTY_BASE { fields } attrs; \ |
| extern type S##n s##n; \ |
| type S##n a##n[5]; \ |
| type S##n \ |
| check##n (type S##n arg0, type S##n *arg1, type S##n arg2) \ |
| { \ |
| type S##n ret; \ |
| type S##n b1, b2; \ |
| int i, j; \ |
| \ |
| memset (&ret, 0, sizeof (ret)); \ |
| memset (&b1, 0, sizeof (b1)); \ |
| memset (&b2, 0, sizeof (b2)); \ |
| if (info.sp != &s##n) \ |
| FAIL (n, 10); \ |
| if (info.a0p != &a##n[0]) \ |
| FAIL (n, 11); \ |
| if (info.a3p != &a##n[3]) \ |
| FAIL (n, 12); \ |
| if (info.sz != sizeof (s##n)) \ |
| FAIL (n, 13); \ |
| if (info.als != __alignof__ (s##n)) \ |
| FAIL (n, 14); \ |
| if (info.ala0 != __alignof__ (a##n[0])) \ |
| FAIL (n, 15); \ |
| if (info.ala3 != __alignof__ (a##n[3])) \ |
| FAIL (n, 16); \ |
| if (arg1 != &a##n[1]) \ |
| FAIL (n, 17); \ |
| i = 0; j = 0; \ |
| ops \ |
| if (i != info.nfields || j != info.nbitfields) \ |
| FAIL (n, 18); \ |
| \ |
| return ret; \ |
| } |