[flang-commits] [flang] [Flang][Lower][OpenMP] Add initial lowering of pointers/allocatables/target in map clauses to map_info and entries (PR #68600)

via flang-commits flang-commits at lists.llvm.org
Mon Oct 9 08:44:49 PDT 2023


================
@@ -1752,11 +1754,82 @@ bool ClauseProcessor::processMap(
                                        semanticsContext, stmtCtx, ompObject,
                                        clauseLocation, asFortran, bounds);
 
+          auto checkIfStructComponent = [](const Fortran::parser::OmpObject
+                                               &ompObject) {
+            bool isComponent = false;
+            std::visit(
+                Fortran::common::visitors{
+                    [&](const Fortran::parser::Designator &designator) {
+                      if (auto *structComp = Fortran::parser::Unwrap<
+                              Fortran::parser::StructureComponent>(
+                              designator)) {
+                        if (std::holds_alternative<Fortran::parser::Name>(
+                                structComp->base.u))
+                          isComponent = true;
+                      }
+                    },
+                    [&](const Fortran::parser::Name &name) {}},
+                ompObject.u);
+
+            return isComponent;
+          };
+
+          // TODO: Currently, it appears there's missing symbol information
+          // and bounds information for allocatables and pointers inside
+          // of derived types. The latter needs some additional support
+          // added to the bounds generation whereas the former appears
+          // that it could be a problem when referring to pointer members
+          // via an OpenMP map clause, for the moment we do not handle
+          // these cases and must emit an error.
+          if (checkIfStructComponent(ompObject) &&
+              Fortran::semantics::IsAllocatableOrPointer(
+                  *getOmpObjectSymbol(ompObject)))
+            TODO(currentLocation,
+                 "pointer members of derived types are currently unmapped");
+
+          if (Fortran::semantics::IsAllocatableOrPointer(
+                  *getOmpObjectSymbol(ompObject))) {
+            // We mimic what will eventually be a structure containing a
----------------
agozillon wrote:

An inline comment that might add additional clarity alongside the commit description.

https://github.com/llvm/llvm-project/pull/68600


More information about the flang-commits mailing list