Add a reverse iterator to DeclStmt, and use it when building a CFG.
The CFG creates dummy DeclStmts with one Decl per statement, and it has to do so from last to first in order to build the graph correctly. llvm-svn: 160560
This commit is contained in:
parent
c8b8c49d6f
commit
8c6c8a98b6
|
@ -500,6 +500,14 @@ public:
|
||||||
decl_iterator decl_end() { return DG.end(); }
|
decl_iterator decl_end() { return DG.end(); }
|
||||||
const_decl_iterator decl_begin() const { return DG.begin(); }
|
const_decl_iterator decl_begin() const { return DG.begin(); }
|
||||||
const_decl_iterator decl_end() const { return DG.end(); }
|
const_decl_iterator decl_end() const { return DG.end(); }
|
||||||
|
|
||||||
|
typedef std::reverse_iterator<decl_iterator> reverse_decl_iterator;
|
||||||
|
reverse_decl_iterator decl_rbegin() {
|
||||||
|
return reverse_decl_iterator(decl_end());
|
||||||
|
}
|
||||||
|
reverse_decl_iterator decl_rend() {
|
||||||
|
return reverse_decl_iterator(decl_begin());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// NullStmt - This is the null statement ";": C99 6.8.3p3.
|
/// NullStmt - This is the null statement ";": C99 6.8.3p3.
|
||||||
|
|
|
@ -1527,11 +1527,10 @@ CFGBlock *CFGBuilder::VisitDeclStmt(DeclStmt *DS) {
|
||||||
|
|
||||||
CFGBlock *B = 0;
|
CFGBlock *B = 0;
|
||||||
|
|
||||||
// FIXME: Add a reverse iterator for DeclStmt to avoid this extra copy.
|
// Build an individual DeclStmt for each decl.
|
||||||
typedef SmallVector<Decl*,10> BufTy;
|
for (DeclStmt::reverse_decl_iterator I = DS->decl_rbegin(),
|
||||||
BufTy Buf(DS->decl_begin(), DS->decl_end());
|
E = DS->decl_rend();
|
||||||
|
I != E; ++I) {
|
||||||
for (BufTy::reverse_iterator I = Buf.rbegin(), E = Buf.rend(); I != E; ++I) {
|
|
||||||
// Get the alignment of the new DeclStmt, padding out to >=8 bytes.
|
// Get the alignment of the new DeclStmt, padding out to >=8 bytes.
|
||||||
unsigned A = llvm::AlignOf<DeclStmt>::Alignment < 8
|
unsigned A = llvm::AlignOf<DeclStmt>::Alignment < 8
|
||||||
? 8 : llvm::AlignOf<DeclStmt>::Alignment;
|
? 8 : llvm::AlignOf<DeclStmt>::Alignment;
|
||||||
|
|
Loading…
Reference in New Issue