NCF: use bit_cast in IntervalMap

This use is sketchy because it basically reinterprets a pointer to another pointer, but right now it's hiding in a union. After this change it'll be easy to grep for bit_cast of a pointer and un-sketch things if we want. This patch therefore obeys the law of conservation of sketch, with minor improvement.

llvm-svn: 341900
This commit is contained in:
JF Bastien 2018-09-11 04:52:21 +00:00
parent a9076e35d4
commit c0d77e80ac
1 changed files with 3 additions and 7 deletions

View File

@ -101,6 +101,7 @@
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/bit.h"
#include "llvm/Support/AlignOf.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/RecyclingAllocator.h"
@ -977,15 +978,10 @@ private:
// Allocator used for creating external nodes.
Allocator &allocator;
/// dataAs - Represent data as a node type without breaking aliasing rules.
/// Represent data as a node type without breaking aliasing rules.
template <typename T>
T &dataAs() const {
union {
const char *d;
T *t;
} u;
u.d = data.buffer;
return *u.t;
return *bit_cast<T *>(const_cast<char *>(data.buffer));
}
const RootLeaf &rootLeaf() const {