diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-01-22 00:24:57 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-01-22 00:24:57 +0000 |
commit | 8b4659a973426fafb964574ecf2067e71d369257 (patch) | |
tree | bee9faf387fea7dede289cb2b89bb5b2cf72c583 /test/CodeGenObjCXX | |
parent | 8450bb4c75e9d96d640a793d1be2bd1fe04e02f1 (diff) | |
download | clang-8b4659a973426fafb964574ecf2067e71d369257.tar.gz |
Emit DeferredDeclsToEmit in a DFS order.
Currently we emit DeferredDeclsToEmit in reverse order. This patch changes that.
The advantages of the change are that
* The output order is a bit closer to the source order. The change to
test/CodeGenCXX/pod-member-memcpys.cpp is a good example.
* If we decide to deffer more, it will not cause as large changes in the
estcases as it would without this patch.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@226751 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenObjCXX')
-rw-r--r-- | test/CodeGenObjCXX/arc-special-member-functions.mm | 70 | ||||
-rw-r--r-- | test/CodeGenObjCXX/destroy.mm | 4 | ||||
-rw-r--r-- | test/CodeGenObjCXX/lambda-expressions.mm | 3 | ||||
-rw-r--r-- | test/CodeGenObjCXX/mangle-blocks.mm | 2 |
4 files changed, 40 insertions, 39 deletions
diff --git a/test/CodeGenObjCXX/arc-special-member-functions.mm b/test/CodeGenObjCXX/arc-special-member-functions.mm index 8b002d5b4f..32c00a6e1b 100644 --- a/test/CodeGenObjCXX/arc-special-member-functions.mm +++ b/test/CodeGenObjCXX/arc-special-member-functions.mm @@ -104,27 +104,27 @@ void test_ObjCBlockMember_copy_assign(ObjCBlockMember m1, ObjCBlockMember m2) { // CHECK-NEXT: call void @objc_release(i8* [[T7]]) // CHECK-NEXT: ret -// Implicitly-generated copy constructor for ObjCBlockMember -// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCBlockMemberC2ERKS_ -// CHECK: call i8* @objc_retainBlock -// CHECK: ret - -// Implicitly-generated destructor for ObjCBlockMember -// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCBlockMemberD2Ev -// CHECK: call void @objc_storeStrong(i8* -// CHECK: ret - -// Implicitly-generated default constructor for ObjCBlockMember -// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCBlockMemberC2Ev -// CHECK: store {{.*}} null, +// Implicitly-generated default constructor for ObjCMember +// CHECK-LABEL: define linkonce_odr void @_ZN10ObjCMemberC2Ev +// CHECK-NOT: objc_release +// CHECK: store i8* null // CHECK-NEXT: ret void -// Implicitly-generated copy constructor for ObjCArrayMember -// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCArrayMemberC2ERKS_ -// CHECK: br i1 +// Implicitly-generated destructor for ObjCMember +// CHECK-LABEL: define linkonce_odr void @_ZN10ObjCMemberD2Ev +// CHECK: call void @objc_storeStrong +// CHECK: ret void + +// Implicitly-generated copy constructor for ObjCMember +// CHECK-LABEL: define linkonce_odr void @_ZN10ObjCMemberC2ERKS_ +// CHECK-NOT: objc_release // CHECK: call i8* @objc_retain // CHECK-NEXT: store i8* -// CHECK-NEXT: br label +// CHECK-NEXT: ret void + +// Implicitly-generated default constructor for ObjCArrayMember +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCArrayMemberC2Ev +// CHECK: call void @llvm.memset.p0i8.i64 // CHECK: ret // Implicitly-generated destructor for ObjCArrayMember @@ -136,29 +136,29 @@ void test_ObjCBlockMember_copy_assign(ObjCBlockMember m1, ObjCBlockMember m2) { // CHECK-NEXT: [[CUR]] = getelementptr inbounds i8** [[PAST]], i64 -1 // CHECK-NEXT: call void @objc_storeStrong(i8** [[CUR]], i8* null) // CHECK-NEXT: [[T1:%.*]] = icmp eq i8** [[CUR]], [[BEGIN]] -// CHECK-NEXT: br i1 [[T1]], +// CHECK-NEXT: br i1 [[T1]], // CHECK: ret void -// Implicitly-generated default constructor for ObjCArrayMember -// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCArrayMemberC2Ev -// CHECK: call void @llvm.memset.p0i8.i64 -// CHECK: ret - -// Implicitly-generated copy constructor for ObjCMember -// CHECK-LABEL: define linkonce_odr void @_ZN10ObjCMemberC2ERKS_ -// CHECK-NOT: objc_release +// Implicitly-generated copy constructor for ObjCArrayMember +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCArrayMemberC2ERKS_ +// CHECK: br i1 // CHECK: call i8* @objc_retain // CHECK-NEXT: store i8* +// CHECK-NEXT: br label +// CHECK: ret + +// Implicitly-generated default constructor for ObjCBlockMember +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCBlockMemberC2Ev +// CHECK: store {{.*}} null, // CHECK-NEXT: ret void -// Implicitly-generated destructor for ObjCMember -// CHECK-LABEL: define linkonce_odr void @_ZN10ObjCMemberD2Ev -// CHECK: call void @objc_storeStrong -// CHECK: ret void +// Implicitly-generated destructor for ObjCBlockMember +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCBlockMemberD2Ev +// CHECK: call void @objc_storeStrong(i8* +// CHECK: ret -// Implicitly-generated default constructor for ObjCMember -// CHECK-LABEL: define linkonce_odr void @_ZN10ObjCMemberC2Ev -// CHECK-NOT: objc_release -// CHECK: store i8* null -// CHECK-NEXT: ret void +// Implicitly-generated copy constructor for ObjCBlockMember +// CHECK-LABEL: define linkonce_odr void @_ZN15ObjCBlockMemberC2ERKS_ +// CHECK: call i8* @objc_retainBlock +// CHECK: ret diff --git a/test/CodeGenObjCXX/destroy.mm b/test/CodeGenObjCXX/destroy.mm index c53ac393de..5d797d32d4 100644 --- a/test/CodeGenObjCXX/destroy.mm +++ b/test/CodeGenObjCXX/destroy.mm @@ -43,8 +43,8 @@ void test4() { // CHECK: call void @_ZN8tderivedIiEC1Ev // CHECK: call void @_ZN8tderivedIiED1Ev -// CHECK-LABEL: define linkonce_odr void @_ZN8tderivedIiED2Ev +// CHECK-LABEL: define linkonce_odr void @_ZN7derivedD2Ev // CHECK: call void @objc_storeStrong(i8** {{.*}}, i8* null) -// CHECK-LABEL: define linkonce_odr void @_ZN7derivedD2Ev +// CHECK-LABEL: define linkonce_odr void @_ZN8tderivedIiED2Ev // CHECK: call void @objc_storeStrong(i8** {{.*}}, i8* null) diff --git a/test/CodeGenObjCXX/lambda-expressions.mm b/test/CodeGenObjCXX/lambda-expressions.mm index 9129ff091e..4b1995d810 100644 --- a/test/CodeGenObjCXX/lambda-expressions.mm +++ b/test/CodeGenObjCXX/lambda-expressions.mm @@ -60,6 +60,8 @@ void take_block(void (^block)()) { block(); } } @end +// ARC-LABEL: define linkonce_odr i32 ()* @_ZZNK13StaticMembersIfE1fMUlvE_clEvENKUlvE_cvU13block_pointerFivEEv + // 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 @@ -73,7 +75,6 @@ template<typename T> struct StaticMembers { 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 { diff --git a/test/CodeGenObjCXX/mangle-blocks.mm b/test/CodeGenObjCXX/mangle-blocks.mm index 1f3f163adb..283996d18a 100644 --- a/test/CodeGenObjCXX/mangle-blocks.mm +++ b/test/CodeGenObjCXX/mangle-blocks.mm @@ -1,8 +1,8 @@ // RUN: %clang_cc1 -emit-llvm -fblocks -o - -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 %s | FileCheck %s // CHECK: @_ZZZN26externally_visible_statics1S3fooEiEd_Ub0_E1k = linkonce_odr global i32 0 -// CHECK: @_ZZ26externally_visible_statics1S1xMUb0_E1j = linkonce_odr global i32 0 // CHECK: @_ZZZN26externally_visible_statics10inlinefuncEvEUb0_E1i = linkonce_odr global i32 0 +// CHECK: @_ZZ26externally_visible_statics1S1xMUb0_E1j = linkonce_odr global i32 0 int f(); |