diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h --- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h +++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h @@ -776,7 +776,7 @@ InsertPointTy AllocaIP, BodyGenCallbackTy BodyGenCB, bool Tied = true, Value *Final = nullptr, Value *IfCondition = nullptr, - ArrayRef Dependencies = {}); + SmallVector Dependencies = {}); /// Generator for the taskgroup construct /// diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp --- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -1288,7 +1288,7 @@ OpenMPIRBuilder::createTask(const LocationDescription &Loc, InsertPointTy AllocaIP, BodyGenCallbackTy BodyGenCB, bool Tied, Value *Final, Value *IfCondition, - ArrayRef Dependencies) { + SmallVector Dependencies) { if (!updateToLocation(Loc)) return InsertPointTy(); @@ -1442,7 +1442,7 @@ Builder.CreateAlloca(DepArrayTy, nullptr, ".dep.arr.addr"); unsigned P = 0; - for (DependData *Dep : Dependencies) { + for (const DependData &Dep : Dependencies) { Value *Base = Builder.CreateConstInBoundsGEP2_64(DepArrayTy, DepArray, 0, P); // Store the pointer to the variable @@ -1450,14 +1450,14 @@ DependInfo, Base, static_cast(RTLDependInfoFields::BaseAddr)); Value *DepValPtr = - Builder.CreatePtrToInt(Dep->DepVal, Builder.getInt64Ty()); + Builder.CreatePtrToInt(Dep.DepVal, Builder.getInt64Ty()); Builder.CreateStore(DepValPtr, Addr); // Store the size of the variable Value *Size = Builder.CreateStructGEP( DependInfo, Base, static_cast(RTLDependInfoFields::Len)); Builder.CreateStore(Builder.getInt64(M.getDataLayout().getTypeStoreSize( - Dep->DepValueType)), + Dep.DepValueType)), Size); // Store the dependency kind Value *Flags = Builder.CreateStructGEP( @@ -1465,7 +1465,7 @@ static_cast(RTLDependInfoFields::Flags)); Builder.CreateStore( ConstantInt::get(Builder.getInt8Ty(), - static_cast(Dep->DepKind)), + static_cast(Dep.DepKind)), Flags); ++P; } diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp --- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp +++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp @@ -5090,10 +5090,12 @@ OpenMPIRBuilder::LocationDescription Loc( InsertPointTy(BodyBB, BodyBB->getFirstInsertionPt()), DL); AllocaInst *InDep = Builder.CreateAlloca(Type::getInt32Ty(M->getContext())); - OpenMPIRBuilder::DependData DDIn(RTLDependenceKindTy::DepIn, - Type::getInt32Ty(M->getContext()), InDep); - SmallVector DDS; - DDS.push_back(&DDIn); + SmallVector DDS; + { + OpenMPIRBuilder::DependData DDIn(RTLDependenceKindTy::DepIn, + Type::getInt32Ty(M->getContext()), InDep); + DDS.push_back(DDIn); + } Builder.restoreIP(OMPBuilder.createTask( Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()), BodyGenCB, /*Tied=*/false, /*Final*/ nullptr, /*IfCondition*/ nullptr, DDS));