[flang-commits] [flang] [flang] Fix new clang-tidy warning llvm-type-switch-case-types. NFC. (PR #178512)

Jakub Kuderski via flang-commits flang-commits at lists.llvm.org
Wed Jan 28 12:55:15 PST 2026


https://github.com/kuhar created https://github.com/llvm/llvm-project/pull/178512

Pre-commiting this before landing the new check in https://github.com/llvm/llvm-project/pull/177892

>From 35e498db24056d4426c1419468fba9c6a5e601be Mon Sep 17 00:00:00 2001
From: Jakub Kuderski <jakub at nod-labs.com>
Date: Wed, 28 Jan 2026 15:54:19 -0500
Subject: [PATCH] [flang] Fix new clang-tidy warning
 llvm-type-switch-case-types. NFC.

---
 .../lib/Optimizer/Analysis/AliasAnalysis.cpp  | 12 ++--
 flang/lib/Optimizer/Builder/HLFIRTools.cpp    | 11 ++--
 flang/lib/Optimizer/CodeGen/Target.cpp        | 57 +++++++++----------
 flang/lib/Optimizer/CodeGen/TargetRewrite.cpp | 40 ++++++-------
 flang/lib/Optimizer/Dialect/FIROps.cpp        | 23 ++++----
 flang/lib/Optimizer/Dialect/FIRType.cpp       | 15 +++--
 flang/lib/Optimizer/HLFIR/IR/HLFIRDialect.cpp |  4 +-
 .../Support/FIROpenACCTypeInterfaces.cpp      |  8 +--
 .../OpenACC/Support/FIROpenACCUtils.cpp       | 29 +++++-----
 .../lib/Optimizer/OpenMP/LowerNontemporal.cpp |  2 +-
 10 files changed, 99 insertions(+), 102 deletions(-)

diff --git a/flang/lib/Optimizer/Analysis/AliasAnalysis.cpp b/flang/lib/Optimizer/Analysis/AliasAnalysis.cpp
index 4234a72192f31..2901ee00e1fbc 100644
--- a/flang/lib/Optimizer/Analysis/AliasAnalysis.cpp
+++ b/flang/lib/Optimizer/Analysis/AliasAnalysis.cpp
@@ -627,14 +627,14 @@ AliasAnalysis::Source AliasAnalysis::getSource(mlir::Value v,
     assert(opResult.getOwner() == defOp && "v must be a result of defOp");
     ty = opResult.getType();
     llvm::TypeSwitch<Operation *>(defOp)
-        .Case<hlfir::AsExprOp>([&](auto op) {
+        .Case([&](hlfir::AsExprOp op) {
           // TODO: we should probably always report hlfir.as_expr
           // as a unique source, and let the codegen decide whether
           // to use the original buffer or create a copy.
           v = op.getVar();
           defOp = v.getDefiningOp();
         })
-        .Case<hlfir::AssociateOp>([&](auto op) {
+        .Case([&](hlfir::AssociateOp op) {
           assert(opResult != op.getMustFreeStrorageFlag() &&
                  "MustFreeStorageFlag result is not an aliasing candidate");
 
@@ -651,7 +651,7 @@ AliasAnalysis::Source AliasAnalysis::getSource(mlir::Value v,
             defOp = v.getDefiningOp();
           }
         })
-        .Case<fir::PackArrayOp>([&](auto op) {
+        .Case([&](fir::PackArrayOp op) {
           // The packed array is not distinguishable from the original
           // array, so skip PackArrayOp and track further through
           // the array operand.
@@ -659,7 +659,7 @@ AliasAnalysis::Source AliasAnalysis::getSource(mlir::Value v,
           defOp = v.getDefiningOp();
           approximateSource = true;
         })
-        .Case<fir::LoadOp>([&](auto op) {
+        .Case([&](fir::LoadOp op) {
           // If load is inside target and it points to mapped item,
           // continue tracking.
           Operation *loadMemrefOp = op.getMemref().getDefiningOp();
@@ -758,7 +758,7 @@ AliasAnalysis::Source AliasAnalysis::getSource(mlir::Value v,
                   dyn_cast<omp::BlockArgOpenMPOpInterface>(op->getParentOp())) {
             Value ompValArg;
             llvm::TypeSwitch<Operation *>(op->getParentOp())
-                .template Case<omp::TargetOp>([&](auto targetOp) {
+                .Case([&](omp::TargetOp targetOp) {
                   // If declare operation is inside omp target region,
                   // continue alias analysis outside the target region
                   for (auto [opArg, blockArg] : llvm::zip_equal(
@@ -838,7 +838,7 @@ AliasAnalysis::Source AliasAnalysis::getSource(mlir::Value v,
           v = op.getMemref();
           defOp = v.getDefiningOp();
         })
-        .Case<fir::FortranObjectViewOpInterface>([&](auto op) {
+        .Case([&](fir::FortranObjectViewOpInterface op) {
           // This case must be located after the cases for concrete
           // operations that support FortraObjectViewOpInterface,
           // so that their special handling kicks in.
diff --git a/flang/lib/Optimizer/Builder/HLFIRTools.cpp b/flang/lib/Optimizer/Builder/HLFIRTools.cpp
index d428c76ac9523..65fffc96395f7 100644
--- a/flang/lib/Optimizer/Builder/HLFIRTools.cpp
+++ b/flang/lib/Optimizer/Builder/HLFIRTools.cpp
@@ -1783,9 +1783,10 @@ bool hlfir::isSimplyContiguous(mlir::Value base, bool checkWhole) {
     return false;
 
   return mlir::TypeSwitch<mlir::Operation *, bool>(def)
-      .Case<fir::EmboxOp>(
-          [&](auto op) { return fir::isContiguousEmbox(op, checkWhole); })
-      .Case<fir::ReboxOp>([&](auto op) {
+      .Case([&](fir::EmboxOp op) {
+        return fir::isContiguousEmbox(op, checkWhole);
+      })
+      .Case([&](fir::ReboxOp op) {
         hlfir::Entity box{op.getBox()};
         return fir::reboxPreservesContinuity(
                    op, box.mayHaveNonDefaultLowerBounds(), checkWhole) &&
@@ -1794,7 +1795,7 @@ bool hlfir::isSimplyContiguous(mlir::Value base, bool checkWhole) {
       .Case<fir::DeclareOp, hlfir::DeclareOp>([&](auto op) {
         return isSimplyContiguous(op.getMemref(), checkWhole);
       })
-      .Case<fir::ConvertOp>(
-          [&](auto op) { return isSimplyContiguous(op.getValue()); })
+      .Case(
+          [&](fir::ConvertOp op) { return isSimplyContiguous(op.getValue()); })
       .Default([](auto &&) { return false; });
 }
diff --git a/flang/lib/Optimizer/CodeGen/Target.cpp b/flang/lib/Optimizer/CodeGen/Target.cpp
index b60a72e4340b9..9b6c9be79120c 100644
--- a/flang/lib/Optimizer/CodeGen/Target.cpp
+++ b/flang/lib/Optimizer/CodeGen/Target.cpp
@@ -353,7 +353,7 @@ struct TargetX86_64 : public GenericTarget<TargetX86_64> {
     ArgClass &current = byteOffset < 8 ? Lo : Hi;
     // System V AMD64 ABI 3.2.3. version 1.0
     llvm::TypeSwitch<mlir::Type>(type)
-        .template Case<mlir::IntegerType>([&](mlir::IntegerType intTy) {
+        .Case([&](mlir::IntegerType intTy) {
           if (intTy.getWidth() == 128)
             Hi = Lo = ArgClass::Integer;
           else
@@ -371,7 +371,7 @@ struct TargetX86_64 : public GenericTarget<TargetX86_64> {
             current = ArgClass::SSE;
           }
         })
-        .template Case<mlir::ComplexType>([&](mlir::ComplexType cmplx) {
+        .Case([&](mlir::ComplexType cmplx) {
           const auto *sem = &floatToSemantics(kindMap, cmplx.getElementType());
           if (sem == &llvm::APFloat::x87DoubleExtended()) {
             current = ArgClass::ComplexX87;
@@ -382,23 +382,23 @@ struct TargetX86_64 : public GenericTarget<TargetX86_64> {
                           byteOffset, Lo, Hi);
           }
         })
-        .template Case<fir::LogicalType>([&](fir::LogicalType logical) {
+        .Case([&](fir::LogicalType logical) {
           if (kindMap.getLogicalBitsize(logical.getFKind()) == 128)
             Hi = Lo = ArgClass::Integer;
           else
             current = ArgClass::Integer;
         })
-        .template Case<fir::CharacterType>(
+        .Case(
             [&](fir::CharacterType character) { current = ArgClass::Integer; })
-        .template Case<fir::SequenceType>([&](fir::SequenceType seqTy) {
+        .Case([&](fir::SequenceType seqTy) {
           // Array component.
           classifyArray(loc, seqTy, byteOffset, Lo, Hi);
         })
-        .template Case<fir::RecordType>([&](fir::RecordType recTy) {
+        .Case([&](fir::RecordType recTy) {
           // Component that is a derived type.
           classifyStruct(loc, recTy, byteOffset, Lo, Hi);
         })
-        .template Case<fir::VectorType>([&](fir::VectorType vecTy) {
+        .Case([&](fir::VectorType vecTy) {
           // Previously marshalled SSE eight byte for a previous struct
           // argument.
           auto *sem = fir::isa_real(vecTy.getEleTy())
@@ -939,23 +939,23 @@ struct TargetAArch64 : public GenericTarget<TargetAArch64> {
 
   NRegs usedRegsForType(mlir::Location loc, mlir::Type type) const {
     return llvm::TypeSwitch<mlir::Type, NRegs>(type)
-        .Case<mlir::IntegerType>([&](auto intTy) {
+        .Case([&](mlir::IntegerType intTy) {
           return intTy.getWidth() == 128 ? NRegs{2, false} : NRegs{1, false};
         })
-        .Case<mlir::FloatType>([&](auto) { return NRegs{1, true}; })
-        .Case<mlir::ComplexType>([&](auto) { return NRegs{2, true}; })
-        .Case<fir::LogicalType>([&](auto) { return NRegs{1, false}; })
-        .Case<fir::CharacterType>([&](auto) { return NRegs{1, false}; })
-        .Case<fir::SequenceType>([&](auto ty) {
+        .Case([&](mlir::FloatType) { return NRegs{1, true}; })
+        .Case([&](mlir::ComplexType) { return NRegs{2, true}; })
+        .Case([&](fir::LogicalType) { return NRegs{1, false}; })
+        .Case([&](fir::CharacterType) { return NRegs{1, false}; })
+        .Case([&](fir::SequenceType ty) {
           assert(ty.getShape().size() == 1 &&
                  "invalid array dimensions in BIND(C)");
           NRegs nregs = usedRegsForType(loc, ty.getEleTy());
           nregs.n *= ty.getShape()[0];
           return nregs;
         })
-        .Case<fir::RecordType>(
-            [&](auto ty) { return usedRegsForRecordType(loc, ty); })
-        .Case<fir::VectorType>([&](auto) {
+        .Case(
+            [&](fir::RecordType ty) { return usedRegsForRecordType(loc, ty); })
+        .Case([&](fir::VectorType) {
           TODO(loc, "passing vector argument to C by value is not supported");
           return NRegs{};
         })
@@ -1167,13 +1167,12 @@ struct TargetPPC64le : public GenericTarget<TargetPPC64le> {
   unsigned getElemWidth(mlir::Type ty) const {
     unsigned width{};
     llvm::TypeSwitch<mlir::Type>(ty)
-        .template Case<mlir::ComplexType>([&](mlir::ComplexType cmplx) {
+        .Case([&](mlir::ComplexType cmplx) {
           auto elemType{
               mlir::dyn_cast<mlir::FloatType>(cmplx.getElementType())};
           width = elemType.getWidth();
         })
-        .template Case<mlir::FloatType>(
-            [&](mlir::FloatType real) { width = real.getWidth(); });
+        .Case([&](mlir::FloatType real) { width = real.getWidth(); });
     return width;
   }
 
@@ -1594,15 +1593,15 @@ struct TargetLoongArch64 : public GenericTarget<TargetLoongArch64> {
     llvm::SmallVector<mlir::Type> flatTypes;
 
     llvm::TypeSwitch<mlir::Type>(type)
-        .template Case<mlir::IntegerType>([&](mlir::IntegerType intTy) {
+        .Case([&](mlir::IntegerType intTy) {
           if (intTy.getWidth() != 0)
             flatTypes.push_back(intTy);
         })
-        .template Case<mlir::FloatType>([&](mlir::FloatType floatTy) {
+        .Case([&](mlir::FloatType floatTy) {
           if (floatTy.getWidth() != 0)
             flatTypes.push_back(floatTy);
         })
-        .template Case<mlir::ComplexType>([&](mlir::ComplexType cmplx) {
+        .Case([&](mlir::ComplexType cmplx) {
           const auto *sem = &floatToSemantics(kindMap, cmplx.getElementType());
           if (sem == &llvm::APFloat::IEEEsingle() ||
               sem == &llvm::APFloat::IEEEdouble() ||
@@ -1614,21 +1613,21 @@ struct TargetLoongArch64 : public GenericTarget<TargetLoongArch64> {
                       "IEEEquad) as a structure component for BIND(C), "
                       "VALUE derived type argument and type return");
         })
-        .template Case<fir::LogicalType>([&](fir::LogicalType logicalTy) {
+        .Case([&](fir::LogicalType logicalTy) {
           const unsigned width =
               kindMap.getLogicalBitsize(logicalTy.getFKind());
           if (width != 0)
             flatTypes.push_back(
                 mlir::IntegerType::get(type.getContext(), width));
         })
-        .template Case<fir::CharacterType>([&](fir::CharacterType charTy) {
+        .Case([&](fir::CharacterType charTy) {
           assert(kindMap.getCharacterBitsize(charTy.getFKind()) <= 8 &&
                  "the bit size of characterType as an interoperable type must "
                  "not exceed 8");
           for (unsigned i = 0; i < charTy.getLen(); ++i)
             flatTypes.push_back(mlir::IntegerType::get(type.getContext(), 8));
         })
-        .template Case<fir::SequenceType>([&](fir::SequenceType seqTy) {
+        .Case([&](fir::SequenceType seqTy) {
           if (!seqTy.hasDynamicExtents()) {
             const std::uint64_t numOfEle = seqTy.getConstantArraySize();
             mlir::Type eleTy = seqTy.getEleTy();
@@ -1646,7 +1645,7 @@ struct TargetLoongArch64 : public GenericTarget<TargetLoongArch64> {
                       "component for BIND(C), "
                       "VALUE derived type argument and type return");
         })
-        .template Case<fir::RecordType>([&](fir::RecordType recTy) {
+        .Case([&](fir::RecordType recTy) {
           for (auto &component : recTy.getTypeList()) {
             mlir::Type eleTy = component.second;
             llvm::SmallVector<mlir::Type> subTypeList =
@@ -1655,7 +1654,7 @@ struct TargetLoongArch64 : public GenericTarget<TargetLoongArch64> {
               llvm::copy(subTypeList, std::back_inserter(flatTypes));
           }
         })
-        .template Case<fir::VectorType>([&](fir::VectorType vecTy) {
+        .Case([&](fir::VectorType vecTy) {
           auto sizeAndAlign = fir::getTypeSizeAndAlignmentOrCrash(
               loc, vecTy, getDataLayout(), kindMap);
           if (sizeAndAlign.first == 2 * GRLenInChar)
@@ -1742,7 +1741,7 @@ struct TargetLoongArch64 : public GenericTarget<TargetLoongArch64> {
       return true;
 
     llvm::TypeSwitch<mlir::Type>(type)
-        .template Case<mlir::IntegerType>([&](mlir::IntegerType intTy) {
+        .Case([&](mlir::IntegerType intTy) {
           const unsigned width = intTy.getWidth();
           if (width > 128)
             TODO(loc,
@@ -1754,7 +1753,7 @@ struct TargetLoongArch64 : public GenericTarget<TargetLoongArch64> {
           else if (width <= 2 * GRLen)
             GARsLeft = GARsLeft - 2;
         })
-        .template Case<mlir::FloatType>([&](mlir::FloatType floatTy) {
+        .Case([&](mlir::FloatType floatTy) {
           const unsigned width = floatTy.getWidth();
           if (width > 128)
             TODO(loc, "floatType with width exceeding 128 bits is unsupported");
diff --git a/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp b/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp
index 8ca2869993443..3ef4703fb41d6 100644
--- a/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp
+++ b/flang/lib/Optimizer/CodeGen/TargetRewrite.cpp
@@ -393,12 +393,12 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
     if (fnTy.getResults().size() == 1) {
       mlir::Type ty = fnTy.getResult(0);
       llvm::TypeSwitch<mlir::Type>(ty)
-          .template Case<mlir::ComplexType>([&](mlir::ComplexType cmplx) {
+          .Case([&](mlir::ComplexType cmplx) {
             wrap = rewriteCallComplexResultType(loc, cmplx, newResTys,
                                                 newInTyAndAttrs, newOpers,
                                                 savedStackPtr);
           })
-          .template Case<fir::RecordType>([&](fir::RecordType recTy) {
+          .Case([&](fir::RecordType recTy) {
             wrap = rewriteCallStructResultType(loc, recTy, newResTys,
                                                newInTyAndAttrs, newOpers,
                                                savedStackPtr);
@@ -422,7 +422,7 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
       mlir::Value oper = std::get<1>(e.value());
       unsigned index = e.index();
       llvm::TypeSwitch<mlir::Type>(ty)
-          .template Case<fir::BoxCharType>([&](fir::BoxCharType boxTy) {
+          .Case([&](fir::BoxCharType boxTy) {
             if constexpr (std::is_same_v<std::decay_t<A>, fir::CallOp>) {
               if (noCharacterConversion) {
                 newInTyAndAttrs.push_back(
@@ -456,15 +456,15 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
               }
             }
           })
-          .template Case<mlir::ComplexType>([&](mlir::ComplexType cmplx) {
+          .Case([&](mlir::ComplexType cmplx) {
             rewriteCallComplexInputType(loc, cmplx, oper, newInTyAndAttrs,
                                         newOpers, savedStackPtr);
           })
-          .template Case<fir::RecordType>([&](fir::RecordType recTy) {
+          .Case([&](fir::RecordType recTy) {
             rewriteCallStructInputType(loc, recTy, oper, newInTyAndAttrs,
                                        newOpers, savedStackPtr);
           })
-          .template Case<mlir::TupleType>([&](mlir::TupleType tuple) {
+          .Case([&](mlir::TupleType tuple) {
             if (fir::isCharacterProcedureTuple(tuple)) {
               mlir::ModuleOp module = getModule();
               if constexpr (std::is_same_v<std::decay_t<A>, fir::CallOp>) {
@@ -707,10 +707,10 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
     auto loc = addrOp.getLoc();
     for (mlir::Type ty : addrTy.getResults()) {
       llvm::TypeSwitch<mlir::Type>(ty)
-          .Case<mlir::ComplexType>([&](mlir::ComplexType ty) {
+          .Case([&](mlir::ComplexType ty) {
             lowerComplexSignatureRes(loc, ty, newResTys, newInTyAndAttrs);
           })
-          .Case<fir::RecordType>([&](fir::RecordType ty) {
+          .Case([&](fir::RecordType ty) {
             lowerStructSignatureRes(loc, ty, newResTys, newInTyAndAttrs);
           })
           .Default([&](mlir::Type ty) { newResTys.push_back(ty); });
@@ -718,7 +718,7 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
     llvm::SmallVector<mlir::Type> trailingInTys;
     for (mlir::Type ty : addrTy.getInputs()) {
       llvm::TypeSwitch<mlir::Type>(ty)
-          .Case<fir::BoxCharType>([&](auto box) {
+          .Case([&](fir::BoxCharType box) {
             if (noCharacterConversion) {
               newInTyAndAttrs.push_back(
                   fir::CodeGenSpecifics::getTypeAndAttr(box));
@@ -733,10 +733,10 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
               }
             }
           })
-          .Case<mlir::ComplexType>([&](mlir::ComplexType ty) {
+          .Case([&](mlir::ComplexType ty) {
             lowerComplexSignatureArg(loc, ty, newInTyAndAttrs);
           })
-          .Case<mlir::TupleType>([&](mlir::TupleType tuple) {
+          .Case([&](mlir::TupleType tuple) {
             if (fir::isCharacterProcedureTuple(tuple)) {
               newInTyAndAttrs.push_back(
                   fir::CodeGenSpecifics::getTypeAndAttr(tuple.getType(0)));
@@ -746,7 +746,7 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
                   fir::CodeGenSpecifics::getTypeAndAttr(ty));
             }
           })
-          .template Case<fir::RecordType>([&](fir::RecordType recTy) {
+          .Case([&](fir::RecordType recTy) {
             lowerStructSignatureArg(loc, recTy, newInTyAndAttrs);
           })
           .Default([&](mlir::Type ty) {
@@ -888,13 +888,13 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
     // Convert return value(s)
     for (auto ty : funcTy.getResults())
       llvm::TypeSwitch<mlir::Type>(ty)
-          .template Case<mlir::ComplexType>([&](mlir::ComplexType cmplx) {
+          .Case([&](mlir::ComplexType cmplx) {
             if (noComplexConversion)
               newResTys.push_back(cmplx);
             else
               doComplexReturn(func, cmplx, newResTys, newInTyAndAttrs, fixups);
           })
-          .template Case<mlir::IntegerType>([&](mlir::IntegerType intTy) {
+          .Case([&](mlir::IntegerType intTy) {
             auto m = specifics->integerArgumentType(func.getLoc(), intTy);
             assert(m.size() == 1);
             auto attr = std::get<fir::CodeGenSpecifics::Attributes>(m[0]);
@@ -908,7 +908,7 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
                                                 rewriter->getUnitAttr()));
             newResTys.push_back(retTy);
           })
-          .template Case<fir::RecordType>([&](fir::RecordType recTy) {
+          .Case([&](fir::RecordType recTy) {
             doStructReturn(func, recTy, newResTys, newInTyAndAttrs, fixups);
           })
           .Default([&](mlir::Type ty) { newResTys.push_back(ty); });
@@ -923,7 +923,7 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
       auto ty = e.value();
       unsigned index = e.index();
       llvm::TypeSwitch<mlir::Type>(ty)
-          .template Case<fir::BoxCharType>([&](fir::BoxCharType boxTy) {
+          .Case([&](fir::BoxCharType boxTy) {
             if (noCharacterConversion) {
               newInTyAndAttrs.push_back(
                   fir::CodeGenSpecifics::getTypeAndAttr(boxTy));
@@ -946,10 +946,10 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
               }
             }
           })
-          .template Case<mlir::ComplexType>([&](mlir::ComplexType cmplx) {
+          .Case([&](mlir::ComplexType cmplx) {
             doComplexArg(func, cmplx, newInTyAndAttrs, fixups);
           })
-          .template Case<mlir::TupleType>([&](mlir::TupleType tuple) {
+          .Case([&](mlir::TupleType tuple) {
             if (fir::isCharacterProcedureTuple(tuple)) {
               fixups.emplace_back(FixupTy::Codes::TrailingCharProc,
                                   newInTyAndAttrs.size(), trailingTys.size());
@@ -961,7 +961,7 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
                   fir::CodeGenSpecifics::getTypeAndAttr(ty));
             }
           })
-          .template Case<mlir::IntegerType>([&](mlir::IntegerType intTy) {
+          .Case([&](mlir::IntegerType intTy) {
             auto m = specifics->integerArgumentType(func.getLoc(), intTy);
             assert(m.size() == 1);
             auto attr = std::get<fir::CodeGenSpecifics::Attributes>(m[0]);
@@ -978,7 +978,7 @@ class TargetRewrite : public fir::impl::TargetRewritePassBase<TargetRewrite> {
 
             newInTyAndAttrs.push_back(m[0]);
           })
-          .template Case<fir::RecordType>([&](fir::RecordType recTy) {
+          .Case([&](fir::RecordType recTy) {
             doStructArg(func, recTy, newInTyAndAttrs, fixups);
           })
           .Default([&](mlir::Type ty) {
diff --git a/flang/lib/Optimizer/Dialect/FIROps.cpp b/flang/lib/Optimizer/Dialect/FIROps.cpp
index 38bb4aa102eeb..88782dad07419 100644
--- a/flang/lib/Optimizer/Dialect/FIROps.cpp
+++ b/flang/lib/Optimizer/Dialect/FIROps.cpp
@@ -1117,17 +1117,16 @@ void fir::BoxAddrOp::build(mlir::OpBuilder &builder,
                            mlir::OperationState &result, mlir::Value val) {
   mlir::Type type =
       llvm::TypeSwitch<mlir::Type, mlir::Type>(val.getType())
-          .Case<fir::BaseBoxType>([&](fir::BaseBoxType ty) -> mlir::Type {
+          .Case([&](fir::BaseBoxType ty) -> mlir::Type {
             mlir::Type eleTy = ty.getEleTy();
             if (fir::isa_ref_type(eleTy))
               return eleTy;
             return fir::ReferenceType::get(eleTy);
           })
-          .Case<fir::BoxCharType>([&](fir::BoxCharType ty) -> mlir::Type {
+          .Case([&](fir::BoxCharType ty) -> mlir::Type {
             return fir::ReferenceType::get(ty.getEleTy());
           })
-          .Case<fir::BoxProcType>(
-              [&](fir::BoxProcType ty) { return ty.getEleTy(); })
+          .Case([&](fir::BoxProcType ty) { return ty.getEleTy(); })
           .Default([&](const auto &) { return mlir::Type{}; });
   assert(type && "bad val type");
   build(builder, result, type, val);
@@ -1727,11 +1726,11 @@ void fir::CoordinateOp::build(mlir::OpBuilder &builder,
   bool anyField = false;
   for (fir::IntOrValue index : coor) {
     llvm::TypeSwitch<fir::IntOrValue>(index)
-        .Case<mlir::IntegerAttr>([&](mlir::IntegerAttr intAttr) {
+        .Case([&](mlir::IntegerAttr intAttr) {
           fieldIndices.push_back(intAttr.getInt());
           anyField = true;
         })
-        .Case<mlir::Value>([&](mlir::Value value) {
+        .Case([&](mlir::Value value) {
           dynamicIndices.push_back(value);
           fieldIndices.push_back(fir::CoordinateOp::kDynamicIndex);
         });
@@ -1754,7 +1753,7 @@ void fir::CoordinateOp::print(mlir::OpAsmPrinter &p) {
     for (auto index : getIndices()) {
       p << ", ";
       llvm::TypeSwitch<fir::IntOrValue>(index)
-          .Case<mlir::IntegerAttr>([&](mlir::IntegerAttr intAttr) {
+          .Case([&](mlir::IntegerAttr intAttr) {
             if (auto recordType = llvm::dyn_cast<fir::RecordType>(eleTy)) {
               int fieldId = intAttr.getInt();
               if (fieldId < static_cast<int>(recordType.getNumFields())) {
@@ -1769,7 +1768,7 @@ void fir::CoordinateOp::print(mlir::OpAsmPrinter &p) {
             // investigated.
             p << intAttr;
           })
-          .Case<mlir::Value>([&](mlir::Value value) { p << value; });
+          .Case([&](mlir::Value value) { p << value; });
     }
   }
   p.printOptionalAttrDict(
@@ -5178,7 +5177,7 @@ bool fir::isDummyArgument(mlir::Value v) {
 mlir::Type fir::applyPathToType(mlir::Type eleTy, mlir::ValueRange path) {
   for (auto i = path.begin(), end = path.end(); eleTy && i < end;) {
     eleTy = llvm::TypeSwitch<mlir::Type, mlir::Type>(eleTy)
-                .Case<fir::RecordType>([&](fir::RecordType ty) {
+                .Case([&](fir::RecordType ty) {
                   if (auto *op = (*i++).getDefiningOp()) {
                     if (auto off = mlir::dyn_cast<fir::FieldIndexOp>(op))
                       return ty.getType(off.getFieldName());
@@ -5187,7 +5186,7 @@ mlir::Type fir::applyPathToType(mlir::Type eleTy, mlir::ValueRange path) {
                   }
                   return mlir::Type{};
                 })
-                .Case<fir::SequenceType>([&](fir::SequenceType ty) {
+                .Case([&](fir::SequenceType ty) {
                   bool valid = true;
                   const auto rank = ty.getDimension();
                   for (std::remove_const_t<decltype(rank)> ii = 0;
@@ -5195,13 +5194,13 @@ mlir::Type fir::applyPathToType(mlir::Type eleTy, mlir::ValueRange path) {
                     valid = i < end && fir::isa_integer((*i++).getType());
                   return valid ? ty.getEleTy() : mlir::Type{};
                 })
-                .Case<mlir::TupleType>([&](mlir::TupleType ty) {
+                .Case([&](mlir::TupleType ty) {
                   if (auto *op = (*i++).getDefiningOp())
                     if (auto off = mlir::dyn_cast<mlir::arith::ConstantOp>(op))
                       return ty.getType(fir::toInt(off));
                   return mlir::Type{};
                 })
-                .Case<mlir::ComplexType>([&](mlir::ComplexType ty) {
+                .Case([&](mlir::ComplexType ty) {
                   if (fir::isa_integer((*i++).getType()))
                     return ty.getElementType();
                   return mlir::Type{};
diff --git a/flang/lib/Optimizer/Dialect/FIRType.cpp b/flang/lib/Optimizer/Dialect/FIRType.cpp
index fe35b085405b1..d84846843db81 100644
--- a/flang/lib/Optimizer/Dialect/FIRType.cpp
+++ b/flang/lib/Optimizer/Dialect/FIRType.cpp
@@ -226,8 +226,7 @@ mlir::Type getDerivedType(mlir::Type ty) {
           return seq.getEleTy();
         return p.getEleTy();
       })
-      .Case<fir::BaseBoxType>(
-          [](auto p) { return getDerivedType(p.getEleTy()); })
+      .Case([](fir::BaseBoxType p) { return getDerivedType(p.getEleTy()); })
       .Default([](mlir::Type t) { return t; });
 }
 
@@ -423,7 +422,7 @@ mlir::Type unwrapInnerType(mlir::Type ty) {
           return seqTy.getEleTy();
         return eleTy;
       })
-      .Case<fir::RecordType>([](auto t) { return t; })
+      .Case([](fir::RecordType t) { return t; })
       .Default([](mlir::Type) { return mlir::Type{}; });
 }
 
@@ -685,7 +684,7 @@ std::string getTypeAsString(mlir::Type ty, const fir::KindMapping &kindMap,
 mlir::Type changeElementType(mlir::Type type, mlir::Type newElementType,
                              bool turnBoxIntoClass) {
   return llvm::TypeSwitch<mlir::Type, mlir::Type>(type)
-      .Case<fir::SequenceType>([&](fir::SequenceType seqTy) -> mlir::Type {
+      .Case([&](fir::SequenceType seqTy) -> mlir::Type {
         return fir::SequenceType::get(seqTy.getShape(), newElementType);
       })
       .Case<fir::ReferenceType, fir::ClassType>([&](auto t) -> mlir::Type {
@@ -699,7 +698,7 @@ mlir::Type changeElementType(mlir::Type type, mlir::Type newElementType,
         return FIRT::get(
             changeElementType(t.getEleTy(), newElementType, turnBoxIntoClass));
       })
-      .Case<fir::BoxType>([&](fir::BoxType t) -> mlir::Type {
+      .Case([&](fir::BoxType t) -> mlir::Type {
         mlir::Type newInnerType =
             changeElementType(t.getEleTy(), newElementType, false);
         if (turnBoxIntoClass)
@@ -1438,7 +1437,7 @@ static mlir::Type
 changeTypeShape(mlir::Type type,
                 std::optional<fir::SequenceType::ShapeRef> newShape) {
   return llvm::TypeSwitch<mlir::Type, mlir::Type>(type)
-      .Case<fir::SequenceType>([&](fir::SequenceType seqTy) -> mlir::Type {
+      .Case([&](fir::SequenceType seqTy) -> mlir::Type {
         if (newShape)
           return fir::SequenceType::get(*newShape, seqTy.getEleTy());
         return seqTy.getEleTy();
@@ -1498,10 +1497,10 @@ fir::BaseBoxType fir::BaseBoxType::getBoxTypeWithNewAttr(
     break;
   }
   return llvm::TypeSwitch<fir::BaseBoxType, fir::BaseBoxType>(*this)
-      .Case<fir::BoxType>([baseType](auto b) {
+      .Case([baseType](fir::BoxType b) {
         return fir::BoxType::get(baseType, b.isVolatile());
       })
-      .Case<fir::ClassType>([baseType](auto b) {
+      .Case([baseType](fir::ClassType b) {
         return fir::ClassType::get(baseType, b.isVolatile());
       });
 }
diff --git a/flang/lib/Optimizer/HLFIR/IR/HLFIRDialect.cpp b/flang/lib/Optimizer/HLFIR/IR/HLFIRDialect.cpp
index 1b1abef69d5ce..e0fee2f4ab3db 100644
--- a/flang/lib/Optimizer/HLFIR/IR/HLFIRDialect.cpp
+++ b/flang/lib/Optimizer/HLFIR/IR/HLFIRDialect.cpp
@@ -87,8 +87,8 @@ bool hlfir::isFortranVariableType(mlir::Type type) {
         return mlir::isa<fir::BaseBoxType>(eleType) ||
                !fir::hasDynamicSize(eleType);
       })
-      .Case<fir::BaseBoxType, fir::BoxCharType>([](auto) { return true; })
-      .Case<fir::VectorType>([](auto) { return true; })
+      .Case<fir::BaseBoxType, fir::BoxCharType>([](mlir::Type) { return true; })
+      .Case([](fir::VectorType) { return true; })
       .Default([](mlir::Type) { return false; });
 }
 
diff --git a/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp b/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp
index 7619a21fc0477..922985152a905 100644
--- a/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp
+++ b/flang/lib/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.cpp
@@ -377,7 +377,7 @@ getBaseRef(mlir::TypedValue<mlir::acc::PointerLikeType> varPtr) {
   // calculation op.
   mlir::Value baseRef =
       llvm::TypeSwitch<mlir::Operation *, mlir::Value>(op)
-          .Case<fir::DeclareOp>([&](auto op) {
+          .Case([&](fir::DeclareOp op) {
             // If this declare binds a view with an underlying storage operand,
             // treat that storage as the base reference. Otherwise, fall back
             // to the declared memref.
@@ -385,7 +385,7 @@ getBaseRef(mlir::TypedValue<mlir::acc::PointerLikeType> varPtr) {
               return storage;
             return mlir::Value(varPtr);
           })
-          .Case<hlfir::DesignateOp>([&](auto op) {
+          .Case([&](hlfir::DesignateOp op) {
             // Get the base object.
             return op.getMemref();
           })
@@ -393,12 +393,12 @@ getBaseRef(mlir::TypedValue<mlir::acc::PointerLikeType> varPtr) {
             // Get the base array on which the coordinate is being applied.
             return op.getMemref();
           })
-          .Case<fir::CoordinateOp>([&](auto op) {
+          .Case([&](fir::CoordinateOp op) {
             // For coordinate operation which is applied on derived type
             // object, get the base object.
             return op.getRef();
           })
-          .Case<fir::ConvertOp>([&](auto op) -> mlir::Value {
+          .Case([&](fir::ConvertOp op) -> mlir::Value {
             // Strip the conversion and recursively check the operand
             if (auto ptrLikeOperand = mlir::dyn_cast_if_present<
                     mlir::TypedValue<mlir::acc::PointerLikeType>>(
diff --git a/flang/lib/Optimizer/OpenACC/Support/FIROpenACCUtils.cpp b/flang/lib/Optimizer/OpenACC/Support/FIROpenACCUtils.cpp
index 5199271da3a2a..d66a9702ec4d4 100644
--- a/flang/lib/Optimizer/OpenACC/Support/FIROpenACCUtils.cpp
+++ b/flang/lib/Optimizer/OpenACC/Support/FIROpenACCUtils.cpp
@@ -55,33 +55,32 @@ std::string fir::acc::getVariableName(Value v, bool preferDemangledName) {
   while (v && (defOp = v.getDefiningOp()) && iterate) {
     iterate =
         llvm::TypeSwitch<mlir::Operation *, bool>(defOp)
-            .Case<mlir::ViewLikeOpInterface>(
-                [&v](mlir::ViewLikeOpInterface op) {
-                  v = op.getViewSource();
-                  return true;
-                })
-            .Case<fir::ReboxOp>([&v](fir::ReboxOp op) {
+            .Case([&v](mlir::ViewLikeOpInterface op) {
+              v = op.getViewSource();
+              return true;
+            })
+            .Case([&v](fir::ReboxOp op) {
               v = op.getBox();
               return true;
             })
-            .Case<fir::EmboxOp>([&v](fir::EmboxOp op) {
+            .Case([&v](fir::EmboxOp op) {
               v = op.getMemref();
               return true;
             })
-            .Case<fir::ConvertOp>([&v](fir::ConvertOp op) {
+            .Case([&v](fir::ConvertOp op) {
               v = op.getValue();
               return true;
             })
-            .Case<fir::LoadOp>([&v](fir::LoadOp op) {
+            .Case([&v](fir::LoadOp op) {
               v = op.getMemref();
               return true;
             })
-            .Case<fir::BoxAddrOp>([&v](fir::BoxAddrOp op) {
+            .Case([&v](fir::BoxAddrOp op) {
               // The box holds the name of the variable.
               v = op.getVal();
               return true;
             })
-            .Case<fir::AddrOfOp>([&](fir::AddrOfOp op) {
+            .Case([&](fir::AddrOfOp op) {
               // Only use address_of symbol if mangled name is preferred
               if (!preferDemangledName) {
                 auto symRef = op.getSymbol();
@@ -89,7 +88,7 @@ std::string fir::acc::getVariableName(Value v, bool preferDemangledName) {
               }
               return false;
             })
-            .Case<fir::ArrayCoorOp>([&](fir::ArrayCoorOp op) {
+            .Case([&](fir::ArrayCoorOp op) {
               v = op.getMemref();
               for (auto coor : op.getIndices()) {
                 auto idxName = getVariableName(coor, preferDemangledName);
@@ -97,7 +96,7 @@ std::string fir::acc::getVariableName(Value v, bool preferDemangledName) {
               }
               return true;
             })
-            .Case<fir::CoordinateOp>([&](fir::CoordinateOp op) {
+            .Case([&](fir::CoordinateOp op) {
               std::optional<llvm::ArrayRef<int32_t>> fieldIndices =
                   op.getFieldIndices();
               if (fieldIndices && fieldIndices->size() > 0 &&
@@ -117,7 +116,7 @@ std::string fir::acc::getVariableName(Value v, bool preferDemangledName) {
               }
               return false;
             })
-            .Case<hlfir::DesignateOp>([&](hlfir::DesignateOp op) {
+            .Case([&](hlfir::DesignateOp op) {
               if (op.getComponent()) {
                 srcName = op.getComponent().value().str();
                 prefix =
@@ -135,7 +134,7 @@ std::string fir::acc::getVariableName(Value v, bool preferDemangledName) {
               srcName = op.getUniqName().str();
               return false;
             })
-            .Case<fir::AllocaOp>([&](fir::AllocaOp op) {
+            .Case([&](fir::AllocaOp op) {
               if (preferDemangledName) {
                 // Prefer demangled name (bindc_name over uniq_name)
                 srcName = op.getBindcName()  ? *op.getBindcName()
diff --git a/flang/lib/Optimizer/OpenMP/LowerNontemporal.cpp b/flang/lib/Optimizer/OpenMP/LowerNontemporal.cpp
index 5aa1273a1be36..be0bdb77fdca8 100644
--- a/flang/lib/Optimizer/OpenMP/LowerNontemporal.cpp
+++ b/flang/lib/Optimizer/OpenMP/LowerNontemporal.cpp
@@ -41,7 +41,7 @@ class LowerNontemporalPass
                   operand = op.getMemref();
                   defOp = operand.getDefiningOp();
                 })
-            .Case<fir::BoxAddrOp>([&](auto op) {
+            .Case([&](fir::BoxAddrOp op) {
               operand = op.getVal();
               defOp = operand.getDefiningOp();
             })



More information about the flang-commits mailing list