================ @@ -919,8 +924,27 @@ bool ClauseProcessor::processMap( for (const Fortran::parser::OmpObject &ompObject : std::get<Fortran::parser::OmpObjectList>(mapClause->v.t).v) { + llvm::omp::OpenMPOffloadMappingFlags objectsMapTypeBits = mapTypeBits; + checkAndApplyDeclTargetMapFlags(converter, objectsMapTypeBits, + *getOmpObjectSymbol(ompObject)); + llvm::SmallVector<mlir::Value> bounds; std::stringstream asFortran; + const Fortran::semantics::Symbol *parentSym = nullptr; + + if (getOmpObjectSymbol(ompObject)->owner().IsDerivedType()) { + const auto *designator = + Fortran::parser::Unwrap<Fortran::parser::Designator>( + ompObject.u); + assert(designator && "Expected a designator from derived type " + "component during map clause processing"); + parentSym = GetFirstName(*designator).symbol; ---------------- kparzysz wrote:
We will need to traverse all parents. For example given `x%y%z`, `GetFirstName` will return `x`. The type of `x` does not have a member `z`, so findComponentMemberPlacement will fail. https://github.com/llvm/llvm-project/pull/82853 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits