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