4040#include " mlir/Transforms/RegionUtils.h"
4141#include " llvm/ADT/STLExtras.h"
4242#include " llvm/Frontend/OpenMP/OMPConstants.h"
43- #include < string>
4443
4544using namespace Fortran ::lower::omp;
4645using namespace Fortran ::common::openmp;
@@ -2620,13 +2619,16 @@ genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable,
26202619 const auto &mapperName{std::get<std::optional<parser::Name>>(spec.t )};
26212620 const auto &varType{std::get<parser::TypeSpec>(spec.t )};
26222621 const auto &varName{std::get<parser::Name>(spec.t )};
2623- std::stringstream mapperNameStr;
2624- if (mapperName.has_value ()) {
2625- mapperNameStr << mapperName->ToString ();
2626- } else {
2627- mapperNameStr << " default_"
2628- << varType.declTypeSpec ->derivedTypeSpec ().name ().ToString ();
2629- }
2622+ assert (varType.declTypeSpec ->category () ==
2623+ semantics::DeclTypeSpec::Category::TypeDerived &&
2624+ " Expected derived type" );
2625+
2626+ std::string mapperNameStr;
2627+ if (mapperName.has_value ())
2628+ mapperNameStr = mapperName->ToString ();
2629+ else
2630+ mapperNameStr =
2631+ " default_" + varType.declTypeSpec ->derivedTypeSpec ().name ().ToString ();
26302632
26312633 mlir::OpBuilder::InsertPoint insPt = firOpBuilder.saveInsertionPoint ();
26322634 firOpBuilder.setInsertionPointToStart (converter.getModuleOp ().getBody ());
@@ -2642,7 +2644,7 @@ genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable,
26422644 ClauseProcessor cp (converter, semaCtx, clauses);
26432645 cp.processMap (converter.getCurrentLocation (), stmtCtx, clauseOps);
26442646 auto declMapperOp = firOpBuilder.create <mlir::omp::DeclareMapperOp>(
2645- converter.getCurrentLocation (), mapperNameStr. str () , varVal, mlirType,
2647+ converter.getCurrentLocation (), mapperNameStr, varVal, mlirType,
26462648 clauseOps.mapVars );
26472649 converter.getMLIRSymbolTable ()->insert (declMapperOp.getOperation ());
26482650 firOpBuilder.restoreInsertionPoint (insPt);
0 commit comments