diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2008-04-26 15:19:51 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2008-04-26 15:19:51 +0000 |
commit | fa2d2f2886198569759b5186b11fbcbc363836dc (patch) | |
tree | 87de83715bb05b811f595abdb7b92735170ee264 /clang | |
parent | 67ca6f6347255afa1d75aa97df2d98623e8a9658 (diff) | |
download | bcm5719-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.h | 14 | ||||
-rw-r--r-- | clang/lib/Analysis/ProgramPoint.cpp | 7 |
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 { |