Hi, On 2019-09-26 03:16, Evgenii Stepanov via cfe-commits wrote: > Hi, > > this change breaks the build with > > /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm-project/clang/lib/Format/Format.cpp:737:44: > error: missing field 'SortPriority' initializer > [-Werror,-Wmissing-field-initializers] > {"^\"(llvm|llvm-c|clang|clang-c)/", 2},
Same thing with a testcase: /data/repo/master/clang/unittests/Format/SortIncludesTest.cpp:522:60: error: missing field 'SortPriority' initializer [-Werror,-Wmissing-field-initializers] Style.IncludeCategories = {{".*important_os_header.*", -1}, {".*", 1}}; ^ /data/repo/master/clang/unittests/Format/SortIncludesTest.cpp:522:71: error: missing field 'SortPriority' initializer [-Werror,-Wmissing-field-initializers] Style.IncludeCategories = {{".*important_os_header.*", -1}, {".*", 1}}; ^ /data/repo/master/clang/unittests/Format/SortIncludesTest.cpp:542:60: error: missing field 'SortPriority' initializer [-Werror,-Wmissing-field-initializers] Style.IncludeCategories = {{".*important_os_header.*", -1}, {".*", 1}}; ^ /data/repo/master/clang/unittests/Format/SortIncludesTest.cpp:542:71: error: missing field 'SortPriority' initializer [-Werror,-Wmissing-field-initializers] Style.IncludeCategories = {{".*important_os_header.*", -1}, {".*", 1}}; ^ 4 errors generated. /Mikael > https://protect2.fireeye.com/url?k=7ed71e57-220315e9-7ed75ecc-86742d02e7e2-ebf5547e7dd70b16&q=1&u=http%3A%2F%2Flab.llvm.org%3A8011%2Fbuilders%2Fsanitizer-x86_64-linux-android%2Fbuilds%2F24667%2Fsteps%2Fbootstrap%2520clang%2Flogs%2Fstdio > > On Wed, Sep 25, 2019 at 1:30 PM Paul Hoad via cfe-commits > <cfe-commits@lists.llvm.org> wrote: >> Author: paulhoad >> Date: Wed Sep 25 13:33:01 2019 >> New Revision: 372919 >> >> URL: >> https://protect2.fireeye.com/url?k=ce962f68-924224d6-ce966ff3-86742d02e7e2-1bc81aee6f2698ad&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%3Frev%3D372919%26view%3Drev >> Log: >> [clang-format] Modified SortIncludes and IncludeCategories to priority for >> sorting #includes within the Group Category. >> >> Summary: >> This new Style rule is made as a part of adding support for NetBSD KNF in >> clang-format. NetBSD have it's own priority of includes which should be >> followed while formatting NetBSD code. This style sorts the Cpp Includes >> according to the priorities of NetBSD, as mentioned in the [Style >> Guide](https://protect2.fireeye.com/url?k=c8a250e5-94765b5b-c8a2107e-86742d02e7e2-6cc3f1b124909847&q=1&u=http%3A%2F%2Fcvsweb.netbsd.org%2Fbsdweb.cgi%2Fsrc%2Fshare%2Fmisc%2Fstyle%3Frev%3DHEAD%26content-type%3Dtext%2Fx-cvsweb-markup) >> The working of this Style rule shown below: >> >> **Configuration:** >> This revision introduces a new field under IncludeCategories named >> `SortPriority` which defines the priority of ordering the `#includes` and >> the `Priority` will define the categories for grouping the `#include blocks`. >> >> Reviewers: cfe-commits, mgorny, christos, MyDeveloperDay >> >> Reviewed By: MyDeveloperDay >> >> Subscribers: lebedev.ri, rdwampler, christos, mgorny, krytarowski >> >> Patch By: Manikishan >> >> Tags: #clang, #clang-format >> >> Differential Revision: >> https://protect2.fireeye.com/url?k=94716b7f-c8a560c1-94712be4-86742d02e7e2-97a1f15f4847e953&q=1&u=https%3A%2F%2Freviews.llvm.org%2FD64695 >> >> Modified: >> cfe/trunk/docs/ClangFormatStyleOptions.rst >> cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h >> cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h >> cfe/trunk/lib/Format/Format.cpp >> cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp >> cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp >> cfe/trunk/unittests/Format/SortIncludesTest.cpp >> >> Modified: cfe/trunk/docs/ClangFormatStyleOptions.rst >> URL: >> https://protect2.fireeye.com/url?k=d1dd6b38-8d096086-d1dd2ba3-86742d02e7e2-0c39641cd0846c27&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Fdocs%2FClangFormatStyleOptions.rst%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >> ============================================================================== >> --- cfe/trunk/docs/ClangFormatStyleOptions.rst (original) >> +++ cfe/trunk/docs/ClangFormatStyleOptions.rst Wed Sep 25 13:33:01 2019 >> @@ -1511,6 +1511,13 @@ the configuration (without a prefix: ``A >> can also assign negative priorities if you have certain headers that >> always need to be first. >> >> + There is a third and optional field ``SortPriority`` which can used while >> + ``IncludeBloks = IBS_Regroup`` to define the priority in which >> ``#includes`` >> + should be ordered, and value of ``Priority`` defines the order of >> + ``#include blocks`` and also enables to group ``#includes`` of different >> + priority for order.``SortPriority`` is set to the value of ``Priority`` >> + as default if it is not assigned. >> + >> To configure this in the .clang-format file, use: >> >> .. code-block:: yaml >> @@ -1518,12 +1525,14 @@ the configuration (without a prefix: ``A >> IncludeCategories: >> - Regex: '^"(llvm|llvm-c|clang|clang-c)/' >> Priority: 2 >> + SortPriority: 2 >> - Regex: '^(<|"(gtest|gmock|isl|json)/)' >> Priority: 3 >> - Regex: '<[[:alnum:].]+>' >> Priority: 4 >> - Regex: '.*' >> Priority: 1 >> + SortPriority: 0 >> >> **IncludeIsMainRegex** (``std::string``) >> Specify a regular expression of suffixes that are allowed in the >> >> Modified: cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h >> URL: >> https://protect2.fireeye.com/url?k=a3d4ca4f-ff00c1f1-a3d48ad4-86742d02e7e2-93a045b7836bde46&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Finclude%2Fclang%2FTooling%2FInclusions%2FHeaderIncludes.h%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >> ============================================================================== >> --- cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h (original) >> +++ cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h Wed Sep 25 >> 13:33:01 2019 >> @@ -32,6 +32,7 @@ public: >> /// 0. Otherwise, returns the priority of the matching category or >> INT_MAX. >> /// NOTE: this API is not thread-safe! >> int getIncludePriority(StringRef IncludeName, bool CheckMainHeader) >> const; >> + int getSortIncludePriority(StringRef IncludeName, bool CheckMainHeader) >> const; >> >> private: >> bool isMainHeader(StringRef IncludeName) const; >> >> Modified: cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h >> URL: >> https://protect2.fireeye.com/url?k=5058cb1a-0c8cc0a4-50588b81-86742d02e7e2-1af614b360b8f2fb&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Finclude%2Fclang%2FTooling%2FInclusions%2FIncludeStyle.h%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >> ============================================================================== >> --- cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h (original) >> +++ cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h Wed Sep 25 >> 13:33:01 2019 >> @@ -58,6 +58,8 @@ struct IncludeStyle { >> std::string Regex; >> /// The priority to assign to this category. >> int Priority; >> + /// The custom priority to sort before grouping. >> + int SortPriority; >> bool operator==(const IncludeCategory &Other) const { >> return Regex == Other.Regex && Priority == Other.Priority; >> } >> >> Modified: cfe/trunk/lib/Format/Format.cpp >> URL: >> https://protect2.fireeye.com/url?k=321df2b5-6ec9f90b-321db22e-86742d02e7e2-8c5ee43df70917f7&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Flib%2FFormat%2FFormat.cpp%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >> ============================================================================== >> --- cfe/trunk/lib/Format/Format.cpp (original) >> +++ cfe/trunk/lib/Format/Format.cpp Wed Sep 25 13:33:01 2019 >> @@ -1771,6 +1771,7 @@ struct IncludeDirective { >> StringRef Text; >> unsigned Offset; >> int Category; >> + int Priority; >> }; >> >> struct JavaImportDirective { >> @@ -1834,6 +1835,7 @@ static void sortCppIncludes(const Format >> ArrayRef<tooling::Range> Ranges, StringRef >> FileName, >> StringRef Code, tooling::Replacements >> &Replaces, >> unsigned *Cursor) { >> + tooling::IncludeCategoryManager Categories(Style.IncludeStyle, FileName); >> unsigned IncludesBeginOffset = Includes.front().Offset; >> unsigned IncludesEndOffset = >> Includes.back().Offset + Includes.back().Text.size(); >> @@ -1841,11 +1843,12 @@ static void sortCppIncludes(const Format >> if (!affectsRange(Ranges, IncludesBeginOffset, IncludesEndOffset)) >> return; >> SmallVector<unsigned, 16> Indices; >> - for (unsigned i = 0, e = Includes.size(); i != e; ++i) >> + for (unsigned i = 0, e = Includes.size(); i != e; ++i) { >> Indices.push_back(i); >> + } >> llvm::stable_sort(Indices, [&](unsigned LHSI, unsigned RHSI) { >> - return std::tie(Includes[LHSI].Category, Includes[LHSI].Filename) < >> - std::tie(Includes[RHSI].Category, Includes[RHSI].Filename); >> + return std::tie(Includes[LHSI].Priority, Includes[LHSI].Filename) < >> + std::tie(Includes[RHSI].Priority, Includes[RHSI].Filename); >> }); >> // The index of the include on which the cursor will be put after >> // sorting/deduplicating. >> @@ -1960,9 +1963,12 @@ tooling::Replacements sortCppIncludes(co >> int Category = Categories.getIncludePriority( >> IncludeName, >> /*CheckMainHeader=*/!MainIncludeFound && FirstIncludeBlock); >> + int Priority = Categories.getSortIncludePriority( >> + IncludeName, !MainIncludeFound && FirstIncludeBlock); >> if (Category == 0) >> MainIncludeFound = true; >> - IncludesInBlock.push_back({IncludeName, Line, Prev, Category}); >> + IncludesInBlock.push_back( >> + {IncludeName, Line, Prev, Category, Priority}); >> } else if (!IncludesInBlock.empty() && !EmptyLineSkipped) { >> sortCppIncludes(Style, IncludesInBlock, Ranges, FileName, Code, >> Replaces, Cursor); >> >> Modified: cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp >> URL: >> https://protect2.fireeye.com/url?k=adb58601-f1618dbf-adb5c69a-86742d02e7e2-532943b9f04d415c&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Flib%2FTooling%2FInclusions%2FHeaderIncludes.cpp%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >> ============================================================================== >> --- cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp (original) >> +++ cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp Wed Sep 25 13:33:01 >> 2019 >> @@ -199,6 +199,20 @@ int IncludeCategoryManager::getIncludePr >> return Ret; >> } >> >> +int IncludeCategoryManager::getSortIncludePriority(StringRef IncludeName, >> + bool CheckMainHeader) >> const { >> + int Ret = INT_MAX; >> + for (unsigned i = 0, e = CategoryRegexs.size(); i != e; ++i) >> + if (CategoryRegexs[i].match(IncludeName)) { >> + Ret = Style.IncludeCategories[i].SortPriority; >> + if (Ret == 0) >> + Ret = Style.IncludeCategories[i].Priority; >> + break; >> + } >> + if (CheckMainHeader && IsMainFile && Ret > 0 && isMainHeader(IncludeName)) >> + Ret = 0; >> + return Ret; >> +} >> bool IncludeCategoryManager::isMainHeader(StringRef IncludeName) const { >> if (!IncludeName.startswith("\"")) >> return false; >> >> Modified: cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp >> URL: >> https://protect2.fireeye.com/url?k=4cf5fe3c-1021f582-4cf5bea7-86742d02e7e2-3cf9be10b6faae32&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Flib%2FTooling%2FInclusions%2FIncludeStyle.cpp%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >> ============================================================================== >> --- cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp (original) >> +++ cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp Wed Sep 25 13:33:01 >> 2019 >> @@ -17,6 +17,7 @@ void MappingTraits<IncludeStyle::Include >> IO &IO, IncludeStyle::IncludeCategory &Category) { >> IO.mapOptional("Regex", Category.Regex); >> IO.mapOptional("Priority", Category.Priority); >> + IO.mapOptional("SortPriority", Category.SortPriority); >> } >> >> void >> ScalarEnumerationTraits<IncludeStyle::IncludeBlocksStyle>::enumeration( >> >> Modified: cfe/trunk/unittests/Format/SortIncludesTest.cpp >> URL: >> https://protect2.fireeye.com/url?k=d39f8412-8f4b8fac-d39fc489-86742d02e7e2-02cdbe423900a25c&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Funittests%2FFormat%2FSortIncludesTest.cpp%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >> ============================================================================== >> --- cfe/trunk/unittests/Format/SortIncludesTest.cpp (original) >> +++ cfe/trunk/unittests/Format/SortIncludesTest.cpp Wed Sep 25 13:33:01 2019 >> @@ -70,6 +70,77 @@ TEST_F(SortIncludesTest, BasicSorting) { >> {tooling::Range(25, 1)})); >> } >> >> +TEST_F(SortIncludesTest, SortedIncludesUsingSortPriorityAttribute) { >> + FmtStyle.IncludeStyle.IncludeBlocks = tooling::IncludeStyle::IBS_Regroup; >> + FmtStyle.IncludeStyle.IncludeCategories = { >> + {"^<sys/param\\.h>", 1, 0}, >> + {"^<sys/types\\.h>", 1, 1}, >> + {"^<sys.*/", 1, 2}, >> + {"^<uvm/", 2, 3}, >> + {"^<machine/", 3, 4}, >> + {"^<dev/", 4, 5}, >> + {"^<net.*/", 5, 6}, >> + {"^<protocols/", 5, 7}, >> + {"^<(fs|miscfs|msdosfs|nfs|ntfs|ufs)/", 6, 8}, >> + {"^<(x86|amd64|i386|xen)/", 7, 8}, >> + {"<path", 9, 11}, >> + {"^<[^/].*\\.h>", 8, 10}, >> + {"^\".*\\.h\"", 10, 12}}; >> + EXPECT_EQ("#include <sys/param.h>\n" >> + "#include <sys/types.h>\n" >> + "#include <sys/ioctl.h>\n" >> + "#include <sys/socket.h>\n" >> + "#include <sys/stat.h>\n" >> + "#include <sys/wait.h>\n" >> + "\n" >> + "#include <net/if.h>\n" >> + "#include <net/if_dl.h>\n" >> + "#include <net/route.h>\n" >> + "#include <netinet/in.h>\n" >> + "#include <protocols/rwhod.h>\n" >> + "\n" >> + "#include <assert.h>\n" >> + "#include <errno.h>\n" >> + "#include <inttypes.h>\n" >> + "#include <stdio.h>\n" >> + "#include <stdlib.h>\n" >> + "\n" >> + "#include <paths.h>\n" >> + "\n" >> + "#include \"pathnames.h\"\n", >> + sort("#include <sys/param.h>\n" >> + "#include <sys/types.h>\n" >> + "#include <sys/ioctl.h>\n" >> + "#include <net/if_dl.h>\n" >> + "#include <net/route.h>\n" >> + "#include <netinet/in.h>\n" >> + "#include <sys/socket.h>\n" >> + "#include <sys/stat.h>\n" >> + "#include <sys/wait.h>\n" >> + "#include <net/if.h>\n" >> + "#include <protocols/rwhod.h>\n" >> + "#include <assert.h>\n" >> + "#include <paths.h>\n" >> + "#include \"pathnames.h\"\n" >> + "#include <errno.h>\n" >> + "#include <inttypes.h>\n" >> + "#include <stdio.h>\n" >> + "#include <stdlib.h>\n")); >> +} >> +TEST_F(SortIncludesTest, SortPriorityNotDefined) { >> + FmtStyle = getLLVMStyle(); >> + EXPECT_EQ("#include \"FormatTestUtils.h\"\n" >> + "#include \"clang/Format/Format.h\"\n" >> + "#include \"llvm/ADT/None.h\"\n" >> + "#include \"llvm/Support/Debug.h\"\n" >> + "#include \"gtest/gtest.h\"\n", >> + sort("#include \"clang/Format/Format.h\"\n" >> + "#include \"llvm/ADT/None.h\"\n" >> + "#include \"FormatTestUtils.h\"\n" >> + "#include \"gtest/gtest.h\"\n" >> + "#include \"llvm/Support/Debug.h\"\n")); >> +} >> + >> TEST_F(SortIncludesTest, NoReplacementsForValidIncludes) { >> // Identical #includes have led to a failure with an unstable sort. >> std::string Code = "#include <a>\n" >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> https://protect2.fireeye.com/url?k=44143b0a-18c030b4-44147b91-86742d02e7e2-45a48425fd884b69&q=1&u=https%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fcfe-commits > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > https://protect2.fireeye.com/url?k=0b029229-57d69997-0b02d2b2-86742d02e7e2-467fd19ff420a131&q=1&u=https%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fcfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits