@@ -795,35 +795,43 @@ bool ClauseProcessor::processCopyprivate(
795795bool ClauseProcessor::processDepend (mlir::omp::DependClauseOps &result) const {
796796 fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder ();
797797
798- return findRepeatableClause<omp::clause::Depend>(
799- [&](const omp::clause::Depend &clause, const parser::CharBlock &) {
800- using Depend = omp::clause::Depend;
801- assert (std::holds_alternative<Depend::DepType>(clause.u ) &&
802- " Only the form with dependence type is handled at the moment" );
803- auto &depType = std::get<Depend::DepType>(clause.u );
804- auto kind = std::get<Depend::TaskDependenceType>(depType.t );
805- auto &objects = std::get<omp::ObjectList>(depType.t );
806-
807- mlir::omp::ClauseTaskDependAttr dependTypeOperand =
808- genDependKindAttr (firOpBuilder, kind);
809- result.dependKinds .append (objects.size (), dependTypeOperand);
810-
811- for (const omp::Object &object : objects) {
812- assert (object.ref () && " Expecting designator" );
813-
814- if (evaluate::ExtractSubstring (*object.ref ())) {
815- TODO (converter.getCurrentLocation (),
816- " substring not supported for task depend" );
817- } else if (evaluate::IsArrayElement (*object.ref ())) {
818- TODO (converter.getCurrentLocation (),
819- " array sections not supported for task depend" );
820- }
798+ auto process = [&](const omp::clause::Depend &clause,
799+ const parser::CharBlock &) {
800+ using Depend = omp::clause::Depend;
801+ if (!std::holds_alternative<Depend::DepType>(clause.u )) {
802+ TODO (converter.getCurrentLocation (),
803+ " DEPEND clause with SINK or SOURCE is not supported yet" );
804+ }
805+ auto &depType = std::get<Depend::DepType>(clause.u );
806+ auto kind = std::get<Depend::TaskDependenceType>(depType.t );
807+ auto &objects = std::get<omp::ObjectList>(depType.t );
821808
822- semantics::Symbol *sym = object.sym ();
823- const mlir::Value variable = converter.getSymbolAddress (*sym);
824- result.dependVars .push_back (variable);
825- }
826- });
809+ if (std::get<std::optional<omp::clause::Iterator>>(depType.t )) {
810+ TODO (converter.getCurrentLocation (),
811+ " Support for iterator modifiers is not implemented yet" );
812+ }
813+ mlir::omp::ClauseTaskDependAttr dependTypeOperand =
814+ genDependKindAttr (firOpBuilder, kind);
815+ result.dependKinds .append (objects.size (), dependTypeOperand);
816+
817+ for (const omp::Object &object : objects) {
818+ assert (object.ref () && " Expecting designator" );
819+
820+ if (evaluate::ExtractSubstring (*object.ref ())) {
821+ TODO (converter.getCurrentLocation (),
822+ " substring not supported for task depend" );
823+ } else if (evaluate::IsArrayElement (*object.ref ())) {
824+ TODO (converter.getCurrentLocation (),
825+ " array sections not supported for task depend" );
826+ }
827+
828+ semantics::Symbol *sym = object.sym ();
829+ const mlir::Value variable = converter.getSymbolAddress (*sym);
830+ result.dependVars .push_back (variable);
831+ }
832+ };
833+
834+ return findRepeatableClause<omp::clause::Depend>(process);
827835}
828836
829837bool ClauseProcessor::processHasDeviceAddr (
0 commit comments