================ @@ -468,15 +505,49 @@ void DataSharingProcessor::doPrivatize(const semantics::Symbol *sym, lower::SymbolBox hsb = converter.lookupOneLevelUpSymbol(*sym); assert(hsb && "Host symbol box not found"); - mlir::Type symType = hsb.getAddr().getType(); + mlir::Value privVal = hsb.getAddr(); + mlir::Type allocType; + if (mlir::isa<fir::PointerType>(privVal.getType())) + allocType = privVal.getType(); + else + allocType = fir::unwrapRefType(privVal.getType()); + mlir::Location symLoc = hsb.getAddr().getLoc(); std::string privatizerName = sym->name().ToString() + ".privatizer"; bool isFirstPrivate = sym->test(semantics::Symbol::Flag::OmpFirstPrivate); + if (auto poly = mlir::dyn_cast<fir::ClassType>(allocType)) { + if (!mlir::isa<fir::PointerType>(poly.getEleTy()) && isFirstPrivate) + TODO(symLoc, "create polymorphic host associated copy"); + } ---------------- ergawy wrote:
nit: move above closer to where we initialize `allocType`. Same for the next 2 if conditions as well as the declaration of `argType`. Just keeps all type handling in one visual block instead of being interrupted by privatizer stuff. https://github.com/llvm/llvm-project/pull/124019 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits