diff --git a/flang/lib/Optimizer/Dialect/FIRType.cpp b/flang/lib/Optimizer/Dialect/FIRType.cpp index 9e1a1f613d50e..7fb3c56321cd7 100644 --- a/flang/lib/Optimizer/Dialect/FIRType.cpp +++ b/flang/lib/Optimizer/Dialect/FIRType.cpp @@ -508,6 +508,9 @@ std::string getTypeAsString(mlir::Type ty, const fir::KindMapping &kindMap, llvm::report_fatal_error("unsupported type"); } break; + } else if (mlir::isa(ty)) { + name << "none"; + break; } else if (auto charTy = mlir::dyn_cast_or_null(ty)) { name << 'c' << kindMap.getCharacterBitsize(charTy.getFKind()); if (charTy.getLen() != fir::CharacterType::singleton()) @@ -520,8 +523,20 @@ std::string getTypeAsString(mlir::Type ty, const fir::KindMapping &kindMap, } else if (auto refTy = mlir::dyn_cast_or_null(ty)) { name << "ref_"; ty = refTy.getEleTy(); + } else if (auto ptrTy = mlir::dyn_cast_or_null(ty)) { + name << "ptr_"; + ty = ptrTy.getEleTy(); + } else if (auto heapTy = mlir::dyn_cast_or_null(ty)) { + name << "heap_"; + ty = heapTy.getEleTy(); + } else if (auto classTy = mlir::dyn_cast_or_null(ty)) { + name << "class_"; + ty = classTy.getEleTy(); + } else if (auto boxTy = mlir::dyn_cast_or_null(ty)) { + name << "box_"; + ty = boxTy.getEleTy(); } else { - // TODO: add support for RecordType/BaseBoxType + // TODO: add support for RecordType llvm::report_fatal_error("unsupported type"); } } diff --git a/flang/unittests/Optimizer/FIRTypesTest.cpp b/flang/unittests/Optimizer/FIRTypesTest.cpp index 9200301ed3b72..a006eeffd8f70 100644 --- a/flang/unittests/Optimizer/FIRTypesTest.cpp +++ b/flang/unittests/Optimizer/FIRTypesTest.cpp @@ -283,4 +283,20 @@ TEST_F(FIRTypesTest, getTypeAsString) { EXPECT_EQ("10x20xi64", fir::getTypeAsString(arrTy, *kindMap)); EXPECT_EQ( "idx", fir::getTypeAsString(mlir::IndexType::get(&context), *kindMap)); + EXPECT_EQ("ptr_i32", + fir::getTypeAsString( + fir::PointerType::get(mlir::IntegerType::get(&context, 32)), + *kindMap)); + EXPECT_EQ("heap_i32", + fir::getTypeAsString( + fir::HeapType::get(mlir::IntegerType::get(&context, 32)), *kindMap)); + EXPECT_EQ("box_i32", + fir::getTypeAsString( + fir::BoxType::get(mlir::IntegerType::get(&context, 32)), *kindMap)); + EXPECT_EQ("class_i32", + fir::getTypeAsString( + fir::ClassType::get(mlir::IntegerType::get(&context, 32)), *kindMap)); + EXPECT_EQ("class_none", + fir::getTypeAsString( + fir::ClassType::get(mlir::NoneType::get(&context)), *kindMap)); }