[PATCH] D121733: Clean pathnames in FileManager.

Paul Pluzhnikov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 11 11:17:01 PDT 2022


ppluzhnikov planned changes to this revision.
ppluzhnikov added inline comments.


================
Comment at: clang-tools-extra/clangd/index/CanonicalIncludes.cpp:24
+  static auto *Mappings =
+      new std::array<std::pair<std::string, std::string>, 645>{{
+          {"algorithm", "<algorithm>"},
----------------
ilya-biryukov wrote:
> Don't specify sizes of arrays explicitly. This is error prone.
std::array requires size.

I could use std::vector instead, at the cost of an extra allocation.


================
Comment at: clang-tools-extra/clangd/index/CanonicalIncludes.cpp:546
+          {"include/wordexp.h", "<wordexp.h>"},
+          {"include/x86intrin.h", "<x86intrin.h>"},
+          {"include/xlocale.h", "<cstring>"},
----------------
ilya-biryukov wrote:
> Why do we change the order of elements here?
> Please revert, this increases the diff and is not relevant to the actual change.
Note that the elements are inserted into a map
(after commit b3a991df3cd6a; used to be a vector before).

Also note that there are duplicates, e.g.

{"bits/typesizes.h", "<cstdio>"},
{"bits/typesizes.h", "<sys/types.h>"},

which can't work as intended / is already broken.

Sorting helps to find these duplicates.



================
Comment at: clang-tools-extra/clangd/index/CanonicalIncludes.cpp:670
+      }};
+  auto *HeaderMapping = new llvm::StringMap<llvm::StringRef>(Mappings->size());
+
----------------
ilya-biryukov wrote:
> This line introduces a memory leak.
> Notice how the previous version had a `static` variable.
No, it does not. This function is called only once to initialize a static variable: 

    static const auto *SystemHeaderMap = GetHeaderMapping();
 


================
Comment at: clang-tools-extra/clangd/index/CanonicalIncludes.cpp:677
+  };
+  for (auto &p : *Mappings) {
+    Canonicalize(p.first);
----------------
ilya-biryukov wrote:
> This function is on a critical path. We don't want to pay for `Canonicalize` on every call to it.
> Please create a static variable and initialize in a lambda if that's absolutely necessary.
> ```
> static auto *Mapping = []{ StringMap *Mapping = new ...; /* init code*/ return Mapping; }();
> ```
This function is only called once.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121733/new/

https://reviews.llvm.org/D121733



More information about the cfe-commits mailing list