@@ -7023,19 +7023,25 @@ void CodeGenFunction::EmitOMPInteropDirective(const OMPInteropDirective &S) {
7023
7023
S.getSingleClause <OMPUseClause>())) &&
7024
7024
" OMPNowaitClause clause is used separately in OMPInteropDirective." );
7025
7025
7026
- if (const auto *C = S.getSingleClause <OMPInitClause>()) {
7027
- llvm::Value *InteropvarPtr =
7028
- EmitLValue (C->getInteropVar ()).getPointer (*this );
7029
- llvm::omp::OMPInteropType InteropType = llvm::omp::OMPInteropType::Unknown;
7030
- if (C->getIsTarget ()) {
7031
- InteropType = llvm::omp::OMPInteropType::Target;
7032
- } else {
7033
- assert (C->getIsTargetSync () && " Expected interop-type target/targetsync" );
7034
- InteropType = llvm::omp::OMPInteropType::TargetSync;
7026
+ auto ItOMPInitClause = S.getClausesOfKind <OMPInitClause>();
7027
+ if (!ItOMPInitClause.empty ()) {
7028
+ // Look at the multiple init clauses
7029
+ for (const OMPInitClause *C : ItOMPInitClause) {
7030
+ llvm::Value *InteropvarPtr =
7031
+ EmitLValue (C->getInteropVar ()).getPointer (*this );
7032
+ llvm::omp::OMPInteropType InteropType =
7033
+ llvm::omp::OMPInteropType::Unknown;
7034
+ if (C->getIsTarget ()) {
7035
+ InteropType = llvm::omp::OMPInteropType::Target;
7036
+ } else {
7037
+ assert (C->getIsTargetSync () &&
7038
+ " Expected interop-type target/targetsync" );
7039
+ InteropType = llvm::omp::OMPInteropType::TargetSync;
7040
+ }
7041
+ OMPBuilder.createOMPInteropInit (Builder, InteropvarPtr, InteropType,
7042
+ Device, NumDependences, DependenceList,
7043
+ Data.HasNowaitClause );
7035
7044
}
7036
- OMPBuilder.createOMPInteropInit (Builder, InteropvarPtr, InteropType, Device,
7037
- NumDependences, DependenceList,
7038
- Data.HasNowaitClause );
7039
7045
} else if (const auto *C = S.getSingleClause <OMPDestroyClause>()) {
7040
7046
llvm::Value *InteropvarPtr =
7041
7047
EmitLValue (C->getInteropVar ()).getPointer (*this );
0 commit comments