summaryrefslogtreecommitdiff
path: root/flang/lib/Lower/ConvertConstant.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'flang/lib/Lower/ConvertConstant.cpp')
-rw-r--r--flang/lib/Lower/ConvertConstant.cpp12
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