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

Reply via email to