• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
2 
3 // rdar://8818236
4 namespace rdar8818236 {
5 struct S {
6   char c2;
7   union {
8     char c;
9     int i;
10   };
11 };
12 
13 // CHECK: @_ZN11rdar88182363fooE = global i64 4
14 char S::*foo  = &S::c;
15 }
16 
17 struct A {
18   union {
19     int a;
20     void* b;
21   };
22 
AA23   A() : a(0) { }
24 };
25 
26 A a;
27 
28 namespace PR7021 {
29   struct X
30   {
31     union { long l; };
32   };
33 
34   // CHECK: define void @_ZN6PR70211fENS_1XES0_
f(X x,X z)35   void f(X x, X z) {
36     X x1;
37 
38     // CHECK: store i64 1, i64
39     x1.l = 1;
40 
41     // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
42     X x2(x1);
43 
44     X x3;
45     // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
46     x3 = x1;
47 
48     // CHECK: ret void
49   }
50 }
51 
52 namespace test2 {
53   struct A {
54     struct {
55       union {
56         int b;
57       };
58     };
59 
60     A();
61   };
62 
A()63   A::A() : b(10) { }
64   // CHECK: define void @_ZN5test21AC2Ev(
65   // CHECK-NOT: }
66   // CHECK: store i32 10
67   // CHECK: }
68 }
69 
70 namespace test3 {
71   struct A {
72     union {
73       mutable char fibers[100];
74       struct {
75         void (*callback)(void*);
76         void *callback_value;
77       };
78     };
79 
80     A();
81   };
82 
A()83   A::A() : callback(0), callback_value(0) {}
84   // CHECK: define void @_ZN5test31AC2Ev(
85   // CHECK: [[THIS:%.*]] = load
86   // CHECK-NEXT: [[UNION:%.*]] = getelementptr inbounds {{.*}} [[THIS]], i32 0, i32 0
87   // CHECK-NEXT: [[STRUCT:%.*]] = bitcast {{.*}}* [[UNION]] to
88   // CHECK-NEXT: [[CALLBACK:%.*]] = getelementptr inbounds {{.*}} [[STRUCT]], i32 0, i32 0
89   // CHECK: store
90   // CHECK-NEXT: [[UNION:%.*]] = getelementptr inbounds {{.*}} [[THIS]], i32 0, i32 0
91   // CHECK-NEXT: [[STRUCT:%.*]] = bitcast {{.*}}* [[UNION]] to
92   // CHECK-NEXT: [[CVALUE:%.*]] = getelementptr inbounds {{.*}} [[STRUCT]], i32 0, i32 1
93   // CHECK-NEXT: store i8* null, i8** [[CVALUE]]
94 }
95 
96 struct S {
97   // CHECK: store i32 42
98   // CHECK: store i32 55
SS99   S() : x(42), y(55) {}
100   union {
101     struct {
102       int x;
103       union { int y; };
104     };
105   };
106 } s;
107 
108 
109 //PR8760
110 template <typename T> struct Foo {
FooFoo111   Foo() : ptr(__nullptr) {}
112   union {
113     T *ptr;
114   };
115 };
116 Foo<int> f;
117 
118 namespace PR9683 {
119   struct QueueEntry {
120     union {
121       struct {
122         void* mPtr;
123         union {
124           unsigned mSubmissionTag;
125         };
126       };
127       unsigned mValue;
128     };
QueueEntryPR9683::QueueEntry129     QueueEntry() {}
130   };
131   QueueEntry QE;
132 }
133