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;
@@ -3127,13 +3126,16 @@ genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable,
31273126 const auto &mapperName{std::get<std::optional<parser::Name>>(spec.t )};
31283127 const auto &varType{std::get<parser::TypeSpec>(spec.t )};
31293128 const auto &varName{std::get<parser::Name>(spec.t )};
3130- std::stringstream mapperNameStr;
3131- if (mapperName.has_value ()) {
3132- mapperNameStr << mapperName->ToString ();
3133- } else {
3134- mapperNameStr << " default_"
3135- << varType.declTypeSpec ->derivedTypeSpec ().name ().ToString ();
3136- }
3129+ assert (varType.declTypeSpec ->category () ==
3130+ semantics::DeclTypeSpec::Category::TypeDerived &&
3131+ " Expected derived type" );
3132+
3133+ std::string mapperNameStr;
3134+ if (mapperName.has_value ())
3135+ mapperNameStr = mapperName->ToString ();
3136+ else
3137+ mapperNameStr =
3138+ " default_" + varType.declTypeSpec ->derivedTypeSpec ().name ().ToString ();
31373139
31383140 mlir::OpBuilder::InsertPoint insPt = firOpBuilder.saveInsertionPoint ();
31393141 firOpBuilder.setInsertionPointToStart (converter.getModuleOp ().getBody ());
@@ -3149,7 +3151,7 @@ genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable,
31493151 ClauseProcessor cp (converter, semaCtx, clauses);
31503152 cp.processMap (converter.getCurrentLocation (), stmtCtx, clauseOps);
31513153 auto declMapperOp = firOpBuilder.create <mlir::omp::DeclareMapperOp>(
3152- converter.getCurrentLocation (), mapperNameStr. str () , varVal, mlirType,
3154+ converter.getCurrentLocation (), mapperNameStr, varVal, mlirType,
31533155 clauseOps.mapVars );
31543156 converter.getMLIRSymbolTable ()->insert (declMapperOp.getOperation ());
31553157 firOpBuilder.restoreInsertionPoint (insPt);
0 commit comments