Hi, I have no idea why nobody show his interest in my patch, but it's very helpful to boost the efficiency of debugging optimized binary and help recognizing which expression the crash happens in. For example: struct A { int a; };
struct B { int b; }; struct C : public A, public B { struct { int s; } s; int c; }; would generates the following content: Class A size=4 align=4 base size=4 base align=4 A (0x0x7fd7ed5564e0) 0 fields: int a; size: 32, bpos: 0 Class B size=4 align=4 base size=4 base align=4 B (0x0x7fd7ed556540) 0 fields: int b; size: 32, bpos: 0 Class C::<anonymous struct> size=4 align=4 base size=4 base align=4 C::<anonymous struct> (0x0x7fd7ed556660) 0 fields: int s; size: 32, bpos: 0 Class C size=16 align=4 base size=16 base align=4 C (0x0x7fd7ef215e70) 0 A (0x0x7fd7ed5565a0) 0 B (0x0x7fd7ed556600) 4 fields: A (base); size: 32, bpos: 0 B (base); size: 32, bpos: 32 C::<anonymous struct> s; size: 32, bpos: 64 int c; size: 32, bpos: 96 That helps to identify the field access, the assembly: movl 12(%rax), %edx may mean accessing the field c of struct C. It helps a lot. -- lin zuojian