1// RUN: %clang_cc1 -triple thumbv7-windows-msvc -fdeclspec -std=c++11 -fobjc-runtime=ios-6.0 -o - -emit-llvm %s | FileCheck %s 2 3@class I; 4 5id kid; 6// CHECK: @"?kid@@3PAUobjc_object@@A" = dso_local global 7 8Class klass; 9// CHECK: @"?klass@@3PAUobjc_class@@A" = dso_local global 10 11I *kI; 12// CHECK: @"?kI@@3PAUI@@A" = dso_local global 13 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