diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-07-23 05:01:54 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-07-23 05:01:54 +0000 |
commit | 1f15e768983a614e45c3ca01df1ddb3339e746dd (patch) | |
tree | c5bcc4f53a2f75d2f3ad2fb929776e29fddc199e /lib/Sema/SemaDecl.cpp | |
parent | cfc6758b5f62514445eead673a46a69d70162526 (diff) |
Use llvm::BitVector instead of managing memory by hand.
- As it happens, this also fixes a use-of-uninitialized memory that was causing
non-deterministic test failures.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76857 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index f3732e1b51..760a95f9d0 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -28,6 +28,7 @@ // FIXME: layering (ideally, Sema shouldn't be dependent on Lex API's) #include "clang/Lex/Preprocessor.h" #include "clang/Lex/HeaderSearch.h" +#include "llvm/ADT/BitVector.h" #include "llvm/ADT/SmallSet.h" #include "llvm/ADT/STLExtras.h" #include <algorithm> @@ -1023,18 +1024,18 @@ Sema::ControlFlowKind Sema::CheckFallThrough(Stmt *Root) { // The CFG leaves in dead things, run a simple mark and sweep on it // to weed out the trivially dead things. std::queue<CFGBlock*> workq; - llvm::OwningArrayPtr<char> live(new char[cfg->getNumBlockIDs()]); + llvm::BitVector live(cfg->getNumBlockIDs()); // Prep work queue workq.push(&cfg->getEntry()); // Solve while (!workq.empty()) { CFGBlock *item = workq.front(); workq.pop(); - live[item->getBlockID()] = 1; + live.set(item->getBlockID()); CFGBlock::succ_iterator i; for (i=item->succ_begin(); i != item->succ_end(); ++i) { if ((*i) && ! live[(*i)->getBlockID()]) { - live[(*i)->getBlockID()] = 1; + live.set((*i)->getBlockID()); workq.push(*i); } } |