diff options
Diffstat (limited to 'clang/lib/Analysis/LiveVariables.cpp')
| -rw-r--r-- | clang/lib/Analysis/LiveVariables.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/Analysis/LiveVariables.cpp b/clang/lib/Analysis/LiveVariables.cpp index 481932e..af56370 100644 --- a/clang/lib/Analysis/LiveVariables.cpp +++ b/clang/lib/Analysis/LiveVariables.cpp @@ -16,7 +16,9 @@ #include "clang/Analysis/AnalysisDeclContext.h" #include "clang/Analysis/CFG.h" #include "clang/Analysis/FlowSensitive/DataflowWorklist.h" +#include "clang/Basic/SourceManager.h" #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/Support/raw_ostream.h" #include <algorithm> #include <optional> @@ -662,12 +664,19 @@ void LiveVariables::dumpExprLiveness(const SourceManager &M) { } void LiveVariablesImpl::dumpExprLiveness(const SourceManager &M) { + auto ByBeginLoc = [&M](const Expr *L, const Expr *R) { + return M.isBeforeInTranslationUnit(L->getBeginLoc(), R->getBeginLoc()); + }; + // Don't iterate over blockEndsToLiveness directly because it's not sorted. for (const CFGBlock *B : *analysisContext.getCFG()) { llvm::errs() << "\n[ B" << B->getBlockID() << " (live expressions at block exit) ]\n"; - for (const Expr *E : blocksEndToLiveness[B].liveExprs) { + std::vector<const Expr *> LiveExprs; + llvm::append_range(LiveExprs, blocksEndToLiveness[B].liveExprs); + llvm::sort(LiveExprs, ByBeginLoc); + for (const Expr *E : LiveExprs) { llvm::errs() << "\n"; E->dump(); } |
