diff --git a/clang/lib/Format/NamespaceEndCommentsFixer.cpp b/clang/lib/Format/NamespaceEndCommentsFixer.cpp index 951a9825805197..0c34c6126c2142 100644 --- a/clang/lib/Format/NamespaceEndCommentsFixer.cpp +++ b/clang/lib/Format/NamespaceEndCommentsFixer.cpp @@ -261,7 +261,8 @@ std::pair NamespaceEndCommentsFixer::analyze( updateEndComment(EndCommentPrevTok, std::string(), SourceMgr, &Fixes); } ++CompactedNamespacesCount; - AllNamespaceNames = "::" + NamespaceName + AllNamespaceNames; + if (!NamespaceName.empty()) + AllNamespaceNames = "::" + NamespaceName + AllNamespaceNames; continue; } NamespaceName += AllNamespaceNames; diff --git a/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp b/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp index 3afe35e7ea34fc..925b0e3b2e4c91 100644 --- a/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp +++ b/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp @@ -256,6 +256,15 @@ TEST_F(NamespaceEndCommentsFixerTest, AddsEndComment) { "int j;\n" "};}", CompactNamespacesStyle)); + EXPECT_EQ("namespace out { namespace {\n" + "int i;\n" + "int j;\n" + "}}// namespace out", + fixNamespaceEndComments("namespace out { namespace {\n" + "int i;\n" + "int j;\n" + "}}", + CompactNamespacesStyle)); // Adds an end comment after a semicolon. EXPECT_EQ("namespace {\n" @@ -609,6 +618,11 @@ TEST_F(NamespaceEndCommentsFixerTest, UpdatesInvalidEndLineComment) { "}// banamespace in\n" "} // namespace out", CompactNamespacesStyle)); + EXPECT_EQ("namespace out { namespace {\n" + "}} // namespace out", + fixNamespaceEndComments("namespace out { namespace {\n" + "}} // namespace out::", + CompactNamespacesStyle)); } TEST_F(NamespaceEndCommentsFixerTest, UpdatesInvalidMacroEndLineComment) {