[clang] [clang][Sema] Move computing enum bits into a separate function (PR #126096)
Ilia Kuklin via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 6 11:00:03 PST 2025
kuilpd wrote:
> > This is just moving stuff around so that seems fine. Though, I wonder, could we just pass e.g. an `ArrayRef<Decl*>` to `computeEnumBits()`? The LLDB pr you linked seems to have an `SmallVector<EnumConstantDecl*>`, so that should be possible (I think it does require a `reinterpret_cast` from a `const Decl**` to a `const EnumConstantDecl**`, but we already do that in other places in Clang iirc).
>
> The reason I suggested the template initially was because in LLDB's case we don't have the `EnumConstantDecl`s in a container. We only have an `EnumDecl`. So the plan was to pass the `enumerators()` iterator into `computeEnumBits`. But if you know of a good way to turn the range into a container that we can pass as an `ArrayRef`, or some non-template way of passing both an `iterator_range` and `ArrayRef` into `computeEnumBits`, that'd be great!
Yeah, `enumerator()` returns `llvm::iterator_range<specific_decl_iterator<EnumConstantDecl>>`, and couldn't find a good way to convert this to an `ArrayRef`.
I guess I could make a `SmallVector<EnumConstantDecl*>` and put the copy of pointers there at the point of their creation ([here](https://github.com/llvm/llvm-project/blob/b581ad411d6e178300732410dd8850cd34543ac3/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp#L2373)), since the function return a `EnumConstantDecl`, then discard it.
https://github.com/llvm/llvm-project/pull/126096
More information about the cfe-commits
mailing list