summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenObjC
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanaka@apple.com>2018-09-09 05:22:49 +0000
committerAkira Hatanaka <ahatanaka@apple.com>2018-09-09 05:22:49 +0000
commit9bd24527082ff753f43ef4e211013e3c5a0a459e (patch)
tree090190ca4c73eae2a47a9bc6c548b154ac5b8b98 /clang/test/CodeGenObjC
parentc14cb73c545297e8198d199f6cb783f544ac736c (diff)
downloadbcm5719-llvm-9bd24527082ff753f43ef4e211013e3c5a0a459e.tar.gz
bcm5719-llvm-9bd24527082ff753f43ef4e211013e3c5a0a459e.zip
Revert r341754.
The commit broke a couple of bots: http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/12347 http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/7310 llvm-svn: 341757
Diffstat (limited to 'clang/test/CodeGenObjC')
-rw-r--r--clang/test/CodeGenObjC/arc-no-arc-exceptions.m1
-rw-r--r--clang/test/CodeGenObjC/arc-unoptimized-byref-var.m1
-rw-r--r--clang/test/CodeGenObjC/blocks-1.m49
-rw-r--r--clang/test/CodeGenObjC/noescape.m52
4 files changed, 21 insertions, 82 deletions
diff --git a/clang/test/CodeGenObjC/arc-no-arc-exceptions.m b/clang/test/CodeGenObjC/arc-no-arc-exceptions.m
index 31d1dd53763..3338ad8477b 100644
--- a/clang/test/CodeGenObjC/arc-no-arc-exceptions.m
+++ b/clang/test/CodeGenObjC/arc-no-arc-exceptions.m
@@ -42,7 +42,6 @@ void NSLog(id, ...);
void test2(void) {
@autoreleasepool {
__attribute__((__blocks__(byref))) int x;
- ^{ (void)x; };
NSLog(@"Address of x outside of block: %p", &x);
}
}
diff --git a/clang/test/CodeGenObjC/arc-unoptimized-byref-var.m b/clang/test/CodeGenObjC/arc-unoptimized-byref-var.m
index ffc73a44d4e..9d856d659af 100644
--- a/clang/test/CodeGenObjC/arc-unoptimized-byref-var.m
+++ b/clang/test/CodeGenObjC/arc-unoptimized-byref-var.m
@@ -3,7 +3,6 @@
void test19() {
__block id x;
- ^{ (void)x; };
// CHECK-UNOPT-LABEL: define internal void @__Block_byref_object_copy
// CHECK-UNOPT: [[X:%.*]] = getelementptr inbounds [[BYREF_T:%.*]], [[BYREF_T:%.*]]* [[VAR:%.*]], i32 0, i32 6
// CHECK-UNOPT: [[X2:%.*]] = getelementptr inbounds [[BYREF_T:%.*]], [[BYREF_T:%.*]]* [[VAR1:%.*]], i32 0, i32 6
diff --git a/clang/test/CodeGenObjC/blocks-1.m b/clang/test/CodeGenObjC/blocks-1.m
index cecb55d17a8..0d2c35096ae 100644
--- a/clang/test/CodeGenObjC/blocks-1.m
+++ b/clang/test/CodeGenObjC/blocks-1.m
@@ -1,31 +1,23 @@
-// RUN: %clang_cc1 %s -emit-llvm -o - -fobjc-gc -fblocks -triple i386-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 | FileCheck %s --check-prefix=CHECK --check-prefix=OBJC
-// RUN: %clang_cc1 -x objective-c++ %s -emit-llvm -o - -fobjc-gc -fblocks -triple i386-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 | FileCheck %s --check-prefix=CHECK --check-prefix=OBJCXX
-
-// OBJC-LABEL: define void @test1(
-// OBJCXX-LABEL: define void @_Z5test1P12NSDictionary(
-
-// CHECK-LABEL: define linkonce_odr hidden void @__copy_helper_block_
-// CHECK: call void @_Block_object_assign(
-
-// CHECK-LABEL: define linkonce_odr hidden void @__destroy_helper_block_
-// CHECK: call void @_Block_object_dispose(
-
-// OBJC-LABEL: define void @foo(
-// OBJCXX-LABEL: define void @_Z3foov(
-// CHECK: call i8* @objc_read_weak(
-// CHECK: call i8* @objc_assign_weak(
-// CHECK: call void @_Block_object_dispose(
-
-// OBJC-LABEL: define void @test2(
-// OBJCXX-LABEL: define void @_Z5test2v(
-// CHECK: call i8* @objc_assign_weak(
-// CHECK: call void @_Block_object_dispose(
-
-// CHECK-LABEL: define linkonce_odr hidden void @__copy_helper_block_
-// CHECK: call void @_Block_object_assign(
-
-// CHECK-LABEL: define linkonce_odr hidden void @__destroy_helper_block_
-// CHECK: call void @_Block_object_dispose(
+// RUN: %clang_cc1 %s -emit-llvm -o %t -fobjc-gc -fblocks -triple i386-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5
+// RUN: grep "_Block_object_dispose" %t | count 6
+// RUN: grep "__copy_helper_block_" %t | count 4
+// RUN: grep "__destroy_helper_block_" %t | count 4
+// RUN: grep "__Block_byref_object_copy_" %t | count 2
+// RUN: grep "__Block_byref_object_dispose_" %t | count 2
+// RUN: not grep "i32 135)" %t
+// RUN: grep "_Block_object_assign" %t | count 4
+// RUN: grep "objc_read_weak" %t | count 2
+// RUN: grep "objc_assign_weak" %t | count 3
+// RUN: %clang_cc1 -x objective-c++ %s -emit-llvm -o %t -fobjc-gc -fblocks -triple i386-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5
+// RUN: grep "_Block_object_dispose" %t | count 6
+// RUN: grep "__copy_helper_block_" %t | count 4
+// RUN: grep "__destroy_helper_block_" %t | count 4
+// RUN: grep "__Block_byref_object_copy_" %t | count 2
+// RUN: grep "__Block_byref_object_dispose_" %t | count 2
+// RUN: not grep "i32 135)" %t
+// RUN: grep "_Block_object_assign" %t | count 4
+// RUN: grep "objc_read_weak" %t | count 2
+// RUN: grep "objc_assign_weak" %t | count 3
@interface NSDictionary @end
@@ -38,7 +30,6 @@ void test1(NSDictionary * dict) {
void foo() {
__block __weak D *weakSelf;
- ^{ (void)weakSelf; };
D *l;
l = weakSelf;
weakSelf = l;
diff --git a/clang/test/CodeGenObjC/noescape.m b/clang/test/CodeGenObjC/noescape.m
index c7624f24fb6..b4c8bf7eaf2 100644
--- a/clang/test/CodeGenObjC/noescape.m
+++ b/clang/test/CodeGenObjC/noescape.m
@@ -8,7 +8,6 @@ union U {
long long *ll;
} __attribute__((transparent_union));
-void escapingFunc0(BlockTy);
void noescapeFunc0(id, __attribute__((noescape)) BlockTy);
void noescapeFunc1(__attribute__((noescape)) int *);
void noescapeFunc2(__attribute__((noescape)) id);
@@ -22,9 +21,6 @@ void noescapeFunc3(__attribute__((noescape)) union U);
// When the block is non-escaping, copy/dispose helpers aren't generated, so the
// block layout string must include information about __strong captures.
-// CHECK-NOARC: %[[STRUCT_BLOCK_BYREF_B0:.*]] = type { i8*, %[[STRUCT_BLOCK_BYREF_B0]]*, i32, i32, i8*, %[[STRUCT_S0:.*]] }
-// CHECK-ARC: %[[STRUCT_BLOCK_BYREF_B0:.*]] = type { i8*, %[[STRUCT_BLOCK_BYREF_B0]]*, i32, i32, i8*, i8*, i8*, %[[STRUCT_S0:.*]] }
-// CHECK: %[[STRUCT_S0]] = type { i8*, i8* }
// CHECK: @[[BLOCK_DESCIPTOR_TMP_2:.*ls32l8"]] = linkonce_odr hidden unnamed_addr constant { i64, i64, i8*, i64 } { i64 0, i64 40, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @{{.*}}, i32 0, i32 0), i64 256 }, align 8
// CHECK-LABEL: define void @test0(
@@ -106,7 +102,7 @@ void test5(BlockTy2 b, int *p) {
// CHECK-NOARC: %[[V1:.*]] = load i8*, i8** %[[B_ADDR]], align 8
// CHECK-NOARC: store i8* %[[V1]], i8** %[[BLOCK_CAPTURED]], align 8
// CHECK-ARC: %[[V2:.*]] = load i8*, i8** %[[B_ADDR]], align 8
-// CHECK-ARC: %[[V3:.*]] = call i8* @objc_retain(i8* %[[V2]])
+// CHECK-ARC: %[[V3:.*]] = call i8* @objc_retain(i8* %[[V2]]) #3
// CHECK-ARC: store i8* %[[V3]], i8** %[[BLOCK_CAPTURED]], align 8
// CHECK: call void @noescapeFunc0(
// CHECK-ARC: call void @objc_storeStrong(i8** %[[V0]], i8* null)
@@ -122,49 +118,3 @@ void func(id);
void test6(id a, id b) {
noescapeFunc0(a, ^{ func(b); });
}
-
-// We don't need either the byref helper functions or the byref structs for
-// __block variables that are not captured by escaping blocks.
-
-// CHECK: define void @test7(
-// CHECK: alloca i8*, align 8
-// CHECK: %[[B0:.*]] = alloca i8*, align 8
-// CHECK: %[[BLOCK:.*]] = alloca <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8** }>, align 8
-// CHECK: %[[BLOCK_CAPTURED:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8** }>, <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8** }>* %[[BLOCK]], i32 0, i32 5
-// CHECK: store i8** %[[B0]], i8*** %[[BLOCK_CAPTURED]], align 8
-
-// CHECK-ARC-NOT: define internal void @__Block_byref_object_copy_
-// CHECK-ARC-NOT: define internal void @__Block_byref_object_dispose_
-
-void test7() {
- id a;
- __block id b0;
- noescapeFunc0(a, ^{ (void)b0; });
-}
-
-// __block variables captured by escaping blocks need byref helper functions.
-
-// CHECK: define void @test8(
-// CHECK: %[[A:.*]] = alloca i8*, align 8
-// CHECK: %[[B0:.*]] = alloca %[[STRUCT_BLOCK_BYREF_B0]], align 8
-// CHECK: alloca <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8* }>, align 8
-// CHECK: %[[BLOCK1:.*]] = alloca <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8* }>, align 8
-// CHECK: %[[BLOCK_CAPTURED7:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8* }>, <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8* }>* %[[BLOCK1]], i32 0, i32 5
-// CHECK: %[[V3:.*]] = bitcast %[[STRUCT_BLOCK_BYREF_B0]]* %[[B0]] to i8*
-// CHECK: store i8* %[[V3]], i8** %[[BLOCK_CAPTURED7]], align 8
-
-// CHECK-ARC: define internal void @__Block_byref_object_copy_
-// CHECK-ARC: define internal void @__Block_byref_object_dispose_
-// CHECK: define linkonce_odr hidden void @__copy_helper_block_
-// CHECK: define linkonce_odr hidden void @__destroy_helper_block_
-
-struct S0 {
- id a, b;
-};
-
-void test8() {
- id a;
- __block struct S0 b0;
- noescapeFunc0(a, ^{ (void)b0; });
- escapingFunc0(^{ (void)b0; });
-}
OpenPOWER on IntegriCloud