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