xref: /llvm-project/clang/test/CodeGen/union-init.c (revision 8fbe78f6fc7b41d1a4228c126fcb522131150518)
1*8fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -emit-llvm < %s -o -
234994cbcSEli Friedman 
334994cbcSEli Friedman // A nice and complicated initialization example with unions from Python
434994cbcSEli Friedman typedef int Py_ssize_t;
534994cbcSEli Friedman 
634994cbcSEli Friedman typedef union _gc_head {
734994cbcSEli Friedman   struct {
834994cbcSEli Friedman     union _gc_head *gc_next;
934994cbcSEli Friedman     union _gc_head *gc_prev;
1034994cbcSEli Friedman     Py_ssize_t gc_refs;
1134994cbcSEli Friedman   } gc;
1234994cbcSEli Friedman   long double dummy;  /* force worst-case alignment */
1334994cbcSEli Friedman } PyGC_Head;
1434994cbcSEli Friedman 
1534994cbcSEli Friedman struct gc_generation {
1634994cbcSEli Friedman   PyGC_Head head;
1734994cbcSEli Friedman   int threshold; /* collection threshold */
1834994cbcSEli Friedman   int count;     /* count of allocations or collections of younger
1934994cbcSEli Friedman                     generations */
2034994cbcSEli Friedman };
2134994cbcSEli Friedman 
2234994cbcSEli Friedman #define NUM_GENERATIONS 3
2334994cbcSEli Friedman #define GEN_HEAD(n) (&generations[n].head)
2434994cbcSEli Friedman 
2534994cbcSEli Friedman /* linked lists of container objects */
2634994cbcSEli Friedman struct gc_generation generations[NUM_GENERATIONS] = {
2734994cbcSEli Friedman   /* PyGC_Head,                     threshold,      count */
2834994cbcSEli Friedman   {{{GEN_HEAD(0), GEN_HEAD(0), 0}}, 700,            0},
2934994cbcSEli Friedman   {{{GEN_HEAD(1), GEN_HEAD(1), 0}},  10,            0},
3034994cbcSEli Friedman   {{{GEN_HEAD(2), GEN_HEAD(2), 0}},  10,            0},
3134994cbcSEli Friedman };
32