diff options
Diffstat (limited to 'flang/lib/Lower/ConvertConstant.cpp')
-rw-r--r-- | flang/lib/Lower/ConvertConstant.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/flang/lib/Lower/ConvertConstant.cpp b/flang/lib/Lower/ConvertConstant.cpp index a391d71498e7..8e7c341cc282 100644 --- a/flang/lib/Lower/ConvertConstant.cpp +++ b/flang/lib/Lower/ConvertConstant.cpp @@ -415,9 +415,10 @@ static mlir::Value genScalarLit( if (!outlineBigConstantsInReadOnlyMemory) return genInlinedStructureCtorLitImpl(converter, loc, value, eleTy); fir::FirOpBuilder &builder = converter.getFirOpBuilder(); - std::string globalName = Fortran::lower::mangle::mangleArrayLiteral( - eleTy, - Fortran::evaluate::Constant<Fortran::evaluate::SomeDerived>(value)); + auto expr = std::make_unique<Fortran::lower::SomeExpr>(toEvExpr( + Fortran::evaluate::Constant<Fortran::evaluate::SomeDerived>(value))); + llvm::StringRef globalName = + converter.getUniqueLitName(loc, std::move(expr), eleTy); fir::GlobalOp global = builder.getNamedGlobal(globalName); if (!global) { global = builder.createGlobalConstant( @@ -525,8 +526,9 @@ genOutlineArrayLit(Fortran::lower::AbstractConverter &converter, const Fortran::evaluate::Constant<T> &constant) { fir::FirOpBuilder &builder = converter.getFirOpBuilder(); mlir::Type eleTy = arrayTy.cast<fir::SequenceType>().getEleTy(); - std::string globalName = - Fortran::lower::mangle::mangleArrayLiteral(eleTy, constant); + llvm::StringRef globalName = converter.getUniqueLitName( + loc, std::make_unique<Fortran::lower::SomeExpr>(toEvExpr(constant)), + eleTy); fir::GlobalOp global = builder.getNamedGlobal(globalName); if (!global) { // Using a dense attribute for the initial value instead of creating an |