[PATCH] D35043: [ADT] Enable reverse iteration for DenseMap
Richard Smith - zygoloid via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 24 12:29:17 PDT 2017
rsmith added inline comments.
================
Comment at: include/llvm/Support/ReverseIteration.h:26
+ return ReverseIterate<bool>::value &&
+ std::is_pointer<T>::value;
}
----------------
mgrang wrote:
> dblaikie wrote:
> > Should this use an LLVM trait, to catch more interesting things that are pointer-like but not is_pointer? (I guess unique/shared ptr, and maybe PointerIntPair, PointerUnion, etc? Not sure if there's already an LLVM trait that covers all of those)
> Yes, ideally this should use an LLVM trait. I tried adding a "bool IsPointerLikeType" field to each template specialization in PointerLikeTypeTraits.h. As a result I had to add this field to each definition/specialization of this template throughout llvm/clang/polly as its definitions are scattered throughout.
>
> More pressingly, the compilation failed since it will now call PointerLikeTypeTrait<T>::IsPointerLikeType for a T which does not have a complete trait definition (like LLVMBasicBlockRef).
>
> I also tried adding a similar field to each specialization in DenseMapInfo. But that would make it too specific as I would then need to do something like "DenseMapInfo<T>::IsPointerLikeType". This would make it difficult to generalize this for other containers.
>
> Could you please suggest some ways I can work around these?
Is there a reason that we define the primary `PointerLikeTypeTraits` template? SFINAE on whether `PointerLikeTypeTraits<T>` is a complete type seems like it would be a convenient way to detect if it's been specialized (if it worked).
Repository:
rL LLVM
https://reviews.llvm.org/D35043
More information about the llvm-commits
mailing list