summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorTobias Grosser <tobias@grosser.es>2015-12-30 14:02:58 +0000
committerTobias Grosser <tobias@grosser.es>2015-12-30 14:02:58 +0000
commiteec5b82c6fa7d24675284bba1d3b7354413bacb5 (patch)
treef38421a1c5ec9f62c1739eda06ce80ae7a546c75 /include
parentdb4180cc21785a80429eec8e26c6cdd8599327e9 (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.h28
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.