diff --git a/flang/lib/Optimizer/Dialect/FIRType.cpp b/flang/lib/Optimizer/Dialect/FIRType.cpp --- a/flang/lib/Optimizer/Dialect/FIRType.cpp +++ b/flang/lib/Optimizer/Dialect/FIRType.cpp @@ -518,8 +518,12 @@ name << "x" << charTy.getLen(); break; } else if (auto seqTy = mlir::dyn_cast_or_null(ty)) { - for (auto extent : seqTy.getShape()) - name << extent << 'x'; + for (auto extent : seqTy.getShape()) { + if (extent == fir::SequenceType::getUnknownExtent()) + name << "?x"; + else + name << extent << 'x'; + } ty = seqTy.getEleTy(); } else if (auto refTy = mlir::dyn_cast_or_null(ty)) { name << "ref_"; diff --git a/flang/unittests/Optimizer/FIRTypesTest.cpp b/flang/unittests/Optimizer/FIRTypesTest.cpp --- a/flang/unittests/Optimizer/FIRTypesTest.cpp +++ b/flang/unittests/Optimizer/FIRTypesTest.cpp @@ -304,4 +304,9 @@ components.emplace_back("p1", mlir::IntegerType::get(&context, 64)); derivedTy.finalize({}, components); EXPECT_EQ("rec_derived", fir::getTypeAsString(derivedTy, *kindMap)); + mlir::Type dynArrTy = + fir::SequenceType::get({fir::SequenceType::getUnknownExtent(), + fir::SequenceType::getUnknownExtent()}, + ty); + EXPECT_EQ("?x?xi64", fir::getTypeAsString(dynArrTy, *kindMap)); }