summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/union-init.c
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2008-05-30 19:58:50 +0000
committerEli Friedman <eli.friedman@gmail.com>2008-05-30 19:58:50 +0000
commit34994cbcbf83dee141ee63c8fdf513932b6952b0 (patch)
treedd4211055a7cae06523ea96f76ac73834433462d /clang/test/CodeGen/union-init.c
parentb6725054b833a2e16ca7819fc73f649826a01e47 (diff)
downloadbcm5719-llvm-34994cbcbf83dee141ee63c8fdf513932b6952b0.tar.gz
bcm5719-llvm-34994cbcbf83dee141ee63c8fdf513932b6952b0.zip
Fix and enable generating general union initializers. Essentially, what
this does is reconstruct the type for structs and arrays if the type wouldn't be compatible otherwise. The assertion about packing in the struct type reconstruction code sucks, but I don't see any obvious way to fix it. Maybe we need a general utility method to take a list of types and alignments and try to construct an unpacked type if possible? llvm-svn: 51785
Diffstat (limited to 'clang/test/CodeGen/union-init.c')
-rw-r--r--clang/test/CodeGen/union-init.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/clang/test/CodeGen/union-init.c b/clang/test/CodeGen/union-init.c
new file mode 100644
index 00000000000..9a515a72d92
--- /dev/null
+++ b/clang/test/CodeGen/union-init.c
@@ -0,0 +1,31 @@
+// RUN: clang -emit-llvm < %s -o -
+
+// A nice and complicated initialization example with unions from Python
+typedef int Py_ssize_t;
+
+typedef union _gc_head {
+ struct {
+ union _gc_head *gc_next;
+ union _gc_head *gc_prev;
+ Py_ssize_t gc_refs;
+ } gc;
+ long double dummy; /* force worst-case alignment */
+} PyGC_Head;
+
+struct gc_generation {
+ PyGC_Head head;
+ int threshold; /* collection threshold */
+ int count; /* count of allocations or collections of younger
+ generations */
+};
+
+#define NUM_GENERATIONS 3
+#define GEN_HEAD(n) (&generations[n].head)
+
+/* linked lists of container objects */
+struct gc_generation generations[NUM_GENERATIONS] = {
+ /* PyGC_Head, threshold, count */
+ {{{GEN_HEAD(0), GEN_HEAD(0), 0}}, 700, 0},
+ {{{GEN_HEAD(1), GEN_HEAD(1), 0}}, 10, 0},
+ {{{GEN_HEAD(2), GEN_HEAD(2), 0}}, 10, 0},
+};
OpenPOWER on IntegriCloud