1// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -std=c++11 -emit-llvm -fblocks -o - | FileCheck %s 2 3// CHECK: @"_ZZ11+[A shared]E1a" = internal global 4// CHECK: @"_ZZ11-[A(Foo) f]E1a" = internal global 5// CHECK: v56@0:8i16i20i24i28i32i36i40i44^i48 6 7@interface A 8@end 9 10@implementation A 11 12+ (A *)shared { 13 static A* a; 14 15 return a; 16} 17 18@end 19 20@interface A(Foo) 21@end 22 23@implementation A(Foo) 24- (int)f { 25 // FIXME: Add a member function to s and make sure that it's mangled correctly. 26 struct s { 27 }; 28 29 static s a; 30 31 return 0; 32} 33@end 34 35// PR6468 36@interface Test 37- (void) process: (int)r3 :(int)r4 :(int)r5 :(int)r6 :(int)r7 :(int)r8 :(int)r9 :(int)r10 :(int &)i; 38@end 39 40@implementation Test 41- (void) process: (int)r3 :(int)r4 :(int)r5 :(int)r6 :(int)r7 :(int)r8 :(int)r9 :(int)r10 :(int &)i { 42} 43@end 44 45// rdar://9566314 46@interface NX 47- (void)Meth; 48@end 49 50@implementation NX 51- (void)Meth { 52 void uiIsVisible(); 53// CHECK: call void @_Z11uiIsVisiblev 54 uiIsVisible(); 55} 56@end 57 58// rdar://13434937 59// 60// Don't crash when mangling an enum whose semantic context 61// is a class extension (which looks anonymous in the AST). 62// The other tests here are just for coverage. 63@interface Test2 @end 64@interface Test2 () 65@property (assign) enum { T2x, T2y, T2z } axis; 66@end 67@interface Test2 (a) 68@property (assign) enum { T2i, T2j, T2k } dimension; 69@end 70@implementation Test2 { 71@public 72 enum { T2a, T2b, T2c } alt_axis; 73} 74@end 75template <class T> struct Test2Template { Test2Template() {} }; // must have a member that we'll instantiate and mangle 76void test2(Test2 *t) { 77 Test2Template<decltype(t.axis)> t0; 78 Test2Template<decltype(t.dimension)> t1; 79 Test2Template<decltype(t->alt_axis)> t2; 80} 81 82@protocol P; 83void overload1(A<P>*) {} 84// CHECK-LABEL: define void @_Z9overload1PU11objcproto1P1A 85void overload1(const A<P>*) {} 86// CHECK-LABEL: define void @_Z9overload1PKU11objcproto1P1A 87void overload1(A<P>**) {} 88// CHECK-LABEL: define void @_Z9overload1PPU11objcproto1P1A 89void overload1(A<P>*const*) {} 90// CHECK-LABEL: define void @_Z9overload1PKPU11objcproto1P1A 91void overload1(A<P>***) {} 92// CHECK-LABEL: define void @_Z9overload1PPPU11objcproto1P1A 93void overload1(void (f)(A<P>*)) {} 94// CHECK-LABEL: define void @_Z9overload1PFvPU11objcproto1P1AE 95 96template<typename T> struct X { void f(); }; 97template<> void X<A*>::f() {} 98// CHECK-LABEL: define void @_ZN1XIP1AE1fEv 99template<> void X<A<P>*>::f() {} 100// CHECK-LABEL: define void @_ZN1XIPU11objcproto1P1AE1fEv 101 102// CHECK-LABEL: define void @_Z12kindof_test2PU8__kindof5Test2 103void kindof_test2(__kindof Test2 *t2) { } 104 105@interface Parameterized<T, U> : A 106@end 107 108// CHECK-LABEL: define void @_Z19parameterized_test1P13ParameterizedIP1AP4TestE 109void parameterized_test1(Parameterized<A *, Test *> *p) {} 110 111// CHECK-LABEL: define void @_Z19parameterized_test2PU8__kindof13ParameterizedIP1AP4TestE 112void parameterized_test2(__kindof Parameterized<A *, Test *> *p) {} 113 114// CHECK-LABEL: define void @_Z19parameterized_test3P13Parameterized 115void parameterized_test3(Parameterized *p) {} 116 117// CHECK-LABEL: define {{.*}}void @_Z1fP11objc_object 118void f(__attribute__((ns_consumed)) id) {} 119// CHECK-LABEL: define {{.*}}void @_Z1fPFP11objc_objectS0_S0_E 120void f(id (*fn)(__attribute__((ns_consumed)) id, id)) {} 121// CHECK-LABEL: define {{.*}}void @_Z1fU13block_pointerFvP11objc_objectE 122void f(void (^)(__attribute__((ns_consumed)) id)) {} 123