forked from OSchip/llvm-project
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. llvm-svn: 256642
This commit is contained in:
parent
18799ff837
commit
666761afab
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue