From: Tobias Grosser Date: Wed, 30 Dec 2015 14:02:58 +0000 (+0000) Subject: Revert "[ptr-traits] Implement the base pointer traits using the actual" X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=eec5b82c6fa7d24675284bba1d3b7354413bacb5 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 --- 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 class PointerLikeTypeTraits { // getNumLowBitsAvailable }; -namespace detail { -/// A tiny meta function to compute the log2 of a compile time constant. -template -struct ConstantLog2 - : std::integral_constant::value + 1> {}; -template <> struct ConstantLog2<1> : std::integral_constant {}; -} - // Provide PointerLikeTypeTraits for non-cvr pointers. -template struct PointerLikeTypeTraits { +template class PointerLikeTypeTraits { +public: static inline void *getAsVoidPointer(T *P) { return P; } static inline T *getFromVoidPointer(void *P) { return static_cast(P); } - enum { - NumLowBitsAvailable = detail::ConstantLog2::Alignment>::value - }; -}; - -template <> struct PointerLikeTypeTraits { - 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.