[clang] [clang][Sema] Move computing enum bits into a separate function (PR #126096)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 6 11:03:49 PST 2025
Sirraide 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.
Hmm, I feel like you *might* be able to extract the pointers from the range and do something with those, but I’m not too familiar w/ how that works exactly off the top of my head. I don’t think the template is that big of an issue; it’d be nice not to have it, but if there is no sane/straight-forward way to get around it then I don’t really have a problem w/ it either.
https://github.com/llvm/llvm-project/pull/126096
More information about the cfe-commits
mailing list