diff options
author | Cristian Cadar <c.cadar@imperial.ac.uk> | 2016-03-22 16:27:55 +0000 |
---|---|---|
committer | Cristian Cadar <c.cadar@imperial.ac.uk> | 2016-03-22 16:27:55 +0000 |
commit | 58f947302c9807b7f6bea2fcb2a7bb325f8dd1b2 (patch) | |
tree | 4fa8d60bec12dbb109fe0a222bcc4248211979ca | |
parent | fd96a7a39d59deb0ce7a2b983a300dc00714198c (diff) | |
parent | 70b406696b6cc4c1c3c13f7d50ec1fe083a4fa5b (diff) | |
download | klee-58f947302c9807b7f6bea2fcb2a7bb325f8dd1b2.tar.gz |
Merge pull request #361 from MartinNowack/fix_determ_expprinter
ExprPPrinter: Print out arrays deterministically
-rw-r--r-- | lib/Expr/ExprPPrinter.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/Expr/ExprPPrinter.cpp b/lib/Expr/ExprPPrinter.cpp index ddcc57a1..1682d9b5 100644 --- a/lib/Expr/ExprPPrinter.cpp +++ b/lib/Expr/ExprPPrinter.cpp @@ -457,6 +457,14 @@ void ExprPPrinter::printConstraints(llvm::raw_ostream &os, printQuery(os, constraints, ConstantExpr::alloc(false, Expr::Bool)); } +namespace { + +struct ArrayPtrsByName { + bool operator()(const Array *a1, const Array *a2) const { + return a1->name < a2->name; + } +}; +} void ExprPPrinter::printQuery(llvm::raw_ostream &os, const ConstraintManager &constraints, @@ -482,13 +490,15 @@ void ExprPPrinter::printQuery(llvm::raw_ostream &os, if (printArrayDecls) { for (const Array * const* it = evalArraysBegin; it != evalArraysEnd; ++it) p.usedArrays.insert(*it); - for (std::set<const Array*>::iterator it = p.usedArrays.begin(), - ie = p.usedArrays.end(); it != ie; ++it) { + std::vector<const Array *> sortedArray(p.usedArrays.begin(), + p.usedArrays.end()); + std::sort(sortedArray.begin(), sortedArray.end(), ArrayPtrsByName()); + for (std::vector<const Array *>::iterator it = sortedArray.begin(), + ie = sortedArray.end(); + it != ie; ++it) { const Array *A = *it; - // FIXME: Print correct name, domain, and range. - PC << "array " << A->name - << "[" << A->size << "]" - << " : " << "w32" << " -> " << "w8" << " = "; + PC << "array " << A->name << "[" << A->size << "]" + << " : w" << A->domain << " -> w" << A->range << " = "; if (A->isSymbolicArray()) { PC << "symbolic"; } else { |