That is definitely a complex structure. This is caused by:
case=4514
Deleting most of the structure, and changing to known types, to get a fairly simple test case, in this code VA will not suggest "CurrentStackLocation"
typedef struct _IRP {
union {
struct {
struct {
int ListEntry;
union {
int *CurrentStackLocation;
int PacketType;
};
};
} Overlay;
} Tail;
} IRP, *PIRP;
static void useComplexStruct()
{
PIRP Irp;
Irp->Tail.Overlay.CurrentStackLocation;
}
To make this work add an optional name to the union, so the code becomes:
typedef struct _IRP {
union {
struct {
struct {
int ListEntry;
union ANONYMOUS_UNION {
int *CurrentStackLocation;
int PacketType;
};
};
} Overlay;
} Tail;
} IRP, *PIRP;
static void useComplexStruct()
{
PIRP Irp;
Irp->Tail.Overlay.CurrentStackLocation;
}
This has the side effect of adding "ANONYMOUS_UNION" to the list of suggested members, but the missing members are now listed correctly.