This revision was automatically updated to reflect the committed changes. Closed by commit rG952944c12c0a: [ObjC][ARC] Don't add operand bundle clang.arc.attachedcall to a call if (authored by ahatanak).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D97824/new/ https://reviews.llvm.org/D97824 Files: clang/lib/CodeGen/CGObjC.cpp clang/test/CodeGenObjCXX/arc-rv-attr.mm Index: clang/test/CodeGenObjCXX/arc-rv-attr.mm =================================================================== --- /dev/null +++ clang/test/CodeGenObjCXX/arc-rv-attr.mm @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple arm64-apple-ios9 -fobjc-runtime=ios-9.0 -fobjc-arc -std=c++11 -O -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK + +id foo(void); + +// CHECK-LABEL: define{{.*}} void @_Z14test_list_initv( +// CHECK: %[[CALL1:.*]] = call i8* @_Z3foov() [ "clang.arc.attachedcall"(i64 0) ] +// CHECK: call i8* @llvm.objc.retain(i8* %[[CALL1]]) + +void test_list_init() { + auto t = id{foo()}; +} Index: clang/lib/CodeGen/CGObjC.cpp =================================================================== --- clang/lib/CodeGen/CGObjC.cpp +++ clang/lib/CodeGen/CGObjC.cpp @@ -2939,8 +2939,12 @@ ValueTransform doAfterCall, ValueTransform doFallback) { CGBuilderTy::InsertPoint ip = CGF.Builder.saveIP(); + auto *callBase = dyn_cast<llvm::CallBase>(value); - if (llvm::CallInst *call = dyn_cast<llvm::CallInst>(value)) { + if (callBase && llvm::objcarc::hasAttachedCallOpBundle(callBase)) { + // Fall back if the call base has operand bundle "clang.arc.attachedcall". + value = doFallback(CGF, value); + } else if (llvm::CallInst *call = dyn_cast<llvm::CallInst>(value)) { // Place the retain immediately following the call. CGF.Builder.SetInsertPoint(call->getParent(), ++llvm::BasicBlock::iterator(call));
Index: clang/test/CodeGenObjCXX/arc-rv-attr.mm =================================================================== --- /dev/null +++ clang/test/CodeGenObjCXX/arc-rv-attr.mm @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple arm64-apple-ios9 -fobjc-runtime=ios-9.0 -fobjc-arc -std=c++11 -O -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK + +id foo(void); + +// CHECK-LABEL: define{{.*}} void @_Z14test_list_initv( +// CHECK: %[[CALL1:.*]] = call i8* @_Z3foov() [ "clang.arc.attachedcall"(i64 0) ] +// CHECK: call i8* @llvm.objc.retain(i8* %[[CALL1]]) + +void test_list_init() { + auto t = id{foo()}; +} Index: clang/lib/CodeGen/CGObjC.cpp =================================================================== --- clang/lib/CodeGen/CGObjC.cpp +++ clang/lib/CodeGen/CGObjC.cpp @@ -2939,8 +2939,12 @@ ValueTransform doAfterCall, ValueTransform doFallback) { CGBuilderTy::InsertPoint ip = CGF.Builder.saveIP(); + auto *callBase = dyn_cast<llvm::CallBase>(value); - if (llvm::CallInst *call = dyn_cast<llvm::CallInst>(value)) { + if (callBase && llvm::objcarc::hasAttachedCallOpBundle(callBase)) { + // Fall back if the call base has operand bundle "clang.arc.attachedcall". + value = doFallback(CGF, value); + } else if (llvm::CallInst *call = dyn_cast<llvm::CallInst>(value)) { // Place the retain immediately following the call. CGF.Builder.SetInsertPoint(call->getParent(), ++llvm::BasicBlock::iterator(call));
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits