xref: /aosp_15_r20/external/clang/test/CodeGenObjCXX/encode.mm (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
2*67e74705SXin Li
3*67e74705SXin Li// CHECK: v17@0:8{vector<float, float, float>=}16
4*67e74705SXin Li// CHECK: {vector<float, float, float>=}
5*67e74705SXin Li// CHECK: v24@0:816
6*67e74705SXin Li
7*67e74705SXin Litemplate <typename T1, typename T2, typename T3> struct vector {
8*67e74705SXin Li  vector();
9*67e74705SXin Li  vector(T1,T2,T3);
10*67e74705SXin Li};
11*67e74705SXin Li
12*67e74705SXin Litypedef vector< float, float, float > vector3f;
13*67e74705SXin Li
14*67e74705SXin Li@interface SceneNode
15*67e74705SXin Li{
16*67e74705SXin Li vector3f position;
17*67e74705SXin Li}
18*67e74705SXin Li
19*67e74705SXin Li@property (assign, nonatomic) vector3f position;
20*67e74705SXin Li
21*67e74705SXin Li@end
22*67e74705SXin Li
23*67e74705SXin Li@interface MyOpenGLView
24*67e74705SXin Li{
25*67e74705SXin Li@public
26*67e74705SXin Li  vector3f position;
27*67e74705SXin Li}
28*67e74705SXin Li@property vector3f position;
29*67e74705SXin Li@end
30*67e74705SXin Li
31*67e74705SXin Li@implementation MyOpenGLView
32*67e74705SXin Li
33*67e74705SXin Li@synthesize position;
34*67e74705SXin Li
35*67e74705SXin Li-(void)awakeFromNib {
36*67e74705SXin Li SceneNode *sn;
37*67e74705SXin Li vector3f VF3(1.0, 1.0, 1.0);
38*67e74705SXin Li [sn setPosition:VF3];
39*67e74705SXin Li}
40*67e74705SXin Li@end
41*67e74705SXin Li
42*67e74705SXin Li
43*67e74705SXin Liclass Int3 { int x, y, z; };
44*67e74705SXin Li
45*67e74705SXin Li// Enforce @encoding for member pointers.
46*67e74705SXin Li@interface MemPtr {}
47*67e74705SXin Li- (void) foo: (int (Int3::*)) member;
48*67e74705SXin Li@end
49*67e74705SXin Li@implementation MemPtr
50*67e74705SXin Li- (void) foo: (int (Int3::*)) member {
51*67e74705SXin Li}
52*67e74705SXin Li@end
53*67e74705SXin Li
54*67e74705SXin Li// rdar: // 8519948
55*67e74705SXin Litypedef float HGVec4f __attribute__ ((vector_size(16)));
56*67e74705SXin Li
57*67e74705SXin Li@interface RedBalloonHGXFormWrapper {
58*67e74705SXin Li  HGVec4f m_Transform[4];
59*67e74705SXin Li}
60*67e74705SXin Li@end
61*67e74705SXin Li
62*67e74705SXin Li@implementation RedBalloonHGXFormWrapper
63*67e74705SXin Li@end
64*67e74705SXin Li
65*67e74705SXin Li// rdar://9357400
66*67e74705SXin Linamespace rdar9357400 {
67*67e74705SXin Li  template<int Dim1 = -1, int Dim2 = -1> struct fixed {
68*67e74705SXin Li      template<int D> struct rebind { typedef fixed<D> other; };
69*67e74705SXin Li  };
70*67e74705SXin Li
71*67e74705SXin Li  template<typename Element, int Size>
72*67e74705SXin Li  class fixed_1D
73*67e74705SXin Li  {
74*67e74705SXin Li  public:
75*67e74705SXin Li      typedef Element value_type;
76*67e74705SXin Li      typedef value_type array_impl[Size];
77*67e74705SXin Li    protected:
78*67e74705SXin Li      array_impl                  m_data;
79*67e74705SXin Li  };
80*67e74705SXin Li
81*67e74705SXin Li  template<typename Element, typename Alloc>
82*67e74705SXin Li  class vector;
83*67e74705SXin Li
84*67e74705SXin Li  template<typename Element, int Size>
85*67e74705SXin Li  class vector< Element, fixed<Size> >
86*67e74705SXin Li  : public fixed_1D<Element,Size> { };
87*67e74705SXin Li
88*67e74705SXin Li  typedef vector< float,  fixed<4> > vector4f;
89*67e74705SXin Li
90*67e74705SXin Li  // CHECK: @_ZN11rdar93574002ggE = constant [49 x i8] c"{vector<float, rdar9357400::fixed<4, -1> >=[4f]}\00"
91*67e74705SXin Li  extern const char gg[] = @encode(vector4f);
92*67e74705SXin Li}
93*67e74705SXin Li
94*67e74705SXin Li// rdar://9624314
95*67e74705SXin Linamespace rdar9624314 {
96*67e74705SXin Li  struct B2 { int x; };
97*67e74705SXin Li  struct B3 {};
98*67e74705SXin Li  struct S : B2, B3 {};
99*67e74705SXin Li
100*67e74705SXin Li  // CHECK: @_ZN11rdar96243142ggE = constant [6 x i8] c"{S=i}\00"
101*67e74705SXin Li  extern const char gg[] = @encode(S);
102*67e74705SXin Li
103*67e74705SXin Li  struct S2 { unsigned : 0; int x; unsigned : 0; };
104*67e74705SXin Li  // CHECK: @_ZN11rdar96243142g2E = constant [11 x i8] c"{S2=b0ib0}\00"
105*67e74705SXin Li  extern const char g2[] = @encode(S2);
106*67e74705SXin Li}
107*67e74705SXin Li
108*67e74705SXin Linamespace test {
109*67e74705SXin Li  class Foo {
110*67e74705SXin Li  public:
111*67e74705SXin Li   virtual void f() {};
112*67e74705SXin Li  };
113*67e74705SXin Li
114*67e74705SXin Li  class Bar {
115*67e74705SXin Li  public:
116*67e74705SXin Li   virtual void g() {};
117*67e74705SXin Li  };
118*67e74705SXin Li
119*67e74705SXin Li  class Zoo : virtual public Foo, virtual public Bar {
120*67e74705SXin Li  public:
121*67e74705SXin Li   int x;
122*67e74705SXin Li   int y;
123*67e74705SXin Li  };
124*67e74705SXin Li
125*67e74705SXin Li  // CHECK: @_ZN4test3ecdE = constant [15 x i8] c"{Zoo=^^?ii^^?}\00"
126*67e74705SXin Li  extern const char ecd[] = @encode(Zoo);
127*67e74705SXin Li}
128*67e74705SXin Li
129*67e74705SXin Listruct Base1 {
130*67e74705SXin Li  char x;
131*67e74705SXin Li};
132*67e74705SXin Li
133*67e74705SXin Listruct DBase : public Base1 {
134*67e74705SXin Li  double x;
135*67e74705SXin Li  virtual ~DBase();
136*67e74705SXin Li};
137*67e74705SXin Li
138*67e74705SXin Listruct Sub_with_virt : virtual DBase {
139*67e74705SXin Li  long x;
140*67e74705SXin Li};
141*67e74705SXin Li
142*67e74705SXin Listruct Sub2 : public Sub_with_virt, public Base1, virtual DBase {
143*67e74705SXin Li  float x;
144*67e74705SXin Li};
145*67e74705SXin Li
146*67e74705SXin Li// CHECK: @g1 = constant [10 x i8] c"{Base1=c}\00"
147*67e74705SXin Liextern const char g1[] = @encode(Base1);
148*67e74705SXin Li
149*67e74705SXin Li// CHECK: @g2 = constant [14 x i8] c"{DBase=^^?cd}\00"
150*67e74705SXin Liextern const char g2[] = @encode(DBase);
151*67e74705SXin Li
152*67e74705SXin Li// CHECK: @g3 = constant [26 x i8] c"{Sub_with_virt=^^?q^^?cd}\00"
153*67e74705SXin Liextern const char g3[] = @encode(Sub_with_virt);
154*67e74705SXin Li
155*67e74705SXin Li// CHECK: @g4 = constant [19 x i8] c"{Sub2=^^?qcf^^?cd}\00"
156*67e74705SXin Liextern const char g4[] = @encode(Sub2);
157*67e74705SXin Li
158*67e74705SXin Li// http://llvm.org/PR9927
159*67e74705SXin Liclass allocator {
160*67e74705SXin Li};
161*67e74705SXin Liclass basic_string     {
162*67e74705SXin Listruct _Alloc_hider : allocator       {
163*67e74705SXin Lichar* _M_p;
164*67e74705SXin Li};
165*67e74705SXin Li_Alloc_hider _M_dataplus;
166*67e74705SXin Li};
167*67e74705SXin Li
168*67e74705SXin Li// CHECK: @g5 = constant [32 x i8] c"{basic_string={_Alloc_hider=*}}\00"
169*67e74705SXin Liextern const char g5[] = @encode(basic_string);
170*67e74705SXin Li
171*67e74705SXin Li
172*67e74705SXin Li// PR10990
173*67e74705SXin Liclass CefBase {
174*67e74705SXin Li  virtual ~CefBase() {}
175*67e74705SXin Li};
176*67e74705SXin Liclass CefBrowser : public virtual CefBase {};
177*67e74705SXin Liclass CefBrowserImpl : public CefBrowser {};
178*67e74705SXin Li// CHECK: @g6 = constant [21 x i8] c"{CefBrowserImpl=^^?}\00"
179*67e74705SXin Liextern const char g6[] = @encode(CefBrowserImpl);
180*67e74705SXin Li
181*67e74705SXin Li// PR10990_2
182*67e74705SXin Liclass CefBase2 {
183*67e74705SXin Li  virtual ~CefBase2() {}
184*67e74705SXin Li  int i;
185*67e74705SXin Li};
186*67e74705SXin Liclass CefBrowser2 : public virtual CefBase2 {};
187*67e74705SXin Liclass CefBrowserImpl2 : public CefBrowser2 {};
188*67e74705SXin Li// CHECK: @g7 = constant [26 x i8] c"{CefBrowserImpl2=^^?^^?i}\00"
189*67e74705SXin Liextern const char g7[] = @encode(CefBrowserImpl2);
190*67e74705SXin Li
191*67e74705SXin Li// <rdar://problem/11324167>
192*67e74705SXin Listruct Empty {};
193*67e74705SXin Li
194*67e74705SXin Listruct X : Empty {
195*67e74705SXin Li  int array[10];
196*67e74705SXin Li};
197*67e74705SXin Li
198*67e74705SXin Listruct Y : Empty {
199*67e74705SXin Li  X vec;
200*67e74705SXin Li};
201*67e74705SXin Li
202*67e74705SXin Li// CHECK: @g8 = constant [14 x i8] c"{Y={X=[10i]}}\00"
203*67e74705SXin Liextern const char g8[] = @encode(Y);
204*67e74705SXin Li
205*67e74705SXin Li
206*67e74705SXin Liclass dynamic_class {
207*67e74705SXin Lipublic:
208*67e74705SXin Li  virtual ~dynamic_class();
209*67e74705SXin Li};
210*67e74705SXin Li@interface has_dynamic_class_ivar
211*67e74705SXin Li@end
212*67e74705SXin Li@implementation has_dynamic_class_ivar {
213*67e74705SXin Li  dynamic_class dynamic_class_ivar;
214*67e74705SXin Li}
215*67e74705SXin Li@end
216*67e74705SXin Li// CHECK: private global [41 x i8] c"{dynamic_class=\22_vptr$dynamic_class\22^^?}\00"
217*67e74705SXin Li
218*67e74705SXin Linamespace PR17142 {
219*67e74705SXin Li  struct A { virtual ~A(); };
220*67e74705SXin Li  struct B : virtual A { int y; };
221*67e74705SXin Li  struct C { virtual ~C(); int z; };
222*67e74705SXin Li  struct D : C, B { int a; };
223*67e74705SXin Li  struct E : D {};
224*67e74705SXin Li  // CHECK: @_ZN7PR171421xE = constant [14 x i8] c"{E=^^?i^^?ii}\00"
225*67e74705SXin Li  extern const char x[] = @encode(E);
226*67e74705SXin Li}
227