[PATCH] D121733: Clean pathnames in FileManager.
Ilya Biryukov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu May 12 01:26:43 PDT 2022
ilya-biryukov 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>"},
----------------
ppluzhnikov wrote:
> 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.
Use raw arrays.
================
Comment at: clang-tools-extra/clangd/index/CanonicalIncludes.cpp:546
+ {"include/wordexp.h", "<wordexp.h>"},
+ {"include/x86intrin.h", "<x86intrin.h>"},
+ {"include/xlocale.h", "<cstring>"},
----------------
ppluzhnikov wrote:
> 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.
>
This refactoring makes sense, but please split this into a separate change.
================
Comment at: clang-tools-extra/clangd/index/CanonicalIncludes.cpp:670
+ }};
+ auto *HeaderMapping = new llvm::StringMap<llvm::StringRef>(Mappings->size());
+
----------------
ppluzhnikov wrote:
> 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();
>
There is no guarantee someone won't run this again by mistake in the future revisions.
Make this function leak-free, don't rely on global invariants.
It's easy to do with a lambda trick from the next comment.
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