193 lines · plain
1// RUN: %clang_cc1 -triple thumbv7-windows-msvc -fdeclspec -std=c++11 -fobjc-runtime=ios-6.0 -o - -emit-llvm %s | FileCheck %s2 3@class I;4 5id kid;6// CHECK: @"?kid@@3PAUobjc_object@@A" = dso_local global7 8Class klass;9// CHECK: @"?klass@@3PAUobjc_class@@A" = dso_local global10 11I *kI;12// CHECK: @"?kI@@3PAUI@@A" = dso_local global13 14void f(I *) {}15// CHECK-LABEL: "?f@@YAXPAUI@@@Z"16 17void f(const I *) {}18// CHECK-LABEL: "?f@@YAXPBUI@@@Z"19 20void f(I &) {}21// CHECK-LABEL: "?f@@YAXAAUI@@@Z"22 23void f(const I &) {}24// CHECK-LABEL: "?f@@YAXABUI@@@Z"25 26void f(const I &&) {}27// CHECK-LABEL: "?f@@YAX$$QBUI@@@Z"28 29void g(id) {}30// CHECK-LABEL: "?g@@YAXPAUobjc_object@@@Z"31 32void g(id &) {}33// CHECK-LABEL: "?g@@YAXAAPAUobjc_object@@@Z"34 35void g(const id &) {}36// CHECK-LABEL: "?g@@YAXABQAUobjc_object@@@Z"37 38void g(id &&) {}39// CHECK-LABEL: "?g@@YAX$$QAPAUobjc_object@@@Z"40 41void h(Class) {}42// CHECK-LABEL: "?h@@YAXPAUobjc_class@@@Z"43 44void h(Class &) {}45// CHECK-LABEL: "?h@@YAXAAPAUobjc_class@@@Z"46 47void h(const Class &) {}48// CHECK-LABEL: "?h@@YAXABQAUobjc_class@@@Z"49 50void h(Class &&) {}51// CHECK-LABEL: "?h@@YAX$$QAPAUobjc_class@@@Z"52 53I *i() { return nullptr; }54// CHECK-LABEL: "?i@@YAPAUI@@XZ"55 56const I *j() { return nullptr; }57// CHECK-LABEL: "?j@@YAPBUI@@XZ"58 59I &k() { return *kI; }60// CHECK-LABEL: "?k@@YAAAUI@@XZ"61 62const I &l() { return *kI; }63// CHECK-LABEL: "?l@@YAABUI@@XZ"64 65void m(const id) {}66// CHECK-LABEL: "?m@@YAXQAUobjc_object@@@Z"67 68void m(const I *) {}69// CHECK-LABEL: "?m@@YAXPBUI@@@Z"70 71void n(SEL) {}72// CHECK-LABEL: "?n@@YAXPAUobjc_selector@@@Z"73 74void n(SEL *) {}75// CHECK-LABEL: "?n@@YAXPAPAUobjc_selector@@@Z"76 77void n(const SEL *) {}78// CHECK-LABEL: "?n@@YAXPBQAUobjc_selector@@@Z"79 80void n(SEL &) {}81// CHECK-LABEL: "?n@@YAXAAPAUobjc_selector@@@Z"82 83void n(const SEL &) {}84// CHECK-LABEL: "?n@@YAXABQAUobjc_selector@@@Z"85 86void n(SEL &&) {}87// CHECK-LABEL: "?n@@YAX$$QAPAUobjc_selector@@@Z"88 89struct __declspec(dllexport) s {90 struct s &operator=(const struct s &) = delete;91 92 void m(I *) {}93 // CHECK-LABEL: "?m@s@@QAAXPAUI@@@Z"94 95 void m(const I *) {}96 // CHECK-LABEL: "?m@s@@QAAXPBUI@@@Z"97 98 void m(I &) {}99 // CHECK-LABEL: "?m@s@@QAAXAAUI@@@Z"100 101 void m(const I &) {}102 // CHECK-LABEL: "?m@s@@QAAXABUI@@@Z"103 104 void m(I &&) {}105 // CHECK-LABEL: "?m@s@@QAAX$$QAUI@@@Z"106 107 void m(const I &&) {}108 // CHECK-LABEL: "?m@s@@QAAX$$QBUI@@@Z"109 110 void m(id) {}111 // CHECK-LABEL: "?m@s@@QAAXPAUobjc_object@@@Z"112 113 void m(id &) {}114 // CHECK-LABEL: "?m@s@@QAAXAAPAUobjc_object@@@Z"115 116 void m(id &&) {}117 // CHECK-LABEL: "?m@s@@QAAX$$QAPAUobjc_object@@@Z"118 119 void m(const id &) {}120 // CHECK-LABEL: "?m@s@@QAAXABQAUobjc_object@@@Z"121 122 void m(const id &&) {}123 // CHECK-LABEL: "?m@s@@QAAX$$QBQAUobjc_object@@@Z"124 125 void m(Class *) {}126 // CHECK-LABEL: "?m@s@@QAAXPAPAUobjc_class@@@Z"127 128 void m(const Class *) {}129 // CHECK-LABEL: "?m@s@@QAAXPBQAUobjc_class@@@Z"130 131 void m(Class) {}132 // CHECK-LABEL: "?m@s@@QAAXPAUobjc_class@@@Z"133 134 void m(Class &) {}135 // CHECK-LABEL: "?m@s@@QAAXAAPAUobjc_class@@@Z"136 137 void m(const Class &) {}138 // CHECK-LABEL: "?m@s@@QAAXABQAUobjc_class@@@Z"139 140 void m(Class &&) {}141 // CHECK-LABEL: "?m@s@@QAAX$$QAPAUobjc_class@@@Z"142 143 void m(const Class &&) {}144 // CHECK-LABEL: "?m@s@@QAAX$$QBQAUobjc_class@@@Z"145 146 void m(SEL) {}147 // CHECK-LABEL: "?m@s@@QAAXPAUobjc_selector@@@Z"148 149 void m(SEL *) {}150 // CHECK-LABEL: "?m@s@@QAAXPAPAUobjc_selector@@@Z"151 152 void m(const SEL *) {}153 // CHECK-LABEL: "?m@s@@QAAXPBQAUobjc_selector@@@Z"154 155 void m(SEL &) {}156 // CHECK-LABEL: "?m@s@@QAAXAAPAUobjc_selector@@@Z"157 158 void m(const SEL &) {}159 // CHECK-LABEL: "?m@s@@QAAXABQAUobjc_selector@@@Z"160 161 void m(SEL &&) {}162 // CHECK-LABEL: "?m@s@@QAAX$$QAPAUobjc_selector@@@Z"163 164 void m(const SEL &&) {}165 // CHECK-LABEL: "?m@s@@QAAX$$QBQAUobjc_selector@@@Z"166};167 168template <typename T>169struct remove_pointer { typedef T type; };170 171template <typename T>172struct remove_pointer<T *> {173 typedef T type;174};175 176template <typename T>177struct t {178 t() {}179};180 181template struct t<id>;182// CHECK-LABEL: "??0?$t@PAUobjc_object@@@@QAA@XZ"183 184template struct t<remove_pointer<id>::type>;185// CHECK-LABEL: "??0?$t@Uobjc_object@@@@QAA@XZ"186 187template struct t<SEL>;188// CHECK-LABEL: "??0?$t@PAUobjc_selector@@@@QAA@XZ"189 190template struct t<remove_pointer<SEL>::type>;191// CHECK-LABEL: "??0?$t@Uobjc_selector@@@@QAA@XZ"192 193