This revision was automatically updated to reflect the committed changes. Closed by commit rG89878e8c966a: [clang-format] Find main include after block ended with #pragma hdrstop (authored by rjelonek, committed by curdeius).
Changed prior to commit: https://reviews.llvm.org/D94217?vs=315509&id=315719#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D94217/new/ https://reviews.llvm.org/D94217 Files: clang/lib/Format/Format.cpp clang/unittests/Format/SortIncludesTest.cpp Index: clang/unittests/Format/SortIncludesTest.cpp =================================================================== --- clang/unittests/Format/SortIncludesTest.cpp +++ clang/unittests/Format/SortIncludesTest.cpp @@ -900,6 +900,45 @@ "#include \"a.h\"")); } +TEST_F(SortIncludesTest, DoNotTreatPrecompiledHeadersAsFirstBlock) { + Style.IncludeBlocks = Style.IBS_Merge; + std::string Code = "#include \"d.h\"\r\n" + "#include \"b.h\"\r\n" + "#pragma hdrstop\r\n" + "\r\n" + "#include \"c.h\"\r\n" + "#include \"a.h\"\r\n" + "#include \"e.h\"\r\n"; + + std::string Expected = "#include \"b.h\"\r\n" + "#include \"d.h\"\r\n" + "#pragma hdrstop\r\n" + "\r\n" + "#include \"e.h\"\r\n" + "#include \"a.h\"\r\n" + "#include \"c.h\"\r\n"; + + EXPECT_EQ(Expected, sort(Code, "e.cpp", 2)); + + Code = "#include \"d.h\"\n" + "#include \"b.h\"\n" + "#pragma hdrstop( \"c:\\projects\\include\\myinc.pch\" )\n" + "\n" + "#include \"c.h\"\n" + "#include \"a.h\"\n" + "#include \"e.h\"\n"; + + Expected = "#include \"b.h\"\n" + "#include \"d.h\"\n" + "#pragma hdrstop(\"c:\\projects\\include\\myinc.pch\")\n" + "\n" + "#include \"e.h\"\n" + "#include \"a.h\"\n" + "#include \"c.h\"\n"; + + EXPECT_EQ(Expected, sort(Code, "e.cpp", 2)); +} + TEST_F(SortIncludesTest, skipUTF8ByteOrderMarkMerge) { Style.IncludeBlocks = Style.IBS_Merge; std::string Code = "\xEF\xBB\xBF#include \"d.h\"\r\n" Index: clang/lib/Format/Format.cpp =================================================================== --- clang/lib/Format/Format.cpp +++ clang/lib/Format/Format.cpp @@ -2308,7 +2308,10 @@ sortCppIncludes(Style, IncludesInBlock, Ranges, FileName, Code, Replaces, Cursor); IncludesInBlock.clear(); - FirstIncludeBlock = false; + if (Trimmed.startswith("#pragma hdrstop")) // Precompiled headers. + FirstIncludeBlock = true; + else + FirstIncludeBlock = false; } } if (Pos == StringRef::npos || Pos + 1 == Code.size())
Index: clang/unittests/Format/SortIncludesTest.cpp =================================================================== --- clang/unittests/Format/SortIncludesTest.cpp +++ clang/unittests/Format/SortIncludesTest.cpp @@ -900,6 +900,45 @@ "#include \"a.h\"")); } +TEST_F(SortIncludesTest, DoNotTreatPrecompiledHeadersAsFirstBlock) { + Style.IncludeBlocks = Style.IBS_Merge; + std::string Code = "#include \"d.h\"\r\n" + "#include \"b.h\"\r\n" + "#pragma hdrstop\r\n" + "\r\n" + "#include \"c.h\"\r\n" + "#include \"a.h\"\r\n" + "#include \"e.h\"\r\n"; + + std::string Expected = "#include \"b.h\"\r\n" + "#include \"d.h\"\r\n" + "#pragma hdrstop\r\n" + "\r\n" + "#include \"e.h\"\r\n" + "#include \"a.h\"\r\n" + "#include \"c.h\"\r\n"; + + EXPECT_EQ(Expected, sort(Code, "e.cpp", 2)); + + Code = "#include \"d.h\"\n" + "#include \"b.h\"\n" + "#pragma hdrstop( \"c:\\projects\\include\\myinc.pch\" )\n" + "\n" + "#include \"c.h\"\n" + "#include \"a.h\"\n" + "#include \"e.h\"\n"; + + Expected = "#include \"b.h\"\n" + "#include \"d.h\"\n" + "#pragma hdrstop(\"c:\\projects\\include\\myinc.pch\")\n" + "\n" + "#include \"e.h\"\n" + "#include \"a.h\"\n" + "#include \"c.h\"\n"; + + EXPECT_EQ(Expected, sort(Code, "e.cpp", 2)); +} + TEST_F(SortIncludesTest, skipUTF8ByteOrderMarkMerge) { Style.IncludeBlocks = Style.IBS_Merge; std::string Code = "\xEF\xBB\xBF#include \"d.h\"\r\n" Index: clang/lib/Format/Format.cpp =================================================================== --- clang/lib/Format/Format.cpp +++ clang/lib/Format/Format.cpp @@ -2308,7 +2308,10 @@ sortCppIncludes(Style, IncludesInBlock, Ranges, FileName, Code, Replaces, Cursor); IncludesInBlock.clear(); - FirstIncludeBlock = false; + if (Trimmed.startswith("#pragma hdrstop")) // Precompiled headers. + FirstIncludeBlock = true; + else + FirstIncludeBlock = false; } } if (Pos == StringRef::npos || Pos + 1 == Code.size())
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits