diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/CodeGen/CGCall.cpp | 6 | ||||
-rw-r--r-- | clang/test/CodeGenObjC/arc.m | 20 | ||||
-rw-r--r-- | clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m | 5 |
3 files changed, 13 insertions, 18 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index e7951b3..230a6c3 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -3448,9 +3448,9 @@ static llvm::Value *tryRemoveRetainOfSelf(CodeGenFunction &CGF, const VarDecl *self = method->getSelfDecl(); if (!self->getType().isConstQualified()) return nullptr; - // Look for a retain call. Note: stripPointerCasts looks through returned arg - // functions, which would cause us to miss the retain. - llvm::CallInst *retainCall = dyn_cast<llvm::CallInst>(result); + // Look for a retain call. + llvm::CallInst *retainCall = + dyn_cast<llvm::CallInst>(result->stripPointerCasts()); if (!retainCall || retainCall->getCalledOperand() != CGF.CGM.getObjCEntrypoints().objc_retain) return nullptr; diff --git a/clang/test/CodeGenObjC/arc.m b/clang/test/CodeGenObjC/arc.m index fb4eb34..754c339 100644 --- a/clang/test/CodeGenObjC/arc.m +++ b/clang/test/CodeGenObjC/arc.m @@ -7,30 +7,30 @@ // RUN: %clang_cc1 -fobjc-runtime=macosx-10.7.0 -triple x86_64-apple-darwin11 -Wno-objc-root-class -Wno-incompatible-pointer-types -Wno-arc-unsafe-retained-assign -emit-llvm -fblocks -fobjc-arc -fobjc-runtime-has-weak -o - %s | FileCheck -check-prefix=ARC-NATIVE %s // ARC-ALIEN: declare extern_weak void @llvm.objc.storeStrong(ptr, ptr) -// ARC-ALIEN: declare extern_weak ptr @llvm.objc.retain(ptr returned) -// ARC-ALIEN: declare extern_weak ptr @llvm.objc.autoreleaseReturnValue(ptr returned) +// ARC-ALIEN: declare extern_weak ptr @llvm.objc.retain(ptr) +// ARC-ALIEN: declare extern_weak ptr @llvm.objc.autoreleaseReturnValue(ptr) // ARC-ALIEN: declare ptr @objc_msgSend(ptr, ptr, ...) [[NLB:#[0-9]+]] // ARC-ALIEN: declare extern_weak void @llvm.objc.release(ptr) -// ARC-ALIEN: declare extern_weak ptr @llvm.objc.retainAutoreleasedReturnValue(ptr returned) +// ARC-ALIEN: declare extern_weak ptr @llvm.objc.retainAutoreleasedReturnValue(ptr) // ARC-ALIEN: declare extern_weak ptr @llvm.objc.initWeak(ptr, ptr) // ARC-ALIEN: declare extern_weak ptr @llvm.objc.storeWeak(ptr, ptr) // ARC-ALIEN: declare extern_weak ptr @llvm.objc.loadWeakRetained(ptr) // ARC-ALIEN: declare extern_weak void @llvm.objc.destroyWeak(ptr) -// ARC-ALIEN: declare extern_weak ptr @llvm.objc.autorelease(ptr returned) -// ARC-ALIEN: declare extern_weak ptr @llvm.objc.retainAutorelease(ptr returned) +// ARC-ALIEN: declare extern_weak ptr @llvm.objc.autorelease(ptr) +// ARC-ALIEN: declare extern_weak ptr @llvm.objc.retainAutorelease(ptr) // ARC-NATIVE: declare void @llvm.objc.storeStrong(ptr, ptr) -// ARC-NATIVE: declare ptr @llvm.objc.retain(ptr returned) -// ARC-NATIVE: declare ptr @llvm.objc.autoreleaseReturnValue(ptr returned) +// ARC-NATIVE: declare ptr @llvm.objc.retain(ptr) +// ARC-NATIVE: declare ptr @llvm.objc.autoreleaseReturnValue(ptr) // ARC-NATIVE: declare ptr @objc_msgSend(ptr, ptr, ...) [[NLB:#[0-9]+]] // ARC-NATIVE: declare void @llvm.objc.release(ptr) -// ARC-NATIVE: declare ptr @llvm.objc.retainAutoreleasedReturnValue(ptr returned) +// ARC-NATIVE: declare ptr @llvm.objc.retainAutoreleasedReturnValue(ptr) // ARC-NATIVE: declare ptr @llvm.objc.initWeak(ptr, ptr) // ARC-NATIVE: declare ptr @llvm.objc.storeWeak(ptr, ptr) // ARC-NATIVE: declare ptr @llvm.objc.loadWeakRetained(ptr) // ARC-NATIVE: declare void @llvm.objc.destroyWeak(ptr) -// ARC-NATIVE: declare ptr @llvm.objc.autorelease(ptr returned) -// ARC-NATIVE: declare ptr @llvm.objc.retainAutorelease(ptr returned) +// ARC-NATIVE: declare ptr @llvm.objc.autorelease(ptr) +// ARC-NATIVE: declare ptr @llvm.objc.retainAutorelease(ptr) // CHECK-LABEL: define{{.*}} void @test0 void test0(id x) { diff --git a/clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m b/clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m index a60c9b0..9a5ecbc 100644 --- a/clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m +++ b/clang/test/CodeGenObjC/convert-messages-to-runtime-calls.m @@ -28,11 +28,6 @@ void test1(id x) { // MSGS: {{call.*@objc_msgSend}} // CALLS: {{call.*@objc_alloc}} // CALLS: {{call.*@objc_allocWithZone}} - - // Note that calls to the intrinsics are not allowed for - // retain/release/autorelease they're marked `thisreturn`, which isn't - // guaranteed to be true for classes that define their own `-retain`, for - // example. Be sure to keep these as normal function calls: // CALLS: {{call.*@objc_retain}} // CALLS: {{call.*@objc_release}} // CALLS: {{tail call.*@objc_autorelease}} |