@@ -1167,19 +1167,26 @@ void ClauseProcessor::processMapObjects(
11671167
11681168 auto getDefaultMapperID = [&](const omp::Object &object,
11691169 std::string &mapperIdName) {
1170- const semantics::DerivedTypeSpec *typeSpec = nullptr ;
1171-
1172- if (object.sym ()->GetType () && object.sym ()->GetType ()->category () ==
1173- semantics::DeclTypeSpec::TypeDerived)
1174- typeSpec = &object.sym ()->GetType ()->derivedTypeSpec ();
1175- else if (object.sym ()->owner ().IsDerivedType ())
1176- typeSpec = object.sym ()->owner ().derivedTypeSpec ();
1177-
1178- if (typeSpec) {
1179- mapperIdName =
1180- typeSpec->name ().ToString () + llvm::omp::OmpDefaultMapperName;
1181- if (auto *sym = converter.getCurrentScope ().FindSymbol (mapperIdName))
1182- mapperIdName = converter.mangleName (mapperIdName, sym->owner ());
1170+ if (!mlir::isa<mlir::omp::DeclareMapperOp>(
1171+ firOpBuilder.getRegion ().getParentOp ())) {
1172+ const semantics::DerivedTypeSpec *typeSpec = nullptr ;
1173+
1174+ if (object.sym ()->owner ().IsDerivedType ())
1175+ typeSpec = object.sym ()->owner ().derivedTypeSpec ();
1176+ else if (object.sym ()->GetType () &&
1177+ object.sym ()->GetType ()->category () ==
1178+ semantics::DeclTypeSpec::TypeDerived)
1179+ typeSpec = &object.sym ()->GetType ()->derivedTypeSpec ();
1180+
1181+ if (typeSpec) {
1182+ mapperIdName =
1183+ typeSpec->name ().ToString () + llvm::omp::OmpDefaultMapperName;
1184+ if (auto *sym = converter.getCurrentScope ().FindSymbol (mapperIdName))
1185+ mapperIdName = converter.mangleName (mapperIdName, sym->owner ());
1186+ else
1187+ mapperIdName =
1188+ converter.mangleName (mapperIdName, *typeSpec->GetScope ());
1189+ }
11831190 }
11841191
11851192 // Make sure we don't return a mapper to self
0 commit comments