I don't know why it can't use item as a part of another struct, never heard such a problem. And i also make a test, it looks like working ok.

typedef unsigned long int       uint64_t;
struct a{
    int x ;
    union {
        uint64_t cas;
        char end;
    } data[];
};

struct b{
 struct a aa;
 int y;
};

int main(int argc, char ** argv){
    struct a a1;
    struct b b1;

    b1.aa.x = 1;
    b1.y    = 2;

printf("size of a1 is %d, size of b1 is %d \n", sizeof(struct a), sizeof(struct b));
printf("b1.aa.x is %d, b1.y is %d \n", b1.aa.x, b1.y);
return 0;
}
-------------
[root@jason-2 test]# gcc test.c 
[root@jason-2 test]# ./a.out 
size of a1 is 8, size of b1 is 16 
b1.aa.x is 1, b1.y is 2 
[root@jason-2 test]#