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