struct Point { int x; int y; }; struct Base1 { int b1; }; struct Base2 { int b2; }; struct DerivedSI : Base1 { int dsi; }; struct DerivedMI : Base1, Base2 { int dmi; }; struct DerivedVI : virtual Base1 { int dvi; }; void Locals() { Point pt = { // $ ussa=pt 1, // $ ussa=pt[0..4) 2 // $ ussa=pt[4..8) }; int i = pt.x; // $ ussa=pt[0..4) i = pt.y; // $ ussa=pt[4..8) int* p = &pt.x; i = *p; // $ ussa=pt[0..4) p = &pt.y; i = *p; // $ ussa=pt[4..8) } void PointsTo( int a, // $ raw=a Point& b, // $ raw=b ussa=*b Point* c, // $ raw=c ussa=*c int* d, // $ raw=d ussa=*d DerivedSI* e, // $ raw=e ussa=*e DerivedMI* f, // $ raw=f ussa=*f DerivedVI* g // $ raw=g ussa=*g ) { int i = a; // $ raw=a i = *&a; // $ raw=a i = *(&a + 0); // $ raw=a i = b.x; // $ raw=b ussa=*b[0..4) i = b.y; // $ raw=b ussa=*b[4..8) i = c->x; // $ raw=c ussa=*c[0..4) i = c->y; // $ raw=c ussa=*c[4..8) i = *d; // $ raw=d ussa=*d[0..4) i = *(d + 0); // $ raw=d ussa=*d[0..4) i = d[5]; // $ raw=d ussa=*d[20..24) i = 5[d]; // $ raw=d ussa=*d[20..24) i = d[a]; // $ raw=d raw=a ussa=*d[?..?) i = a[d]; // $ raw=d raw=a ussa=*d[?..?) int* p = &b.x; // $ raw=b i = *p; // $ ussa=*b[0..4) p = &b.y; // $ raw=b i = *p; // $ ussa=*b[4..8) p = &c->x; // $ raw=c i = *p; // $ ussa=*c[0..4) p = &c->y; // $ raw=c i = *p; // $ ussa=*c[4..8) p = &d[5]; // $ raw=d i = *p; // $ ussa=*d[20..24) p = &d[a]; // $ raw=d raw=a i = *p; // $ ussa=*d[?..?) Point* q = &c[a]; // $ raw=c raw=a i = q->x; // $ ussa=*c[?..?) i = q->y; // $ ussa=*c[?..?) i = e->b1; // $ raw=e ussa=*e[0..4) i = e->dsi; // $ raw=e ussa=*e[4..8) i = f->b1; // $ raw=f ussa=*f[0..4) i = f->b2; // $ raw=f ussa=*f[4..8) i = f->dmi; // $ raw=f ussa=*f[8..12) i = g->b1; // $ raw=g ussa=*g[?..?) i = g->dvi; // $ raw=g ussa=*g[8..12) }