Author: Haojian Wu Date: 2020-10-01T19:57:57+02:00 New Revision: c1b209cc61290f1ce1243470b825e0994645cb7d
URL: https://github.com/llvm/llvm-project/commit/c1b209cc61290f1ce1243470b825e0994645cb7d DIFF: https://github.com/llvm/llvm-project/commit/c1b209cc61290f1ce1243470b825e0994645cb7d.diff LOG: [Format] Don't treat compound extension headers (foo.proto.h) as foo.cc main-file header. We receive internal bugs about this false positives after D86597. Differential Revision: https://reviews.llvm.org/D88640. Added: Modified: clang/lib/Tooling/Inclusions/HeaderIncludes.cpp clang/unittests/Format/SortIncludesTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp b/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp index e0368975ea3e..0cc4afa4ade6 100644 --- a/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp +++ b/clang/lib/Tooling/Inclusions/HeaderIncludes.cpp @@ -233,7 +233,12 @@ int IncludeCategoryManager::getSortIncludePriority(StringRef IncludeName, bool IncludeCategoryManager::isMainHeader(StringRef IncludeName) const { if (!IncludeName.startswith("\"")) return false; - StringRef HeaderStem = matchingStem(IncludeName.drop_front(1).drop_back(1)); + + // Not matchingStem: implementation files may have compound extensions but + // headers may not. + StringRef HeaderStem = + llvm::sys::path::stem(IncludeName.drop_front(1).drop_back( + 1) /* remove the surrounding "" or <> */); if (FileStem.startswith(HeaderStem) || FileStem.startswith_lower(HeaderStem)) { llvm::Regex MainIncludeRegex(HeaderStem.str() + Style.IncludeIsMainRegex, diff --git a/clang/unittests/Format/SortIncludesTest.cpp b/clang/unittests/Format/SortIncludesTest.cpp index db3ed65d443b..c327be5e6b0b 100644 --- a/clang/unittests/Format/SortIncludesTest.cpp +++ b/clang/unittests/Format/SortIncludesTest.cpp @@ -151,6 +151,16 @@ TEST_F(SortIncludesTest, NoReplacementsForValidIncludes) { EXPECT_TRUE(sortIncludes(FmtStyle, Code, GetCodeRange(Code), "a.cc").empty()); } +TEST_F(SortIncludesTest, NoMainFileHeader) { + std::string Code = "#include <string>\n" + "\n" + "#include \"a/extra_action.proto.h\"\n"; + FmtStyle = getGoogleStyle(FormatStyle::LK_Cpp); + EXPECT_TRUE( + sortIncludes(FmtStyle, Code, GetCodeRange(Code), "a/extra_action.cc") + .empty()); +} + TEST_F(SortIncludesTest, SortedIncludesInMultipleBlocksAreMerged) { Style.IncludeBlocks = tooling::IncludeStyle::IBS_Merge; EXPECT_EQ("#include \"a.h\"\n" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits