@@ -1263,29 +1263,27 @@ void ClauseProcessor::processMapObjects(
12631263 recordType, mapperIdName);
12641264 };
12651265
1266- auto getDefaultMapperID = [&](const semantics::DerivedTypeSpec *typeSpec,
1267- std::string &mapperIdName) {
1268- mapperIdName.clear ();
1269- if (!mlir::isa<mlir::omp::DeclareMapperOp>(
1270- firOpBuilder.getRegion ().getParentOp ()) &&
1271- typeSpec) {
1272- mapperIdName =
1273- typeSpec->name ().ToString () + llvm::omp::OmpDefaultMapperName;
1274- if (auto *sym = converter.getCurrentScope ().FindSymbol (mapperIdName)) {
1275- mapperIdName = converter.mangleName (mapperIdName, sym->owner ());
1276- } else {
1277- mapperIdName =
1278- converter.mangleName (mapperIdName, *typeSpec->GetScope ());
1279- }
1266+ auto getDefaultMapperID =
1267+ [&](const semantics::DerivedTypeSpec *typeSpec) -> std::string {
1268+ if (mlir::isa<mlir::omp::DeclareMapperOp>(
1269+ firOpBuilder.getRegion ().getParentOp ()) ||
1270+ !typeSpec)
1271+ return {};
1272+
1273+ std::string mapperIdName =
1274+ typeSpec->name ().ToString () + llvm::omp::OmpDefaultMapperName;
1275+ if (auto *sym = converter.getCurrentScope ().FindSymbol (mapperIdName)) {
1276+ mapperIdName = converter.mangleName (mapperIdName, sym->owner ());
1277+ } else {
1278+ mapperIdName = converter.mangleName (mapperIdName, *typeSpec->GetScope ());
12801279 }
12811280
12821281 // Make sure we don't return a mapper to self.
1283- llvm::StringRef parentOpName;
12841282 if (auto declMapOp = mlir::dyn_cast<mlir::omp::DeclareMapperOp>(
12851283 firOpBuilder.getRegion ().getParentOp ()))
1286- parentOpName = declMapOp.getSymName ();
1287- if (mapperIdName == parentOpName)
1288- mapperIdName. clear () ;
1284+ if (mapperIdName == declMapOp.getSymName ())
1285+ return {};
1286+ return mapperIdName;
12891287 };
12901288
12911289 // Create the mapper symbol from its name, if specified.
@@ -1299,7 +1297,7 @@ void ClauseProcessor::processMapObjects(
12991297 getSymbolDerivedType (*object.sym ());
13001298 if (!typeSpec && object.sym ()->owner ().IsDerivedType ())
13011299 typeSpec = object.sym ()->owner ().derivedTypeSpec ();
1302- getDefaultMapperID (typeSpec, mapperIdName );
1300+ mapperIdName = getDefaultMapperID (typeSpec);
13031301 }
13041302 assert (converter.getModuleOp ().lookupSymbol (mapperIdName) &&
13051303 " mapper not found" );
@@ -1340,26 +1338,25 @@ void ClauseProcessor::processMapObjects(
13401338
13411339 const semantics::DerivedTypeSpec *objectTypeSpec =
13421340 getSymbolDerivedType (*object.sym ());
1343- if (!objectTypeSpec && object.sym ()->owner ().IsDerivedType ())
1344- objectTypeSpec = object.sym ()->owner ().derivedTypeSpec ();
13451341
13461342 if (mapperIdNameRef == " __implicit_mapper" ) {
13471343 if (parentObj.has_value ()) {
13481344 mapperId = mlir::FlatSymbolRefAttr ();
1349- } else {
1350- std::string mapperIdName;
1351- getDefaultMapperID (objectTypeSpec, mapperIdName);
1345+ } else if (objectTypeSpec) {
1346+ std::string mapperIdName = getDefaultMapperID (objectTypeSpec);
13521347 bool needsDefaultMapper =
1348+ semantics::IsAllocatableOrObjectPointer (object.sym ()) ||
13531349 (objectTypeSpec &&
1354- requiresImplicitDefaultDeclareMapper (*objectTypeSpec)) ||
1355- semantics::IsAllocatableOrObjectPointer (object.sym ());
1350+ requiresImplicitDefaultDeclareMapper (*objectTypeSpec));
13561351 bool containsDelete = (mapTypeBits & mlir::omp::ClauseMapFlags::del) !=
13571352 mlir::omp::ClauseMapFlags::none;
13581353 if (!mapperIdName.empty () && !containsDelete)
13591354 mapperId = addImplicitMapper (object, mapperIdName,
13601355 /* allowGenerate=*/ needsDefaultMapper);
13611356 else
13621357 mapperId = mlir::FlatSymbolRefAttr ();
1358+ } else {
1359+ mapperId = mlir::FlatSymbolRefAttr ();
13631360 }
13641361 }
13651362
0 commit comments