summaryrefslogtreecommitdiff
path: root/clang/test/CodeGen/union.c
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/CodeGen/union.c')
-rw-r--r--clang/test/CodeGen/union.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/clang/test/CodeGen/union.c b/clang/test/CodeGen/union.c
new file mode 100644
index 0000000..5c89e2d
--- /dev/null
+++ b/clang/test/CodeGen/union.c
@@ -0,0 +1,46 @@
+// RUN: %clang_cc1 %s -emit-llvm -o -
+
+union u_tag {
+ int a;
+ float b;
+} u;
+
+void f() {
+ u.b = 11;
+}
+
+float get_b(union u_tag *my_u) {
+ return my_u->b;
+}
+
+int f2( float __x ) {
+ union{
+ float __f;
+ unsigned int __u;
+ }__u;
+ return (int)(__u.__u >> 31);
+}
+
+typedef union { int i; int *j; } value;
+
+int f3(value v) {
+ return *v.j;
+}
+
+enum E9 { one, two };
+union S65 { enum E9 a; } ; union S65 s65;
+void fS65() { enum E9 e = s65.a; }
+
+typedef union{
+ unsigned char x[65536];
+} q;
+int qfunc() {q buf; unsigned char* x = buf.x;}
+
+union RR {_Bool a : 1;} RRU;
+int RRF(void) {return RRU.a;}
+
+// PR6164
+typedef union T0 { unsigned int : 0; } T0;
+T0 t0;
+
+union { int large_bitfield: 31; char c } u2;