diff --git a/clang/lib/Format/NamespaceEndCommentsFixer.cpp b/clang/lib/Format/NamespaceEndCommentsFixer.cpp --- a/clang/lib/Format/NamespaceEndCommentsFixer.cpp +++ b/clang/lib/Format/NamespaceEndCommentsFixer.cpp @@ -261,7 +261,8 @@ 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 --- a/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp +++ b/clang/unittests/Format/NamespaceEndCommentsFixerTest.cpp @@ -256,6 +256,15 @@ "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 @@ "}// 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) {