diff options
author | Tobias Grosser <tobias@grosser.es> | 2015-12-30 14:02:58 +0000 |
---|---|---|
committer | Tobias Grosser <tobias@grosser.es> | 2015-12-30 14:02:58 +0000 |
commit | eec5b82c6fa7d24675284bba1d3b7354413bacb5 (patch) | |
tree | f38421a1c5ec9f62c1739eda06ce80ae7a546c75 /include | |
parent | db4180cc21785a80429eec8e26c6cdd8599327e9 (diff) |
Revert "[ptr-traits] Implement the base pointer traits using the actual"
The commit we revert is rather small, but it enables a larger piece of new
infrastructure that allows to detected misuses of pointer-traits at compile
time. Unfortunately, this change breaks with the use of incomplete types (e.g.
in Polly). As I am not aware of a simple fix on the Polly side, I temporarely
revert this commit to clean the bots and sync-up with Chandler how to best
adapt to these recent changes.
This reverts commit https://llvm.org/svn/llvm-project/llvm/trunk@256620.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256642 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Support/PointerLikeTypeTraits.h | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/include/llvm/Support/PointerLikeTypeTraits.h b/include/llvm/Support/PointerLikeTypeTraits.h index c12d237b279..95d735869f2 100644 --- a/include/llvm/Support/PointerLikeTypeTraits.h +++ b/include/llvm/Support/PointerLikeTypeTraits.h @@ -15,7 +15,6 @@ #ifndef LLVM_SUPPORT_POINTERLIKETYPETRAITS_H #define LLVM_SUPPORT_POINTERLIKETYPETRAITS_H -#include "llvm/Support/AlignOf.h" #include "llvm/Support/DataTypes.h" namespace llvm { @@ -28,32 +27,15 @@ template <typename T> class PointerLikeTypeTraits { // getNumLowBitsAvailable }; -namespace detail { -/// A tiny meta function to compute the log2 of a compile time constant. -template <size_t N> -struct ConstantLog2 - : std::integral_constant<size_t, ConstantLog2<N / 2>::value + 1> {}; -template <> struct ConstantLog2<1> : std::integral_constant<size_t, 0> {}; -} - // Provide PointerLikeTypeTraits for non-cvr pointers. -template <typename T> struct PointerLikeTypeTraits<T *> { +template <typename T> class PointerLikeTypeTraits<T *> { +public: static inline void *getAsVoidPointer(T *P) { return P; } static inline T *getFromVoidPointer(void *P) { return static_cast<T *>(P); } - enum { - NumLowBitsAvailable = detail::ConstantLog2<AlignOf<T>::Alignment>::value - }; -}; - -template <> struct PointerLikeTypeTraits<void *> { - static inline void *getAsVoidPointer(void *P) { return P; } - static inline void *getFromVoidPointer(void *P) { return P; } - - /// Note, we assume here that void* is related to raw malloc'ed memory and - /// that malloc returns objects at least 4-byte aligned. However, this may be - /// wrong, or pointers may be from something other than malloc. In this case, - /// you should specify a real typed pointer or avoid this template. + /// Note, we assume here that malloc returns objects at least 4-byte aligned. + /// However, this may be wrong, or pointers may be from something other than + /// malloc. In this case, you should specialize this template to reduce this. /// /// All clients should use assertions to do a run-time check to ensure that /// this is actually true. |