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