diff options
Diffstat (limited to 'test/CodeGenObjCXX')
34 files changed, 210 insertions, 105 deletions
diff --git a/test/CodeGenObjCXX/arc-attrs.mm b/test/CodeGenObjCXX/arc-attrs.mm index 57ccb6c..0f0610f 100644 --- a/test/CodeGenObjCXX/arc-attrs.mm +++ b/test/CodeGenObjCXX/arc-attrs.mm @@ -1,10 +1,10 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -emit-llvm -fobjc-arc -O0 -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -emit-llvm -fobjc-arc -o - %s | FileCheck %s id makeObject1() __attribute__((ns_returns_retained)); id makeObject2() __attribute__((ns_returns_retained)); void releaseObject(__attribute__((ns_consumed)) id); -// CHECK: define void @_Z10sanityTestv +// CHECK-LABEL: define void @_Z10sanityTestv void sanityTest() { // CHECK: [[X:%.*]] = alloca i8*, align 8 // CHECK-NEXT: [[OBJ1:%.*]] = call i8* @_Z11makeObject1v() @@ -28,7 +28,7 @@ T makeObjectT2() __attribute__((ns_returns_retained)); template <typename T> void releaseObjectT(__attribute__((ns_consumed)) T); -// CHECK: define void @_Z12templateTestv +// CHECK-LABEL: define void @_Z12templateTestv void templateTest() { // CHECK: [[X:%.*]] = alloca i8*, align 8 // CHECK-NEXT: [[OBJ1:%.*]] = call i8* @_Z12makeObjectT1IU8__strongP11objc_objectET_v() diff --git a/test/CodeGenObjCXX/arc-blocks.mm b/test/CodeGenObjCXX/arc-blocks.mm index 810c0e0..ebb9d21 100644 --- a/test/CodeGenObjCXX/arc-blocks.mm +++ b/test/CodeGenObjCXX/arc-blocks.mm @@ -16,7 +16,7 @@ namespace test0 { void foo() { __block A v; } - // CHECK: define void @_ZN5test03fooEv() + // CHECK-LABEL: define void @_ZN5test03fooEv() // CHECK: [[V:%.*]] = alloca [[BYREF_A:%.*]], align 8 // CHECK: [[T0:%.*]] = getelementptr inbounds [[BYREF_A]]* [[V]], i32 0, i32 4 // CHECK-NEXT: store i8* bitcast (void (i8*, i8*)* [[COPY_HELPER:@.*]] to i8*), i8** [[T0]] diff --git a/test/CodeGenObjCXX/arc-exceptions.mm b/test/CodeGenObjCXX/arc-exceptions.mm index b5ed257..0bb11d5 100644 --- a/test/CodeGenObjCXX/arc-exceptions.mm +++ b/test/CodeGenObjCXX/arc-exceptions.mm @@ -11,7 +11,7 @@ void test0(void) { } @catch (Ety *e) { } } -// CHECK: define void @_Z5test0v() +// CHECK-LABEL: define void @_Z5test0v() // CHECK: [[E:%.*]] = alloca [[ETY:%.*]]*, align 8 // CHECK-NEXT: invoke void @_Z12test0_helperv() // CHECK: [[T0:%.*]] = call i8* @objc_begin_catch( @@ -31,7 +31,7 @@ void test1(void) { } @catch (__weak Ety *e) { } } -// CHECK: define void @_Z5test1v() +// CHECK-LABEL: define void @_Z5test1v() // CHECK: [[E:%.*]] = alloca [[ETY:%.*]]*, align 8 // CHECK-NEXT: invoke void @_Z12test1_helperv() // CHECK: [[T0:%.*]] = call i8* @objc_begin_catch( @@ -50,7 +50,7 @@ void test2(void) { } catch (Ety *e) { } } -// CHECK: define void @_Z5test2v() +// CHECK-LABEL: define void @_Z5test2v() // CHECK: [[E:%.*]] = alloca [[ETY:%.*]]*, align 8 // CHECK-NEXT: invoke void @_Z12test2_helperv() // CHECK: [[T0:%.*]] = call i8* @__cxa_begin_catch( @@ -70,7 +70,7 @@ void test3(void) { } catch (Ety * __weak e) { } } -// CHECK: define void @_Z5test3v() +// CHECK-LABEL: define void @_Z5test3v() // CHECK: [[E:%.*]] = alloca [[ETY:%.*]]*, align 8 // CHECK-NEXT: invoke void @_Z12test3_helperv() // CHECK: [[T0:%.*]] = call i8* @__cxa_begin_catch( @@ -93,7 +93,7 @@ namespace test4 { A::A() { throw 0; } - // CHECK: define void @_ZN5test41AC2Ev( + // CHECK-LABEL: define void @_ZN5test41AC2Ev( // CHECK: [[THIS:%.*]] = load [[A:%.*]]** {{%.*}} // Construct single. // CHECK-NEXT: [[SINGLE:%.*]] = getelementptr inbounds [[A]]* [[THIS]], i32 0, i32 0 diff --git a/test/CodeGenObjCXX/arc-globals.mm b/test/CodeGenObjCXX/arc-globals.mm index 958d1d8..84ea180 100644 --- a/test/CodeGenObjCXX/arc-globals.mm +++ b/test/CodeGenObjCXX/arc-globals.mm @@ -5,21 +5,21 @@ // autorelease pool. id getObject(); -// CHECK: define internal void @__cxx_global_var_init +// CHECK-LABEL: define internal void @__cxx_global_var_init // CHECK: call i8* @_Z9getObjectv // CHECK-NEXT: call i8* @objc_retainAutoreleasedReturnValue // CHECK-NEXT: {{store i8*.*@global_obj}} // CHECK-NEXT: ret void id global_obj = getObject(); -// CHECK: define internal void @__cxx_global_var_init +// CHECK-LABEL: define internal void @__cxx_global_var_init // CHECK: call i8* @_Z9getObjectv // CHECK-NEXT: call i8* @objc_retainAutoreleasedReturnValue // CHECK-NEXT: {{store i8*.*@global_obj2}} // CHECK-NEXT: ret void id global_obj2 = getObject(); -// CHECK: define internal void @_GLOBAL__I_a +// CHECK-LABEL: define internal void @_GLOBAL__I_a // CHECK: call i8* @objc_autoreleasePoolPush() // CHECK-NEXT: call void @__cxx_global_var_init // CHECK-NEXT: call void @__cxx_global_var_init1 diff --git a/test/CodeGenObjCXX/arc-mangle.mm b/test/CodeGenObjCXX/arc-mangle.mm index c2b5817..10c4f68 100644 --- a/test/CodeGenObjCXX/arc-mangle.mm +++ b/test/CodeGenObjCXX/arc-mangle.mm @@ -1,25 +1,25 @@ // RUN: %clang_cc1 -fobjc-arc -fobjc-runtime-has-weak -emit-llvm -o - %s | FileCheck %s -// CHECK: define void @_Z1fPU8__strongP11objc_object(i8**) +// CHECK-LABEL: define void @_Z1fPU8__strongP11objc_object(i8**) void f(__strong id *) {} -// CHECK: define void @_Z1fPU6__weakP11objc_object(i8**) +// CHECK-LABEL: define void @_Z1fPU6__weakP11objc_object(i8**) void f(__weak id *) {} -// CHECK: define void @_Z1fPU15__autoreleasingP11objc_object(i8**) +// CHECK-LABEL: define void @_Z1fPU15__autoreleasingP11objc_object(i8**) void f(__autoreleasing id *) {} -// CHECK: define void @_Z1fPP11objc_object(i8**) +// CHECK-LABEL: define void @_Z1fPP11objc_object(i8**) void f(__unsafe_unretained id *) {} -// CHECK: define void @_Z1fPKU8__strongP11objc_object(i8**) +// CHECK-LABEL: define void @_Z1fPKU8__strongP11objc_object(i8**) void f(const __strong id *) {} -// CHECK: define void @_Z1fPKU6__weakP11objc_object(i8**) +// CHECK-LABEL: define void @_Z1fPKU6__weakP11objc_object(i8**) void f(const __weak id *) {} -// CHECK: define void @_Z1fPKU15__autoreleasingP11objc_object(i8**) +// CHECK-LABEL: define void @_Z1fPKU15__autoreleasingP11objc_object(i8**) void f(const __autoreleasing id *) {} -// CHECK: define void @_Z1fPKP11objc_object(i8**) +// CHECK-LABEL: define void @_Z1fPKP11objc_object(i8**) void f(const __unsafe_unretained id *) {} template<unsigned N> struct unsigned_c { }; -// CHECK: define weak_odr void @_Z1gIKvEvP10unsigned_cIXplszv1U8__bridgecvPT_v1U8__bridgecvP11objc_objectcvS3_Li0ELi1EEE +// CHECK-LABEL: define weak_odr void @_Z1gIKvEvP10unsigned_cIXplszv1U8__bridgecvPT_v1U8__bridgecvP11objc_objectcvS3_Li0ELi1EEE template<typename T>void g(unsigned_c<sizeof((__bridge T*)(__bridge id)(T*)0) + 1>*) {} template void g<const void>(unsigned_c<sizeof(id) + 1> *); diff --git a/test/CodeGenObjCXX/arc-move.mm b/test/CodeGenObjCXX/arc-move.mm index cf3051d..0a8286d 100644 --- a/test/CodeGenObjCXX/arc-move.mm +++ b/test/CodeGenObjCXX/arc-move.mm @@ -31,7 +31,7 @@ typename remove_reference<T>::type&& move(T &&x) { return static_cast<typename remove_reference<T>::type&&>(x); } -// CHECK: define void @_Z12library_moveRU8__strongP11objc_objectS2_ +// CHECK-LABEL: define void @_Z12library_moveRU8__strongP11objc_objectS2_ void library_move(__strong id &x, __strong id &y) { // CHECK: call i8** @_Z4moveIRU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_ // CHECK: load i8** @@ -44,7 +44,7 @@ void library_move(__strong id &x, __strong id &y) { x = move(y); } -// CHECK: define void @_Z12library_moveRU8__strongP11objc_object +// CHECK-LABEL: define void @_Z12library_moveRU8__strongP11objc_object void library_move(__strong id &y) { // CHECK: [[Y:%[a-zA-Z0-9]+]] = call i8** @_Z4moveIRU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_ // Load the object @@ -62,7 +62,7 @@ void library_move(__strong id &y) { // CHECK-NEXT: ret void } -// CHECK: define void @_Z10const_moveRKU8__strongP11objc_object( +// CHECK-LABEL: define void @_Z10const_moveRKU8__strongP11objc_object( void const_move(const __strong id &x) { // CHECK: [[Y:%.*]] = alloca i8*, // CHECK: [[X:%.*]] = call i8** @_Z4moveIRKU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_( diff --git a/test/CodeGenObjCXX/arc-new-delete.mm b/test/CodeGenObjCXX/arc-new-delete.mm index c061e5d..9d42b03 100644 --- a/test/CodeGenObjCXX/arc-new-delete.mm +++ b/test/CodeGenObjCXX/arc-new-delete.mm @@ -3,7 +3,7 @@ typedef __strong id strong_id; typedef __weak id weak_id; -// CHECK: define void @_Z8test_newP11objc_object +// CHECK-LABEL: define void @_Z8test_newP11objc_object void test_new(id invalue) { // CHECK: [[INVALUEADDR:%.*]] = alloca i8* // CHECK-NEXT: store i8* null, i8** [[INVALUEADDR]] @@ -40,7 +40,7 @@ void test_new(id invalue) { // CHECK: ret void } -// CHECK: define void @_Z14test_array_new +// CHECK-LABEL: define void @_Z14test_array_new void test_array_new() { // CHECK: call noalias i8* @_Znam // CHECK: store i64 17, i64* @@ -54,7 +54,7 @@ void test_array_new() { // CHECK: ret void } -// CHECK: define void @_Z11test_deletePU8__strongP11objc_objectPU6__weakS0_ +// CHECK-LABEL: define void @_Z11test_deletePU8__strongP11objc_objectPU6__weakS0_ void test_delete(__strong id *sptr, __weak id *wptr) { // CHECK: br i1 // CHECK: load i8** @@ -69,7 +69,7 @@ void test_delete(__strong id *sptr, __weak id *wptr) { // CHECK: ret void } -// CHECK: define void @_Z17test_array_deletePU8__strongP11objc_objectPU6__weakS0_ +// CHECK-LABEL: define void @_Z17test_array_deletePU8__strongP11objc_objectPU6__weakS0_ void test_array_delete(__strong id *sptr, __weak id *wptr) { // CHECK: icmp eq i8** [[BEGIN:%.*]], null // CHECK: [[LEN:%.*]] = load i64* {{%.*}} diff --git a/test/CodeGenObjCXX/arc-pseudo-destructors.mm b/test/CodeGenObjCXX/arc-pseudo-destructors.mm index 2f8d9e1..0a69487 100644 --- a/test/CodeGenObjCXX/arc-pseudo-destructors.mm +++ b/test/CodeGenObjCXX/arc-pseudo-destructors.mm @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -fobjc-arc -fobjc-runtime-has-weak -fblocks -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s | FileCheck %s -// CHECK: define void @_Z28test_objc_object_pseudo_dtorPU8__strongP11objc_objectPU6__weakS0_ +// CHECK-LABEL: define void @_Z28test_objc_object_pseudo_dtorPU8__strongP11objc_objectPU6__weakS0_ void test_objc_object_pseudo_dtor(__strong id *ptr, __weak id *wptr) { // CHECK: load i8*** // CHECK-NEXT: load i8** diff --git a/test/CodeGenObjCXX/arc-references.mm b/test/CodeGenObjCXX/arc-references.mm index 1210774..10e7f64 100644 --- a/test/CodeGenObjCXX/arc-references.mm +++ b/test/CodeGenObjCXX/arc-references.mm @@ -7,7 +7,7 @@ id getObject(); void callee(); // Lifetime extension for binding a reference to an rvalue -// CHECK: define void @_Z5test0v() +// CHECK-LABEL: define void @_Z5test0v() void test0() { // CHECK: call i8* @_Z9getObjectv // CHECK-NEXT: call i8* @objc_retainAutoreleasedReturnValue @@ -25,7 +25,7 @@ void test0() { } // No lifetime extension when we're binding a reference to an lvalue. -// CHECK: define void @_Z5test1RU8__strongP11objc_objectRU6__weakS0_ +// CHECK-LABEL: define void @_Z5test1RU8__strongP11objc_objectRU6__weakS0_ void test1(__strong id &x, __weak id &y) { // CHECK-NOT: release const __strong id &ref1 = x; @@ -47,7 +47,7 @@ void test3() { // CHECK-NEXT: ret void } -// CHECK: define void @_Z5test4RU8__strongP11objc_object +// CHECK-LABEL: define void @_Z5test4RU8__strongP11objc_object void test4(__strong id &x) { // CHECK: call i8* @objc_retain __strong A* const &ar = x; @@ -59,7 +59,7 @@ void test4(__strong id &x) { void sink(__strong A* &&); -// CHECK: define void @_Z5test5RU8__strongP11objc_object +// CHECK-LABEL: define void @_Z5test5RU8__strongP11objc_object void test5(__strong id &x) { // CHECK: [[REFTMP:%.*]] = alloca {{%.*}}*, align 8 // CHECK: [[OBJ_ID:%.*]] = call i8* @objc_retain( @@ -75,7 +75,7 @@ void test5(__strong id &x) { // CHECK-NEXT: ret void } -// CHECK: define internal void @__cxx_global_var_init( +// CHECK-LABEL: define internal void @__cxx_global_var_init( // CHECK: call i8* @_Z9getObjectv // CHECK-NEXT: call i8* @objc_retainAutoreleasedReturnValue const __strong id &global_ref = getObject(); diff --git a/test/CodeGenObjCXX/arc-special-member-functions.mm b/test/CodeGenObjCXX/arc-special-member-functions.mm index 0b34538..49077ff 100644 --- a/test/CodeGenObjCXX/arc-special-member-functions.mm +++ b/test/CodeGenObjCXX/arc-special-member-functions.mm @@ -12,14 +12,14 @@ struct ObjCBlockMember { int (^bp)(int); }; -// CHECK: define void @_Z42test_ObjCMember_default_construct_destructv( +// CHECK-LABEL: define void @_Z42test_ObjCMember_default_construct_destructv( void test_ObjCMember_default_construct_destruct() { // CHECK: call void @_ZN10ObjCMemberC1Ev // CHECK: call void @_ZN10ObjCMemberD1Ev ObjCMember m1; } -// CHECK: define void @_Z39test_ObjCMember_copy_construct_destruct10ObjCMember +// CHECK-LABEL: define void @_Z39test_ObjCMember_copy_construct_destruct10ObjCMember void test_ObjCMember_copy_construct_destruct(ObjCMember m1) { // CHECK: call void @_ZN10ObjCMemberC1ERKS_ // CHECK: call void @_ZN10ObjCMemberD1Ev @@ -27,7 +27,7 @@ void test_ObjCMember_copy_construct_destruct(ObjCMember m1) { // CHECK: ret void } -// CHECK: define void @_Z27test_ObjCMember_copy_assign10ObjCMemberS_ +// CHECK-LABEL: define void @_Z27test_ObjCMember_copy_assign10ObjCMemberS_ void test_ObjCMember_copy_assign(ObjCMember m1, ObjCMember m2) { // CHECK: {{call.*_ZN10ObjCMemberaSERKS_}} m1 = m2; @@ -39,7 +39,7 @@ void test_ObjCMember_copy_assign(ObjCMember m1, ObjCMember m2) { // CHECK: call void @objc_storeStrong // CHECK: ret -// CHECK: define void @_Z47test_ObjCArrayMember_default_construct_destructv +// CHECK-LABEL: define void @_Z47test_ObjCArrayMember_default_construct_destructv void test_ObjCArrayMember_default_construct_destruct() { // CHECK: call void @_ZN15ObjCArrayMemberC1Ev ObjCArrayMember m1; @@ -47,7 +47,7 @@ void test_ObjCArrayMember_default_construct_destruct() { // CHECK: ret void } -// CHECK: define void @_Z44test_ObjCArrayMember_copy_construct_destruct15ObjCArrayMember +// CHECK-LABEL: define void @_Z44test_ObjCArrayMember_copy_construct_destruct15ObjCArrayMember void test_ObjCArrayMember_copy_construct_destruct(ObjCArrayMember m1) { // CHECK: call void @_ZN15ObjCArrayMemberC1ERKS_ ObjCArrayMember m2 = m1; @@ -67,7 +67,7 @@ void test_ObjCArrayMember_copy_assign(ObjCArrayMember m1, ObjCArrayMember m2) { // CHECK-NEXT: br label // CHECK: ret -// CHECK: define void @_Z47test_ObjCBlockMember_default_construct_destructv +// CHECK-LABEL: define void @_Z47test_ObjCBlockMember_default_construct_destructv void test_ObjCBlockMember_default_construct_destruct() { // CHECK: call void @_ZN15ObjCBlockMemberC1Ev ObjCBlockMember m; @@ -75,7 +75,7 @@ void test_ObjCBlockMember_default_construct_destruct() { // CHECK-NEXT: ret void } -// CHECK: define void @_Z44test_ObjCBlockMember_copy_construct_destruct15ObjCBlockMember +// CHECK-LABEL: define void @_Z44test_ObjCBlockMember_copy_construct_destruct15ObjCBlockMember void test_ObjCBlockMember_copy_construct_destruct(ObjCBlockMember m1) { // CHECK: call void @_ZN15ObjCBlockMemberC1ERKS_ ObjCBlockMember m2 = m1; @@ -83,7 +83,7 @@ void test_ObjCBlockMember_copy_construct_destruct(ObjCBlockMember m1) { // CHECK-NEXT: ret void } -// CHECK: define void @_Z32test_ObjCBlockMember_copy_assign15ObjCBlockMemberS_ +// CHECK-LABEL: define void @_Z32test_ObjCBlockMember_copy_assign15ObjCBlockMemberS_ void test_ObjCBlockMember_copy_assign(ObjCBlockMember m1, ObjCBlockMember m2) { // CHECK: {{call.*_ZN15ObjCBlockMemberaSERKS_}} m1 = m2; @@ -105,22 +105,22 @@ void test_ObjCBlockMember_copy_assign(ObjCBlockMember m1, ObjCBlockMember m2) { // CHECK-NEXT: ret // Implicitly-generated copy constructor for ObjCBlockMember -// CHECK: define linkonce_odr void @_ZN15ObjCBlockMemberC2ERKS_ +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCBlockMemberC2ERKS_ // CHECK: call i8* @objc_retainBlock // CHECK: ret // Implicitly-generated destructor for ObjCBlockMember -// CHECK: define linkonce_odr void @_ZN15ObjCBlockMemberD2Ev +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCBlockMemberD2Ev // CHECK: call void @objc_storeStrong(i8* // CHECK: ret // Implicitly-generated default constructor for ObjCBlockMember -// CHECK: define linkonce_odr void @_ZN15ObjCBlockMemberC2Ev +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCBlockMemberC2Ev // CHECK: store {{.*}} null, // CHECK-NEXT: ret void // Implicitly-generated copy constructor for ObjCArrayMember -// CHECK: define linkonce_odr void @_ZN15ObjCArrayMemberC2ERKS_ +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCArrayMemberC2ERKS_ // CHECK: br i1 // CHECK: call i8* @objc_retain // CHECK-NEXT: store i8* @@ -128,7 +128,7 @@ void test_ObjCBlockMember_copy_assign(ObjCBlockMember m1, ObjCBlockMember m2) { // CHECK: ret // Implicitly-generated destructor for ObjCArrayMember -// CHECK: define linkonce_odr void @_ZN15ObjCArrayMemberD2Ev +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCArrayMemberD2Ev // CHECK: [[BEGIN:%.*]] = getelementptr inbounds [2 x [3 x i8*]]* // CHECK-NEXT: [[END:%.*]] = getelementptr inbounds i8** [[BEGIN]], i64 6 // CHECK-NEXT: br label @@ -140,24 +140,24 @@ void test_ObjCBlockMember_copy_assign(ObjCBlockMember m1, ObjCBlockMember m2) { // CHECK: ret void // Implicitly-generated default constructor for ObjCArrayMember -// CHECK: define linkonce_odr void @_ZN15ObjCArrayMemberC2Ev +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCArrayMemberC2Ev // CHECK: call void @llvm.memset.p0i8.i64 // CHECK: ret // Implicitly-generated copy constructor for ObjCMember -// CHECK: define linkonce_odr void @_ZN10ObjCMemberC2ERKS_ +// CHECK-LABEL: define linkonce_odr void @_ZN10ObjCMemberC2ERKS_ // CHECK-NOT: objc_release // CHECK: call i8* @objc_retain // CHECK-NEXT: store i8* // CHECK-NEXT: ret void // Implicitly-generated destructor for ObjCMember -// CHECK: define linkonce_odr void @_ZN10ObjCMemberD2Ev +// CHECK-LABEL: define linkonce_odr void @_ZN10ObjCMemberD2Ev // CHECK: call void @objc_storeStrong // CHECK: ret void // Implicitly-generated default constructor for ObjCMember -// CHECK: define linkonce_odr void @_ZN10ObjCMemberC2Ev +// CHECK-LABEL: define linkonce_odr void @_ZN10ObjCMemberC2Ev // CHECK-NOT: objc_release // CHECK: store i8* null // CHECK-NEXT: ret void diff --git a/test/CodeGenObjCXX/arc.mm b/test/CodeGenObjCXX/arc.mm index e3e86a0..e31b094 100644 --- a/test/CodeGenObjCXX/arc.mm +++ b/test/CodeGenObjCXX/arc.mm @@ -55,7 +55,7 @@ void test34(int cond) { test34_sink(cond ? &strong : 0); test34_sink(cond ? &weak : 0); - // CHECK: define void @_Z6test34i( + // CHECK-LABEL: define void @_Z6test34i( // CHECK: [[COND:%.*]] = alloca i32 // CHECK-NEXT: [[STRONG:%.*]] = alloca i8* // CHECK-NEXT: [[WEAK:%.*]] = alloca i8* @@ -118,7 +118,7 @@ struct Test35_Helper { id makeObject4(); }; -// CHECK: define void @_Z6test3513Test35_HelperPS_ +// CHECK-LABEL: define void @_Z6test3513Test35_HelperPS_ void test35(Test35_Helper x0, Test35_Helper *x0p) { // CHECK: call i8* @_ZN13Test35_Helper11makeObject1Ev // CHECK-NOT: call i8* @objc_retain @@ -146,7 +146,7 @@ void test35(Test35_Helper x0, Test35_Helper *x0p) { // CHECK-NEXT: ret void } -// CHECK: define void @_Z7test35b13Test35_HelperPS_ +// CHECK-LABEL: define void @_Z7test35b13Test35_HelperPS_ void test35b(Test35_Helper x0, Test35_Helper *x0p) { // CHECK: call i8* @_ZN13Test35_Helper11makeObject3Ev // CHECK: call i8* @objc_retain @@ -174,7 +174,7 @@ void test35b(Test35_Helper x0, Test35_Helper *x0p) { } // rdar://problem/9603128 -// CHECK: define i8* @_Z6test36P11objc_object( +// CHECK-LABEL: define i8* @_Z6test36P11objc_object( id test36(id z) { // CHECK: objc_retain // CHECK: objc_retain @@ -196,7 +196,7 @@ template <class T> void test37(T *a) { } extern template void test37<Test37>(Test37 *a); template void test37<Test37>(Test37 *a); -// CHECK: define weak_odr void @_Z6test37I6Test37EvPT_( +// CHECK-LABEL: define weak_odr void @_Z6test37I6Test37EvPT_( // CHECK: [[T0:%.*]] = call [[NSARRAY]]* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to [[NSARRAY]]* (i8*, i8*)*)( // CHECK-NEXT: [[T1:%.*]] = bitcast [[NSARRAY]]* [[T0]] to i8* // CHECK-NEXT: [[T2:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T1]]) @@ -224,7 +224,7 @@ void send_release() { [Test37 array]; } -// CHECK: define weak_odr void @_Z12send_releaseIiEvv( +// CHECK-LABEL: define weak_odr void @_Z12send_releaseIiEvv( // CHECK: call %0* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend // CHECK-NEXT: bitcast // CHECK-NEXT: call i8* @objc_retainAutoreleasedReturnValue @@ -240,7 +240,7 @@ Test37 *instantiate_init() { return result; } -// CHECK: define weak_odr %2* @_Z16instantiate_initIiEP6Test37v +// CHECK-LABEL: define weak_odr %2* @_Z16instantiate_initIiEP6Test37v // CHECK: call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend // CHECK: call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend // CHECK: call i8* @objc_retain @@ -257,7 +257,7 @@ template <class T> class Test38 { ^{ (void) x; }, ({ x; }); } }; -// CHECK: define weak_odr void @_ZN6Test38IiE4testEi( +// CHECK-LABEL: define weak_odr void @_ZN6Test38IiE4testEi( template class Test38<int>; // rdar://problem/11964832 @@ -272,7 +272,7 @@ class Test39 : Test39_base1, Test39_base2 { // base2 is at non-zero offset }; id Test39::bar() { return 0; } // Note lack of autorelease. -// CHECK: define i8* @_ZThn8_N6Test393barEv( +// CHECK-LABEL: define i8* @_ZThn8_N6Test393barEv( // CHECK: call i8* @_ZN6Test393barEv( // CHECK-NEXT: ret i8* @@ -287,7 +287,7 @@ template <class T> void test40_helper() { [Test40 foo: &x]; }; template void test40_helper<int>(); -// CHECK: define weak_odr void @_Z13test40_helperIiEvv() +// CHECK-LABEL: define weak_odr void @_Z13test40_helperIiEvv() // CHECK: [[X:%.*]] = alloca i8* // CHECK-NEXT: [[TEMP:%.*]] = alloca i8* // CHECK-NEXT: store i8* null, i8** [[X]] diff --git a/test/CodeGenObjCXX/block-var-layout.mm b/test/CodeGenObjCXX/block-var-layout.mm index 08dbc02..793d4b9 100644 --- a/test/CodeGenObjCXX/block-var-layout.mm +++ b/test/CodeGenObjCXX/block-var-layout.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fblocks -fobjc-gc -triple x86_64-apple-darwin -fobjc-runtime=macosx-fragile-10.5 -O0 -print-ivar-layout -emit-llvm -o /dev/null %s > %t-64.layout +// RUN: %clang_cc1 -x objective-c++ -fblocks -fobjc-gc -triple x86_64-apple-darwin -fobjc-runtime=macosx-fragile-10.5 -print-ivar-layout -emit-llvm -o /dev/null %s > %t-64.layout // RUN: FileCheck --input-file=%t-64.layout %s // rdar://12184410 // rdar://12752901 diff --git a/test/CodeGenObjCXX/catch-id-type.mm b/test/CodeGenObjCXX/catch-id-type.mm index 2d6cccc..0a2b940 100644 --- a/test/CodeGenObjCXX/catch-id-type.mm +++ b/test/CodeGenObjCXX/catch-id-type.mm @@ -31,7 +31,7 @@ id FUNC() { catch( id error ) { // CHECK: landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) - // CHECK-NEXT: catch i8* bitcast ({ i8*, i8*, i32, i8* }* @_ZTIP4INTF to i8*) + // CHECK-NEXT: catch i8* bitcast ({ i8*, i8*, i32, i8* }* @_ZTIPU11objcproto1P4INTF to i8*) // CHECK-NEXT: catch i8* bitcast ({ i8*, i8*, i32, i8* }* @_ZTIP11objc_object to i8*) // CHECK-NEXT: catch i8* bitcast ({ i8*, i8*, i32, i8* }* @_ZTIP10objc_class to i8*) error = error; diff --git a/test/CodeGenObjCXX/encode.mm b/test/CodeGenObjCXX/encode.mm index 1b6a241..075d790 100644 --- a/test/CodeGenObjCXX/encode.mm +++ b/test/CodeGenObjCXX/encode.mm @@ -201,3 +201,26 @@ struct Y : Empty { // CHECK: @g8 = constant [14 x i8] c"{Y={X=[10i]}}\00" extern const char g8[] = @encode(Y); + + +class dynamic_class { +public: + virtual ~dynamic_class(); +}; +@interface has_dynamic_class_ivar +@end +@implementation has_dynamic_class_ivar { + dynamic_class dynamic_class_ivar; +} +@end +// CHECK: internal global [41 x i8] c"{dynamic_class=\22_vptr$dynamic_class\22^^?}\00" + +namespace PR17142 { + struct A { virtual ~A(); }; + struct B : virtual A { int y; }; + struct C { virtual ~C(); int z; }; + struct D : C, B { int a; }; + struct E : D {}; + // CHECK: @_ZN7PR171421xE = constant [14 x i8] c"{E=^^?i^^?ii}\00" + extern const char x[] = @encode(E); +} diff --git a/test/CodeGenObjCXX/exceptions-legacy.mm b/test/CodeGenObjCXX/exceptions-legacy.mm index a31ba36..5de90bb 100644 --- a/test/CodeGenObjCXX/exceptions-legacy.mm +++ b/test/CodeGenObjCXX/exceptions-legacy.mm @@ -12,7 +12,7 @@ void test0(id obj) { foo(); } } -// CHECK: define void @_Z5test0P11objc_object( +// CHECK-LABEL: define void @_Z5test0P11objc_object( // Enter the @synchronized block. // CHECK: call i32 @objc_sync_enter(i8* [[OBJ:%.*]]) // CHECK: call void @objc_exception_try_enter([[BUF_T:%.*]]* [[BUF:%.*]]) @@ -52,7 +52,7 @@ void test1(id obj, bool *failed) { *failed = true; } } -// CHECK: define void @_Z5test1P11objc_objectPb( +// CHECK-LABEL: define void @_Z5test1P11objc_objectPb( // Enter the @try block. // CHECK: call void @objc_exception_try_enter([[BUF_T]]* [[BUF:%.*]]) // CHECK-NEXT: [[T0:%.*]] = getelementptr [[BUF_T]]* [[BUF]], i32 0, i32 0, i32 0 diff --git a/test/CodeGenObjCXX/exceptions.mm b/test/CodeGenObjCXX/exceptions.mm index 031c222..a62a82b 100644 --- a/test/CodeGenObjCXX/exceptions.mm +++ b/test/CodeGenObjCXX/exceptions.mm @@ -5,7 +5,7 @@ void opaque(); namespace test0 { - // CHECK: define void @_ZN5test03fooEv + // CHECK-LABEL: define void @_ZN5test03fooEv void foo() { try { // CHECK: invoke void @_Z6opaquev diff --git a/test/CodeGenObjCXX/gc.mm b/test/CodeGenObjCXX/gc.mm index a504892..1659dbf 100644 --- a/test/CodeGenObjCXX/gc.mm +++ b/test/CodeGenObjCXX/gc.mm @@ -9,7 +9,7 @@ namespace test0 { }; A::A() : x(test0::x) {} -// CHECK: define void @_ZN5test01AC2Ev( +// CHECK-LABEL: define void @_ZN5test01AC2Ev( // CHECK: [[THIS:%.*]] = alloca [[TEST0:%.*]]*, align 8 // CHECK-NEXT: store // CHECK-NEXT: [[T0:%.*]] = load [[TEST0]]** [[THIS]] diff --git a/test/CodeGenObjCXX/implicit-copy-assign-operator.mm b/test/CodeGenObjCXX/implicit-copy-assign-operator.mm index a5ce789..88837c1 100644 --- a/test/CodeGenObjCXX/implicit-copy-assign-operator.mm +++ b/test/CodeGenObjCXX/implicit-copy-assign-operator.mm @@ -43,7 +43,7 @@ void test_D(D d1, D d2) { d1 = d2; } -// CHECK-OBJ: define linkonce_odr %struct.D* @_ZN1DaSERS_ +// CHECK-OBJ-LABEL: define linkonce_odr %struct.D* @_ZN1DaSERS_ // CHECK-OBJ: {{call.*_ZN1AaSERS_}} // CHECK-OBJ: {{call.*_ZN1BaSERS_}} // CHECK-OBJ: {{call.*_ZN1CaSERKS_}} diff --git a/test/CodeGenObjCXX/implicit-copy-constructor.mm b/test/CodeGenObjCXX/implicit-copy-constructor.mm index 5cd6f42..6dbd39e 100644 --- a/test/CodeGenObjCXX/implicit-copy-constructor.mm +++ b/test/CodeGenObjCXX/implicit-copy-constructor.mm @@ -41,7 +41,7 @@ void f(D d) { D d2(d); } -// CHECK: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* %this, %struct.D*) unnamed_addr +// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* %this, %struct.D*) unnamed_addr // CHECK: call void @_ZN1AC1Ev // CHECK: call void @_ZN1CC2ERS_1A // CHECK: call void @_ZN1AD1Ev diff --git a/test/CodeGenObjCXX/lambda-expressions.mm b/test/CodeGenObjCXX/lambda-expressions.mm index c73e172..2468eb1 100644 --- a/test/CodeGenObjCXX/lambda-expressions.mm +++ b/test/CodeGenObjCXX/lambda-expressions.mm @@ -6,16 +6,16 @@ fp f() { auto x = []{ return 3; }; return x; } // MRC: @"\01L_OBJC_METH_VAR_NAME{{.*}}" = internal global [5 x i8] c"copy\00" // MRC: @"\01L_OBJC_METH_VAR_NAME{{.*}}" = internal global [12 x i8] c"autorelease\00" -// MRC: define i32 ()* @_Z1fv( -// MRC: define internal i32 ()* @"_ZZ1fvENK3$_0cvU13block_pointerFivEEv" +// MRC-LABEL: define i32 ()* @_Z1fv( +// MRC-LABEL: define internal i32 ()* @"_ZZ1fvENK3$_0cvU13block_pointerFivEEv" // MRC: store i8* bitcast (i8** @_NSConcreteStackBlock to i8*) // MRC: store i8* bitcast (i32 (i8*)* @"___ZZ1fvENK3$_0cvU13block_pointerFivEEv_block_invoke" to i8*) // MRC: call i32 ()* (i8*, i8*)* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i32 ()* (i8*, i8*)*) // MRC: call i32 ()* (i8*, i8*)* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i32 ()* (i8*, i8*)*) // MRC: ret i32 ()* -// ARC: define i32 ()* @_Z1fv( -// ARC: define internal i32 ()* @"_ZZ1fvENK3$_0cvU13block_pointerFivEEv" +// ARC-LABEL: define i32 ()* @_Z1fv( +// ARC-LABEL: define internal i32 ()* @"_ZZ1fvENK3$_0cvU13block_pointerFivEEv" // ARC: store i8* bitcast (i8** @_NSConcreteStackBlock to i8*) // ARC: store i8* bitcast (i32 (i8*)* @"___ZZ1fvENK3$_0cvU13block_pointerFivEEv_block_invoke" to i8*) // ARC: call i8* @objc_retainBlock @@ -35,7 +35,7 @@ void f2() { global = []{ return 3; }; } // ARC: store i8* bitcast (i32 (i8*)* @___Z2f2v_block_invoke to i8*), // ARC: call i8* @objc_retainBlock // ARC: call void @objc_release -// ARC: define internal i32 @___Z2f2v_block_invoke +// ARC-LABEL: define internal i32 @___Z2f2v_block_invoke // ARC: call i32 @"_ZZ2f2vENK3$_1clEv template <class T> void take_lambda(T &&lambda) { lambda(); } @@ -60,6 +60,33 @@ void take_block(void (^block)()) { block(); } } @end -// ARC: attributes [[NUW]] = { nounwind{{.*}} } +// Check lines for BlockInLambda test below +// ARC-LABEL: define internal i32 @___ZZN13BlockInLambda1X1fEvENKUlvE_clEv_block_invoke +// ARC: [[Y:%.*]] = getelementptr inbounds %"struct.BlockInLambda::X"* {{.*}}, i32 0, i32 1 +// ARC-NEXT: [[YVAL:%.*]] = load i32* [[Y]], align 4 +// ARC-NEXT: ret i32 [[YVAL]] + +typedef int (^fptr)(); +template<typename T> struct StaticMembers { + static fptr f; +}; +template<typename T> +fptr StaticMembers<T>::f = [] { auto f = []{return 5;}; return fptr(f); }(); +template fptr StaticMembers<float>::f; +// ARC-LABEL: define linkonce_odr i32 ()* @_ZZNK13StaticMembersIfE1fMUlvE_clEvENKUlvE_cvU13block_pointerFivEEv + +namespace BlockInLambda { + struct X { + int x,y; + void f() { + [this]{return ^{return y;}();}(); + }; + }; + void g(X& x) { + x.f(); + }; +} + +// ARC: attributes [[NUW]] = { nounwind{{.*}} } // MRC: attributes [[NUW]] = { nounwind{{.*}} } diff --git a/test/CodeGenObjCXX/literals.mm b/test/CodeGenObjCXX/literals.mm index b8946fa..f21bba7 100644 --- a/test/CodeGenObjCXX/literals.mm +++ b/test/CodeGenObjCXX/literals.mm @@ -14,7 +14,7 @@ struct Y { operator id() const; }; -// CHECK: define void @_Z10test_arrayv +// CHECK-LABEL: define void @_Z10test_arrayv void test_array() { // CHECK: [[OBJECTS:%[a-zA-Z0-9.]+]] = alloca [2 x i8*] @@ -60,7 +60,7 @@ void test_array() { // CHECK: unreachable } -// CHECK: define weak_odr void @_Z24test_array_instantiationIiEvv +// CHECK-LABEL: define weak_odr void @_Z24test_array_instantiationIiEvv template<typename T> void test_array_instantiation() { // CHECK: [[OBJECTS:%[a-zA-Z0-9.]+]] = alloca [2 x i8*] diff --git a/test/CodeGenObjCXX/mangle-blocks.mm b/test/CodeGenObjCXX/mangle-blocks.mm index 892c8af..405e528 100644 --- a/test/CodeGenObjCXX/mangle-blocks.mm +++ b/test/CodeGenObjCXX/mangle-blocks.mm @@ -1,19 +1,22 @@ // RUN: %clang_cc1 -emit-llvm -fblocks -o - -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 %s | FileCheck %s -// CHECK: @_ZGVN3foo22___Z3foov_block_invoke5valueE = internal global i64 0 +// CHECK: @_ZGVZZ3foovEUb_E5value = internal global i64 0 +// CHECK: @_ZZZN26externally_visible_statics1S3fooEiEd_Ub_E1k = linkonce_odr global i32 0 +// CHECK: @_ZZ26externally_visible_statics1S1xMUb_E1j = linkonce_odr global i32 0 +// CHECK: @_ZZZN26externally_visible_statics10inlinefuncEvEUb_E1i = linkonce_odr global i32 0 int f(); void foo() { - // CHECK: define internal i32 @___Z3foov_block_invoke - // CHECK: call i32 @__cxa_guard_acquire(i64* @_ZGVN3foo22___Z3foov_block_invoke5valueE + // CHECK-LABEL: define internal i32 @___Z3foov_block_invoke + // CHECK: call i32 @__cxa_guard_acquire(i64* @_ZGVZZ3foovEUb_E5value (void)^(int x) { static int value = f(); return x + value; }; } -// CHECK: define internal i32 @i_block_invoke +// CHECK-LABEL: define internal i32 @i_block_invoke int i = ^(int x) { return x;}(i); @interface A @@ -24,7 +27,7 @@ int i = ^(int x) { return x;}(i); - (void)method { // CHECK: define internal signext i8 @"__11-[A method]_block_invoke" (void)^(int x) { - // CHECK: @"_ZN11-[A method]28__11-[A method]_block_invoke4nameE" + // CHECK: @"_ZZZ11-[A method]EUb0_E4name" static const char *name = "hello"; return name[x]; }; @@ -39,12 +42,44 @@ void foo(int) { } namespace N { - // CHECK: define internal signext i8 @___Z3fooi_block_invoke + // CHECK-LABEL: define internal signext i8 @___Z3fooi_block_invoke void bar() { (void)^(int x) { - // CHECK: @_ZN1N3bar26___ZN1N3barEv_block_invoke4nameE + // CHECK: @_ZZZN1N3barEvEUb2_E4name static const char *name = "hello"; return name[x]; }; } } + +class C { + C(); +}; +C::C() { + (void)^(int x) { + // CHECK: @_ZZZN1CC1EvEUb3_E5nameb + static const char *nameb = "hello"; + return nameb[x]; + }; +} + +int f(); +namespace externally_visible_statics { + inline void inlinefunc() { + ^{ + static int i = f(); + }(); + } + struct S { + int x = ^{ + static int j = f(); + return j; + }(); + void foo(int y = ^{ static int k = f(); return k; }()) {} + }; + void g() { + inlinefunc(); + S s; + s.foo(); + } +} diff --git a/test/CodeGenObjCXX/mangle.mm b/test/CodeGenObjCXX/mangle.mm index 45a93a1..5b944ca 100644 --- a/test/CodeGenObjCXX/mangle.mm +++ b/test/CodeGenObjCXX/mangle.mm @@ -78,3 +78,23 @@ void test2(Test2 *t) { Test2Template<decltype(t.dimension)> t1; Test2Template<decltype(t->alt_axis)> t2; } + +@protocol P; +void overload1(A<P>*) {} +// CHECK-LABEL: define void @_Z9overload1PU11objcproto1P1A +void overload1(const A<P>*) {} +// CHECK-LABEL: define void @_Z9overload1PKU11objcproto1P1A +void overload1(A<P>**) {} +// CHECK-LABEL: define void @_Z9overload1PPU11objcproto1P1A +void overload1(A<P>*const*) {} +// CHECK-LABEL: define void @_Z9overload1PKPU11objcproto1P1A +void overload1(A<P>***) {} +// CHECK-LABEL: define void @_Z9overload1PPPU11objcproto1P1A +void overload1(void (f)(A<P>*)) {} +// CHECK-LABEL: define void @_Z9overload1PFvPU11objcproto1P1AE + +template<typename T> struct X { void f(); }; +template<> void X<A*>::f() {} +// CHECK-LABEL: define void @_ZN1XIP1AE1fEv +template<> void X<A<P>*>::f() {} +// CHECK-LABEL: define void @_ZN1XIPU11objcproto1P1AE1fEv diff --git a/test/CodeGenObjCXX/message.mm b/test/CodeGenObjCXX/message.mm index 1268a79..af3d81f 100644 --- a/test/CodeGenObjCXX/message.mm +++ b/test/CodeGenObjCXX/message.mm @@ -15,7 +15,7 @@ namespace test0 { [a foo]; } template void foo<int>(); - // CHECK: define weak_odr void @_ZN5test03fooIiEEvv() + // CHECK-LABEL: define weak_odr void @_ZN5test03fooIiEEvv() // CHECK: [[T0:%.*]] = call [[TEST0:%.*]]* @_ZN5test01AcvP5Test0Ev( // CHECK-NEXT: [[T1:%.*]] = load i8** // CHECK-NEXT: [[T2:%.*]] = bitcast [[TEST0]]* [[T0]] to i8* diff --git a/test/CodeGenObjCXX/nrvo.mm b/test/CodeGenObjCXX/nrvo.mm index 47460c2..0a7dff5 100644 --- a/test/CodeGenObjCXX/nrvo.mm +++ b/test/CodeGenObjCXX/nrvo.mm @@ -22,7 +22,7 @@ struct X { X blocksNRVO() { return ^{ - // CHECK: define internal void @___Z10blocksNRVOv_block_invoke + // CHECK-LABEL: define internal void @___Z10blocksNRVOv_block_invoke X x; // CHECK: tail call void @_ZN1XC1Ev // CHECK-NEXT: ret void diff --git a/test/CodeGenObjCXX/objc-container-subscripting-1.mm b/test/CodeGenObjCXX/objc-container-subscripting-1.mm index c0dd0f8..48c5f5c 100644 --- a/test/CodeGenObjCXX/objc-container-subscripting-1.mm +++ b/test/CodeGenObjCXX/objc-container-subscripting-1.mm @@ -34,7 +34,7 @@ template <class T> void test2(NSMutableArray *a) { a[10] = 0; } template void test2<int>(NSMutableArray*); -// CHECK: define weak_odr void @_Z5test2IiEvP14NSMutableArray +// CHECK-LABEL: define weak_odr void @_Z5test2IiEvP14NSMutableArray // CHECK: @objc_msgSend // CHECK: ret void @@ -44,7 +44,7 @@ template <class T> void test3(NSMutableArray *a) { } template void test3<int>(NSMutableArray*); -// CHECK: define weak_odr void @_Z5test3IiEvP14NSMutableArray +// CHECK-LABEL: define weak_odr void @_Z5test3IiEvP14NSMutableArray // CHECK: @objc_msgSend // CHECK: ret void diff --git a/test/CodeGenObjCXX/objc-container-subscripting.mm b/test/CodeGenObjCXX/objc-container-subscripting.mm index dfe48e9..d906902 100644 --- a/test/CodeGenObjCXX/objc-container-subscripting.mm +++ b/test/CodeGenObjCXX/objc-container-subscripting.mm @@ -33,7 +33,7 @@ template <class T> void test2(NSMutableArray *a) { a[10] = 0; } template void test2<int>(NSMutableArray*); -// CHECK: define weak_odr void @_Z5test2IiEvP14NSMutableArray +// CHECK-LABEL: define weak_odr void @_Z5test2IiEvP14NSMutableArray // CHECK: @objc_msgSend // CHECK: ret void @@ -43,11 +43,11 @@ template <class T> void test3(NSMutableArray *a) { } template void test3<int>(NSMutableArray*); -// CHECK: define weak_odr void @_Z5test3IiEvP14NSMutableArray +// CHECK-LABEL: define weak_odr void @_Z5test3IiEvP14NSMutableArray // CHECK: @objc_msgSend // CHECK: ret void -// CHECK: define void @_Z11static_dataP14NSMutableArray +// CHECK-LABEL: define void @_Z11static_dataP14NSMutableArray void static_data(NSMutableArray *array) { // CHECK: call i32 @__cxa_guard_acquire // CHECK: {{call i8*.*@objc_msgSend }} diff --git a/test/CodeGenObjCXX/property-dot-reference.mm b/test/CodeGenObjCXX/property-dot-reference.mm index e64b397..be6742a 100644 --- a/test/CodeGenObjCXX/property-dot-reference.mm +++ b/test/CodeGenObjCXX/property-dot-reference.mm @@ -50,7 +50,7 @@ void test2() { void(obj.myProperty); void(obj.myGetter); } -// CHECK: define void @_Z5test2v() +// CHECK-LABEL: define void @_Z5test2v() // CHECK: call i32 bitcast // CHECK: call double bitcast // CHECK: call i32 bitcast diff --git a/test/CodeGenObjCXX/property-object-reference-2.mm b/test/CodeGenObjCXX/property-object-reference-2.mm index 25bfdf8..542967c 100644 --- a/test/CodeGenObjCXX/property-object-reference-2.mm +++ b/test/CodeGenObjCXX/property-object-reference-2.mm @@ -29,7 +29,7 @@ struct TCPPObject @synthesize MyProperty1 = _cppObject1; @end -// CHECK: define internal void @__copy_helper_atomic_property_( +// CHECK-LABEL: define internal void @__copy_helper_atomic_property_( // CHECK: [[TWO:%.*]] = load %struct.TCPPObject** [[ADDR:%.*]], align 8 // CHECK: [[THREE:%.*]] = load %struct.TCPPObject** [[ADDR1:%.*]], align 8 // CHECK: [[CALL:%.*]] = call i32 @_Z7DEFAULTv() @@ -43,7 +43,7 @@ struct TCPPObject // CHECK: call void @objc_copyCppObjectAtomic(i8* [[THREE]], i8* [[TWO]], i8* bitcast (void (%struct.TCPPObject*, %struct.TCPPObject*)* @__copy_helper_atomic_property_ to i8*)) // CHECK: ret void -// CHECK: define internal void @__assign_helper_atomic_property_( +// CHECK-LABEL: define internal void @__assign_helper_atomic_property_( // CHECK: [[TWO:%.*]] = load %struct.TCPPObject** [[ADDR:%.*]], align 8 // CHECK: [[THREE:%.*]] = load %struct.TCPPObject** [[ADDR1:%.*]], align 8 // CHECK: [[CALL:%.*]] = call %struct.TCPPObject* @_ZN10TCPPObjectaSERKS_(%struct.TCPPObject* [[TWO]], %struct.TCPPObject* [[THREE]]) diff --git a/test/CodeGenObjCXX/property-objects.mm b/test/CodeGenObjCXX/property-objects.mm index a3c2ed3..88e992c 100644 --- a/test/CodeGenObjCXX/property-objects.mm +++ b/test/CodeGenObjCXX/property-objects.mm @@ -54,7 +54,7 @@ struct CGRect { @end -// CHECK: define i32 @main +// CHECK-LABEL: define i32 @main // CHECK: call void @_ZN1SC1ERKS_(%class.S* [[AGGTMP:%[a-zA-Z0-9\.]+]], %class.S* {{%[a-zA-Z0-9\.]+}}) // CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %class.S*)*)(i8* {{%[a-zA-Z0-9\.]+}}, i8* {{%[a-zA-Z0-9\.]+}}, %class.S* [[AGGTMP]]) // CHECK-NEXT: ret i32 0 @@ -66,7 +66,7 @@ int main() { } // rdar://8379892 -// CHECK: define void @_Z1fP1A +// CHECK-LABEL: define void @_Z1fP1A // CHECK: call void @_ZN1XC1Ev(%struct.X* [[LVTEMP:%[a-zA-Z0-9\.]+]]) // CHECK: call void @_ZN1XC1ERKS_(%struct.X* [[AGGTMP:%[a-zA-Z0-9\.]+]], %struct.X* [[LVTEMP]]) // CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %struct.X*)*)({{.*}} %struct.X* [[AGGTMP]]) diff --git a/test/CodeGenObjCXX/property-reference.mm b/test/CodeGenObjCXX/property-reference.mm index 0e4897b..a4af900 100644 --- a/test/CodeGenObjCXX/property-reference.mm +++ b/test/CodeGenObjCXX/property-reference.mm @@ -64,7 +64,7 @@ template <class T> void test2(Test2 *a) { a.prop += x; } template void test2<int>(Test2*); -// CHECK: define weak_odr void @_Z5test2IiEvP5Test2( +// CHECK-LABEL: define weak_odr void @_Z5test2IiEvP5Test2( // CHECK: [[X:%.*]] = alloca i32, // CHECK: @objc_msgSend // CHECK: store i32 {{%.*}}, i32* [[X]], @@ -83,7 +83,7 @@ template <class T> void test3(Test2 *a) { a.prop += (sizeof(T), x); } template void test3<int>(Test2*); -// CHECK: define weak_odr void @_Z5test3IiEvP5Test2( +// CHECK-LABEL: define weak_odr void @_Z5test3IiEvP5Test2( // CHECK: [[X:%.*]] = alloca i32, // CHECK: @objc_msgSend // CHECK: store i32 {{%.*}}, i32* [[X]], diff --git a/test/CodeGenObjCXX/references.mm b/test/CodeGenObjCXX/references.mm index 6265c7b..39abd8a 100644 --- a/test/CodeGenObjCXX/references.mm +++ b/test/CodeGenObjCXX/references.mm @@ -17,7 +17,7 @@ struct A { ~A(); }; @end -// CHECK: define void @_Z1fP1B +// CHECK-LABEL: define void @_Z1fP1B // CHECK: objc_msgSend to // CHECK-NOT: call void @_ZN1AD1Ev // CHECK: ret void diff --git a/test/CodeGenObjCXX/rtti.mm b/test/CodeGenObjCXX/rtti.mm index 72de3ac..e458f09 100644 --- a/test/CodeGenObjCXX/rtti.mm +++ b/test/CodeGenObjCXX/rtti.mm @@ -38,14 +38,14 @@ int main() { const std::type_info &t5 = typeid(c); const std::type_info &t6 = typeid(*c); - // CHECK: store {{.*}} @_ZTIP11objc_object - // CHECK: store {{.*}} @_ZTI11objc_object + // CHECK: store {{.*}} @_ZTIPU11objcproto1P11objc_object + // CHECK: store {{.*}} @_ZTIU11objcproto1P11objc_object id<P> i2 = 0; const std::type_info &t7 = typeid(i2); const std::type_info &t8 = typeid(*i2); - // CHECK: store {{.*}} @_ZTIP10objc_class - // CHECK: store {{.*}} @_ZTI10objc_class + // CHECK: store {{.*}} @_ZTIPU11objcproto1P10objc_class + // CHECK: store {{.*}} @_ZTIU11objcproto1P10objc_class Class<P> c2 = 0; const std::type_info &t9 = typeid(c2); const std::type_info &t10 = typeid(*c2); diff --git a/test/CodeGenObjCXX/unknown-anytype.mm b/test/CodeGenObjCXX/unknown-anytype.mm index 0e146d4..4731fcc 100644 --- a/test/CodeGenObjCXX/unknown-anytype.mm +++ b/test/CodeGenObjCXX/unknown-anytype.mm @@ -6,7 +6,7 @@ void test0(A *a) { (void) [a test0: (float) 2.0]; } -// CHECK: define void @_Z5test0P1A( +// CHECK-LABEL: define void @_Z5test0P1A( // CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, float)*)( @interface B @@ -15,6 +15,6 @@ void test0(A *a) { void test1(B *b) { (void) [b test1: (float) 2.0]; } -// CHECK: define void @_Z5test1P1B( +// CHECK-LABEL: define void @_Z5test1P1B( // CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, float)*)( |