Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-pc-win32 | FileCheck %s
      2 
      3 void a1() {}
      4 // CHECK: "\01?a1@@YAXXZ"
      5 
      6 int a2() { return 0; }
      7 // CHECK: "\01?a2@@YAHXZ"
      8 
      9 const int a3() { return 0; }
     10 // CHECK: "\01?a3@@YA?BHXZ"
     11 
     12 volatile int a4() { return 0; }
     13 // CHECK: "\01?a4@@YA?CHXZ"
     14 
     15 const volatile int a5() { return 0; }
     16 // CHECK: "\01?a5@@YA?DHXZ"
     17 
     18 float a6() { return 0.0f; }
     19 // CHECK: "\01?a6@@YAMXZ"
     20 
     21 int *b1() { return 0; }
     22 // CHECK: "\01?b1@@YAPAHXZ"
     23 
     24 const char *b2() { return 0; }
     25 // CHECK: "\01?b2@@YAPBDXZ"
     26 
     27 float *b3() { return 0; }
     28 // CHECK: "\01?b3@@YAPAMXZ"
     29 
     30 const float *b4() { return 0; }
     31 // CHECK: "\01?b4@@YAPBMXZ"
     32 
     33 volatile float *b5() { return 0; }
     34 // CHECK: "\01?b5@@YAPCMXZ"
     35 
     36 const volatile float *b6() { return 0; }
     37 // CHECK: "\01?b6@@YAPDMXZ"
     38 
     39 float &b7() { return *(float*)0; }
     40 // CHECK: "\01?b7@@YAAAMXZ"
     41 
     42 const float &b8() { return *(float*)0; }
     43 // CHECK: "\01?b8@@YAABMXZ"
     44 
     45 volatile float &b9() { return *(float*)0; }
     46 // CHECK: "\01?b9@@YAACMXZ"
     47 
     48 const volatile float &b10() { return *(float*)0; }
     49 // CHECK: "\01?b10@@YAADMXZ"
     50 
     51 const char** b11() { return 0; }
     52 // CHECK: "\01?b11@@YAPAPBDXZ"
     53 
     54 class A {};
     55 
     56 A c1() { return A(); }
     57 // CHECK: "\01?c1@@YA?AVA@@XZ"
     58 
     59 const A c2() { return A(); }
     60 // CHECK: "\01?c2@@YA?BVA@@XZ"
     61 
     62 volatile A c3() { return A(); }
     63 // CHECK: "\01?c3@@YA?CVA@@XZ"
     64 
     65 const volatile A c4() { return A(); }
     66 // CHECK: "\01?c4@@YA?DVA@@XZ"
     67 
     68 const A* c5() { return 0; }
     69 // CHECK: "\01?c5@@YAPBVA@@XZ"
     70 
     71 volatile A* c6() { return 0; }
     72 // CHECK: "\01?c6@@YAPCVA@@XZ"
     73 
     74 const volatile A* c7() { return 0; }
     75 // CHECK: "\01?c7@@YAPDVA@@XZ"
     76 
     77 A &c8() { return *(A*)0; }
     78 // CHECK: "\01?c8@@YAAAVA@@XZ"
     79 
     80 const A &c9() { return *(A*)0; }
     81 // CHECK: "\01?c9@@YAABVA@@XZ"
     82 
     83 volatile A &c10() { return *(A*)0; }
     84 // CHECK: "\01?c10@@YAACVA@@XZ"
     85 
     86 const volatile A &c11() { return *(A*)0; }
     87 // CHECK: "\01?c11@@YAADVA@@XZ"
     88 
     89 template<typename T> class B {};
     90 
     91 B<int> d1() { return B<int>(); }
     92 // CHECK: "\01?d1@@YA?AV?$B@H@@XZ"
     93 
     94 B<const char*> d2() {return B<const char*>(); }
     95 // CHECK: "\01?d2@@YA?AV?$B@PBD@@XZ"
     96 
     97 B<A> d3() {return B<A>(); }
     98 // CHECK: "\01?d3@@YA?AV?$B@VA@@@@XZ"
     99 
    100 B<A>* d4() { return 0; }
    101 // CHECK: "\01?d4@@YAPAV?$B@VA@@@@XZ"
    102 
    103 const B<A>* d5() { return 0; }
    104 // CHECK: "\01?d5@@YAPBV?$B@VA@@@@XZ"
    105 
    106 volatile B<A>* d6() { return 0; }
    107 // CHECK: "\01?d6@@YAPCV?$B@VA@@@@XZ"
    108 
    109 const volatile B<A>* d7() { return 0; }
    110 // CHECK: "\01?d7@@YAPDV?$B@VA@@@@XZ"
    111 
    112 B<A>& d8() { return *(B<A>*)0; }
    113 // CHECK: "\01?d8@@YAAAV?$B@VA@@@@XZ"
    114 
    115 const B<A>& d9() { return *(B<A>*)0; }
    116 // CHECK: "\01?d9@@YAABV?$B@VA@@@@XZ"
    117 
    118 volatile B<A>& d10() { return *(B<A>*)0; }
    119 // CHECK: "\01?d10@@YAACV?$B@VA@@@@XZ"
    120 
    121 const volatile B<A>& d11() { return *(B<A>*)0; }
    122 // CHECK: "\01?d11@@YAADV?$B@VA@@@@XZ"
    123 
    124 enum Enum { DEFAULT };
    125 
    126 Enum e1() { return DEFAULT; }
    127 // CHECK: "\01?e1@@YA?AW4Enum@@XZ"
    128 
    129 const Enum e2() { return DEFAULT; }
    130 // CHECK: "\01?e2@@YA?BW4Enum@@XZ"
    131 
    132 Enum* e3() { return 0; }
    133 // CHECK: "\01?e3@@YAPAW4Enum@@XZ"
    134 
    135 Enum& e4() { return *(Enum*)0; }
    136 // CHECK: "\01?e4@@YAAAW4Enum@@XZ"
    137 
    138 struct S {};
    139 
    140 struct S f1() { struct S s; return s; }
    141 // CHECK: "\01?f1@@YA?AUS@@XZ"
    142 
    143 const struct S f2() { struct S s; return s; }
    144 // CHECK: "\01?f2@@YA?BUS@@XZ"
    145 
    146 struct S* f3() { return 0; }
    147 // CHECK: "\01?f3@@YAPAUS@@XZ"
    148 
    149 const struct S* f4() { return 0; }
    150 // CHECK: "\01?f4@@YAPBUS@@XZ"
    151 
    152 const volatile struct S* f5() { return 0; }
    153 // CHECK: "\01?f5@@YAPDUS@@XZ"
    154 
    155 struct S& f6() { return *(struct S*)0; }
    156 // CHECK: "\01?f6@@YAAAUS@@XZ"
    157 
    158 struct S* const f7() { return 0; }
    159 // CHECK: "\01?f7@@YAQAUS@@XZ"
    160 
    161 int S::* f8() { return 0; }
    162 // CHECK: "\01?f8@@YAPQS@@HXZ"
    163 
    164 int S::* const f9() { return 0; }
    165 // CHECK: "\01?f9@@YAQQS@@HXZ"
    166 
    167 int S::* __restrict f10() { return 0; }
    168 // CHECK: "\01?f10@@YAPIQS@@HXZ"
    169 
    170 int S::* const __restrict f11() { return 0; }
    171 // CHECK: "\01?f11@@YAQIQS@@HXZ"
    172 
    173 typedef int (*function_pointer)(int);
    174 
    175 function_pointer g1() { return 0; }
    176 // CHECK: "\01?g1@@YAP6AHH@ZXZ"
    177 
    178 const function_pointer g2() { return 0; }
    179 // CHECK: "\01?g2@@YAQ6AHH@ZXZ"
    180 
    181 function_pointer* g3() { return 0; }
    182 // CHECK: "\01?g3@@YAPAP6AHH@ZXZ"
    183 
    184 const function_pointer* g4() { return 0; }
    185 // CHECK: "\01?g4@@YAPBQ6AHH@ZXZ"
    186 
    187 extern int &z;
    188 int & __restrict h1() { return z; }
    189 // CHECK: "\01?h1@@YAAIAHXZ"
    190