/*
class base { int data; };
class child1: public base { bool flag; };
class child1a: public child1 { enum {d} e; };
class child2: public base { char c; };
*/

typedef struct {
  int data;
  struct {} kind;
} base_final;

typedef struct {
  int data;
  union {
    struct {
    } base;
    struct {
      bool flag;
      struct {} kind;
    } child1;
  } kind;
} child1_final;

typedef struct {
  int data;
  union {
    struct {
    } base;
    struct {
      bool flag;
      union {
        struct {
        } child1;
        struct {
          enum {d} e;
        } child1a;
      } kind;
    } child1;
  } kind;
} child1a;

typedef struct {
  int data;
  union {
    struct {
    } base;
    struct {
      bool flag;
      union {
        struct {
        } child1;
        struct {
          enum {d} e;
        } child1a;
      } kind;
    } child1;
  } kind;
} child1;

typedef struct {
  int data;
  union {
    struct {
    } base;
    struct {
      char c;
    } child2;
  } kind;
} child2;

typedef struct {
  int data;
  union {
    struct {
    } base;
    struct {
      bool flag;
      struct {} kind;
    } child1;
    struct {
      char c;
    } child2;
  } kind;
} base;

place base_final base_final: >base_final;

place child1 child1;
place child1a child1a;
place child2 child2;

trans t in {
  place base_final: b;
} out {
  place child1: is child1 b;
  place child1a: is child1a b;
  place child2: is child2 b;
};
