From f60366418f53024b4f94644ec05455187f5c8afa Mon Sep 17 00:00:00 2001 From: Rahul Joshi Date: Sat, 4 Oct 2025 07:30:01 -0700 Subject: [PATCH 1/2] [NFC][TableGen] Use C++17 nested namespace definitions Change NamespaceEmitter to emit nested namespace using C++17 nested namespace definitions. --- llvm/include/llvm/TableGen/CodeGenHelpers.h | 23 +++++++++++---------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/llvm/include/llvm/TableGen/CodeGenHelpers.h b/llvm/include/llvm/TableGen/CodeGenHelpers.h index 7dca6a051ba75..f9629236b9dfd 100644 --- a/llvm/include/llvm/TableGen/CodeGenHelpers.h +++ b/llvm/include/llvm/TableGen/CodeGenHelpers.h @@ -38,28 +38,29 @@ class IfDefEmitter { // namespace (empty for anonymous namespace) or nested namespace. class NamespaceEmitter { public: - NamespaceEmitter(raw_ostream &OS, StringRef Name) : OS(OS) { - emitNamespaceStarts(Name); + NamespaceEmitter(raw_ostream &OS, StringRef Name) + : Name(trim(Name).str()), OS(OS) { + OS << "namespace " << this->Name << " {\n"; } ~NamespaceEmitter() { close(); } // Explicit function to close the namespace scopes. void close() { - for (StringRef NS : llvm::reverse(Namespaces)) - OS << "} // namespace " << NS << "\n"; - Namespaces.clear(); + if (!Closed) + OS << "} // namespace " << Name << "\n"; + Closed = true; } private: - void emitNamespaceStarts(StringRef Name) { - llvm::SplitString(Name, Namespaces, "::"); - for (StringRef NS : Namespaces) - OS << "namespace " << NS << " {\n"; + // Trim "::" prefix. + static StringRef trim(StringRef Name) { + Name.consume_front("::"); + return Name; } - - SmallVector Namespaces; + std::string Name; raw_ostream &OS; + bool Closed = false; }; } // end namespace llvm From 2e0a119ffa7f93717065e2a2ee1d046b21e18336 Mon Sep 17 00:00:00 2001 From: Rahul Joshi Date: Mon, 6 Oct 2025 08:18:50 -0700 Subject: [PATCH 2/2] Adopt a lit test --- mlir/test/mlir-tblgen/dialect.td | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mlir/test/mlir-tblgen/dialect.td b/mlir/test/mlir-tblgen/dialect.td index f35ce345a90a8..9b454959a1da9 100644 --- a/mlir/test/mlir-tblgen/dialect.td +++ b/mlir/test/mlir-tblgen/dialect.td @@ -62,9 +62,14 @@ def E_SpecialNSOp : Op { // DEF: ::E::SPECIAL_NS::SpecialNSOp definitions // DECL-LABEL: GET_OP_CLASSES +// DECL: namespace a { // DECL: a::SomeOp declarations +// DECL: namespace BNS { // DECL: BNS::SomeOp declarations +// DECL: namespace C::CC { // DECL: ::C::CC::SomeOp declarations // DECL: DSomeOp declarations +// DECL: namespace ENS { // DECL: ENS::SomeOp declarations +// DECL: namespace E::SPECIAL_NS { // DECL: ::E::SPECIAL_NS::SpecialNSOp declarations