diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2015-04-22 21:38:15 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2015-04-22 21:38:15 +0000 |
| commit | dc012fa26690bef5cd7b56e28bbbe9d1aa17349a (patch) | |
| tree | 98eea4882cb0f30190beef442b48c562bff7a89a /clang/test/CodeGenObjCXX/arc-references.mm | |
| parent | 952d95141828eeb787d17c7f92d9dd6ea455cd0c (diff) | |
| download | bcm5719-llvm-dc012fa26690bef5cd7b56e28bbbe9d1aa17349a.tar.gz bcm5719-llvm-dc012fa26690bef5cd7b56e28bbbe9d1aa17349a.zip | |
Revert "Revert r234581, it might have caused a few miscompiles in Chromium."
This reverts commit r234700. It turns out that the lifetime markers
were not the cause of Chromium failing but a bug which was uncovered by
optimizations exposed by the markers.
llvm-svn: 235553
Diffstat (limited to 'clang/test/CodeGenObjCXX/arc-references.mm')
| -rw-r--r-- | clang/test/CodeGenObjCXX/arc-references.mm | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjCXX/arc-references.mm b/clang/test/CodeGenObjCXX/arc-references.mm index 2bd21c31b4f..8397abeb676 100644 --- a/clang/test/CodeGenObjCXX/arc-references.mm +++ b/clang/test/CodeGenObjCXX/arc-references.mm @@ -38,11 +38,14 @@ typedef __strong id strong_id; //CHECK: define void @_Z5test3v void test3() { + // CHECK: [[REF:%.*]] = alloca i8**, align 8 // CHECK: call i8* @objc_initWeak // CHECK-NEXT: store i8** const __weak id &ref = strong_id(); // CHECK-NEXT: call void @_Z6calleev() callee(); + // CHECK-NEXT: [[PTR:%.*]] = bitcast i8*** [[REF]] to i8* + // CHECK-NEXT: call void @llvm.lifetime.end(i64 8, i8* [[PTR]]) // CHECK-NEXT: call void @objc_destroyWeak // CHECK-NEXT: ret void } @@ -62,6 +65,7 @@ void sink(__strong A* &&); // CHECK-LABEL: define void @_Z5test5RU8__strongP11objc_object void test5(__strong id &x) { // CHECK: [[REFTMP:%.*]] = alloca {{%.*}}*, align 8 + // CHECK: [[I:%.*]] = alloca i32, align 4 // CHECK: [[OBJ_ID:%.*]] = call i8* @objc_retain( // CHECK-NEXT: [[OBJ_A:%.*]] = bitcast i8* [[OBJ_ID]] to [[A:%[a-zA-Z0-9]+]]* // CHECK-NEXT: store [[A]]* [[OBJ_A]], [[A]]** [[REFTMP:%[a-zA-Z0-9]+]] @@ -70,8 +74,12 @@ void test5(__strong id &x) { // CHECK-NEXT: [[OBJ_A:%[a-zA-Z0-9]+]] = load [[A]]*, [[A]]** [[REFTMP]] // CHECK-NEXT: [[OBJ_ID:%[a-zA-Z0-9]+]] = bitcast [[A]]* [[OBJ_A]] to i8* // CHECK-NEXT: call void @objc_release + // CHECK-NEXT: [[IPTR1:%.*]] = bitcast i32* [[I]] to i8* + // CHECK-NEXT: call void @llvm.lifetime.start(i64 4, i8* [[IPTR1]]) // CHECK-NEXT: store i32 17, i32 int i = 17; + // CHECK-NEXT: [[IPTR2:%.*]] = bitcast i32* [[I]] to i8* + // CHECK-NEXT: call void @llvm.lifetime.end(i64 4, i8* [[IPTR2]]) // CHECK-NEXT: ret void } |

