summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2008-04-26 15:19:51 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2008-04-26 15:19:51 +0000
commitfa2d2f2886198569759b5186b11fbcbc363836dc (patch)
tree87de83715bb05b811f595abdb7b92735170ee264 /clang
parent67ca6f6347255afa1d75aa97df2d98623e8a9658 (diff)
downloadbcm5719-llvm-fa2d2f2886198569759b5186b11fbcbc363836dc.tar.gz
bcm5719-llvm-fa2d2f2886198569759b5186b11fbcbc363836dc.zip
Make assertions for all addresses passed to ProgramPoint that they have at least an 8-byte alignment.
llvm-svn: 50310
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/Analysis/ProgramPoint.h14
-rw-r--r--clang/lib/Analysis/ProgramPoint.cpp7
2 files changed, 11 insertions, 10 deletions
diff --git a/clang/include/clang/Analysis/ProgramPoint.h b/clang/include/clang/Analysis/ProgramPoint.h
index a046268cfd7..5fc1fb651b0 100644
--- a/clang/include/clang/Analysis/ProgramPoint.h
+++ b/clang/include/clang/Analysis/ProgramPoint.h
@@ -31,14 +31,18 @@ protected:
uintptr_t Data;
ProgramPoint(const void* Ptr, Kind k) {
+ setRawData(Ptr, k);
+ }
+
+ ProgramPoint() : Data(0) {}
+
+ void setRawData(const void* Ptr, Kind k) {
assert ((reinterpret_cast<uintptr_t>(const_cast<void*>(Ptr)) & 0x7) == 0
&& "Address must have at least an 8-byte alignment.");
Data = reinterpret_cast<uintptr_t>(const_cast<void*>(Ptr)) | k;
}
- ProgramPoint() : Data(0) {}
-
public:
unsigned getKind() const { return Data & 0x7; }
void* getRawPtr() const { return reinterpret_cast<void*>(Data & ~0x7); }
@@ -114,10 +118,8 @@ public:
/// This ctor forces the BlockEdge to be constructed using an explicitly
/// allocated pair object that is stored in the CFG. This is usually
/// used to construct edges representing jumps using computed gotos.
- BlockEdge(CFG& cfg, const CFGBlock* B1, const CFGBlock* B2, bool) {
- Data = reinterpret_cast<uintptr_t>(cfg.getBlockEdgeImpl(B1, B2))
- | BlockEdgeAuxKind;
- }
+ BlockEdge(CFG& cfg, const CFGBlock* B1, const CFGBlock* B2, bool)
+ : ProgramPoint(cfg.getBlockEdgeImpl(B1, B2), BlockEdgeAuxKind) {}
CFGBlock* getSrc() const;
diff --git a/clang/lib/Analysis/ProgramPoint.cpp b/clang/lib/Analysis/ProgramPoint.cpp
index c089e486988..d95680ff389 100644
--- a/clang/lib/Analysis/ProgramPoint.cpp
+++ b/clang/lib/Analysis/ProgramPoint.cpp
@@ -19,15 +19,14 @@ using namespace clang;
BlockEdge::BlockEdge(CFG& cfg, const CFGBlock* B1, const CFGBlock* B2) {
if (B1->succ_size() == 1) {
assert (*(B1->succ_begin()) == B2);
- Data = reinterpret_cast<uintptr_t>(B1) | BlockEdgeSrcKind;
+ setRawData(B1, BlockEdgeSrcKind);
}
else if (B2->pred_size() == 1) {
assert (*(B2->pred_begin()) == B1);
- Data = reinterpret_cast<uintptr_t>(B2) | BlockEdgeDstKind;
+ setRawData(B2, BlockEdgeDstKind);
}
else
- Data = reinterpret_cast<uintptr_t>(cfg.getBlockEdgeImpl(B1,B2))
- | BlockEdgeAuxKind;
+ setRawData(cfg.getBlockEdgeImpl(B1,B2), BlockEdgeAuxKind);
}
CFGBlock* BlockEdge::getSrc() const {
OpenPOWER on IntegriCloud