[PATCH] D139921: [include-cleaner] Ranking of providers based on hints
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 23 03:39:46 PST 2023
kadircet added inline comments.
================
Comment at: clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h:133
+
+ Header(std::in_place_t, decltype(Storage) Sentinel)
+ : Storage(std::move(Sentinel)) {}
----------------
sammccall wrote:
> this is a bit confusing... kind of the opposite of what `std::in_place` means?
> (All of the other constructors build the state in-place in some sense, but this one doesn't)
>
> Maybe just a private `struct Sentinel{};` instead of in_place_t?
>
> Symbol does this without any sentinel at all, if that's causing ambiguity then it might be worth fixing both to be the same.
without a disambiguation tag we get an ambigious conversion when we have a constructor call that looks like `Header("foo.h")` (whether to use Header(StringRef) or Header(variant<StringRef>), not sure if it's fine for an "inaccessible" constructor to participate in overload resolution, nor how variant can be viable here despite needing a double implicit conversion from stringref to variant)
This didn't bite us with Symbol yet because constructor takes a `Decl&` but variant stores a `Decl*`, and for Macro case we always explicitly initialized with spelling of `Macro`.
You're right about usage of inplace_t though, I was confused. using a sentinel tag instead.
================
Comment at: clang-tools-extra/include-cleaner/lib/Types.cpp:114
+ case Header::Physical:
+ return physical() < RHS.physical();
+ case Header::Standard:
----------------
sammccall wrote:
> I think comparing pointers is going to give inconsistent results, and would suggest comparing Name (without trying to normalize, just for at least reproducibility across identical runs)
i was rather worried about correctness of a name based match, e.g. we can have the same FileEntry pointers for `foo.h` and `bar/foo.h` but i guess it's OK to assume that a FileManager won't be accessed in the middle of a comparison sequence.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139921/new/
https://reviews.llvm.org/D139921
More information about the cfe-commits
mailing list