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