@@ -1233,43 +1233,34 @@ void ClauseProcessor::processMapObjects(
12331233 return nullptr ;
12341234 };
12351235
1236- auto addImplicitmapper = [&](const omp::Object &object,
1236+ auto addImplicitMapper = [&](const omp::Object &object,
12371237 std::string &mapperIdName,
12381238 bool allowGenerate) -> mlir::FlatSymbolRefAttr {
12391239 if (mapperIdName.empty ())
12401240 return mlir::FlatSymbolRefAttr ();
12411241
1242- bool symbolExists = converter.getModuleOp ().lookupSymbol (mapperIdName);
1243- if (!symbolExists && !allowGenerate)
1244- return mlir::FlatSymbolRefAttr ();
1245-
1246- auto getOrCreateMapperAttr = [&]() -> mlir::FlatSymbolRefAttr {
1247- if (symbolExists)
1248- return mlir::FlatSymbolRefAttr::get (&converter.getMLIRContext (),
1249- mapperIdName);
1250-
1251- const semantics::DerivedTypeSpec *typeSpec =
1252- getSymbolDerivedType (*object.sym ());
1253- if (!typeSpec && object.sym ()->owner ().IsDerivedType ())
1254- typeSpec = object.sym ()->owner ().derivedTypeSpec ();
1242+ if (converter.getModuleOp ().lookupSymbol (mapperIdName))
1243+ return mlir::FlatSymbolRefAttr::get (&converter.getMLIRContext (),
1244+ mapperIdName);
12551245
1256- if (!typeSpec )
1257- return mlir::FlatSymbolRefAttr ();
1246+ if (!allowGenerate )
1247+ return mlir::FlatSymbolRefAttr ();
12581248
1259- mlir::Type type = converter. genType ( *typeSpec);
1260- auto recordType = mlir::dyn_cast<fir::RecordType>(type );
1261- if (!recordType )
1262- return mlir::FlatSymbolRefAttr ();
1249+ const semantics::DerivedTypeSpec *typeSpec =
1250+ getSymbolDerivedType (*object. sym () );
1251+ if (!typeSpec && object. sym ()-> owner (). IsDerivedType () )
1252+ typeSpec = object. sym ()-> owner (). derivedTypeSpec ();
12631253
1264- return getOrGenImplicitDefaultDeclareMapper (converter, clauseLocation,
1265- recordType, mapperIdName);
1266- };
1254+ if (!typeSpec)
1255+ return mlir::FlatSymbolRefAttr ();
12671256
1268- mlir::FlatSymbolRefAttr mapperAttr = getOrCreateMapperAttr ();
1269- if (!mapperAttr)
1257+ mlir::Type type = converter.genType (*typeSpec);
1258+ auto recordType = mlir::dyn_cast<fir::RecordType>(type);
1259+ if (!recordType)
12701260 return mlir::FlatSymbolRefAttr ();
12711261
1272- return mapperAttr;
1262+ return getOrGenImplicitDefaultDeclareMapper (converter, clauseLocation,
1263+ recordType, mapperIdName);
12731264 };
12741265
12751266 auto getDefaultMapperID = [&](const semantics::DerivedTypeSpec *typeSpec,
@@ -1364,13 +1355,9 @@ void ClauseProcessor::processMapObjects(
13641355 semantics::IsAllocatableOrObjectPointer (object.sym ());
13651356 bool containsDelete = (mapTypeBits & mlir::omp::ClauseMapFlags::del) !=
13661357 mlir::omp::ClauseMapFlags::none;
1367- bool mapperExists = !mapperIdName.empty () &&
1368- converter.getModuleOp ().lookupSymbol (mapperIdName);
1369- if ((needsDefaultMapper || mapperExists) && !mapperIdName.empty () &&
1370- !containsDelete)
1371- mapperId = addImplicitmapper (object, mapperIdName,
1372- /* allowGenerate=*/ needsDefaultMapper &&
1373- !mapperExists);
1358+ if (!mapperIdName.empty () && !containsDelete)
1359+ mapperId = addImplicitMapper (object, mapperIdName,
1360+ /* allowGenerate=*/ needsDefaultMapper);
13741361 else
13751362 mapperId = mlir::FlatSymbolRefAttr ();
13761363 }
0 commit comments