1// RUN: %clang_cc1 -triple thumbv7-windows-msvc -fobjc-runtime=ios-6.0 -fobjc-arc -o - -emit-llvm %s | FileCheck %s
2
3@protocol P;
4@protocol Q;
5
6@class I;
7
8void f(id<P>, id, id<P>, id) {}
9// CHECK-LABEL: "\01?f@@YAXPAU?$objc_object@U?$Protocol@UP@@@__ObjC@@@@PAUobjc_object@@01@Z"
10
11void f(id, id<P>, id<P>, id) {}
12// CHECK-LABEL: "\01?f@@YAXPAUobjc_object@@PAU?$objc_object@U?$Protocol@UP@@@__ObjC@@@@10@Z"
13
14void f(id<P>, id<P>) {}
15// CHECK-LABEL: "\01?f@@YAXPAU?$objc_object@U?$Protocol@UP@@@__ObjC@@@@0@Z"
16
17void f(id<P>) {}
18// CHECK-LABEL: "\01?f@@YAXPAU?$objc_object@U?$Protocol@UP@@@__ObjC@@@@@Z"
19
20void f(id<P, Q>) {}
21// CHECK-LABEL: "\01?f@@YAXPAU?$objc_object@U?$Protocol@UP@@@__ObjC@@U?$Protocol@UQ@@@2@@@@Z"
22
23void f(Class<P>) {}
24// CHECK-LABEL: "\01?f@@YAXPAU?$objc_class@U?$Protocol@UP@@@__ObjC@@@@@Z"
25
26void f(Class<P, Q>) {}
27// CHECK-LABEL: "\01?f@@YAXPAU?$objc_class@U?$Protocol@UP@@@__ObjC@@U?$Protocol@UQ@@@2@@@@Z"
28
29void f(I<P> *) {}
30// CHECK-LABEL: "\01?f@@YAXPAU?$I@U?$Protocol@UP@@@__ObjC@@@@@Z"
31
32void f(I<P, Q> *) {}
33// CHECK-LABEL: "\01?f@@YAXPAU?$I@U?$Protocol@UP@@@__ObjC@@U?$Protocol@UQ@@@2@@@@Z"
34
35template <typename>
36struct S {};
37
38void f(S<__unsafe_unretained id>) {}
39// CHECK-LABEL: "\01?f@@YAXU?$S@PAUobjc_object@@@@@Z"
40
41void f(S<__autoreleasing id>) {}
42// CHECK-LABEL: "\01?f@@YAXU?$S@U?$Autoreleasing@PAUobjc_object@@@__ObjC@@@@@Z"
43
44void f(S<__strong id>) {}
45// CHECK-LABEL: "\01?f@@YAXU?$S@U?$Strong@PAUobjc_object@@@__ObjC@@@@@Z"
46
47void f(S<__weak id>) {}
48// CHECK-LABEL: "\01?f@@YAXU?$S@U?$Weak@PAUobjc_object@@@__ObjC@@@@@Z"
49
50void w(__weak id) {}
51// CHECK-LABEL: "\01?w@@YAXPAUobjc_object@@@Z"
52
53void s(__strong id) {}
54// CHECK-LABEL: "\01?s@@YAXPAUobjc_object@@@Z"
55
56void a(__autoreleasing id) {}
57// CHECK-LABEL: "\01?a@@YAXPAUobjc_object@@@Z"
58
59void u(__unsafe_unretained id) {}
60// CHECK-LABEL: "\01?u@@YAXPAUobjc_object@@@Z"
61
62S<__autoreleasing id> g() { return S<__autoreleasing id>(); }
63// CHECK-LABEL: "\01?g@@YA?AU?$S@U?$Autoreleasing@PAUobjc_object@@@__ObjC@@@@XZ"
64
65__autoreleasing id h() { return nullptr; }
66// CHECK-LABEL: "\01?h@@YAPAUobjc_object@@XZ"
67