aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorCristian Cadar <c.cadar@imperial.ac.uk>2016-03-22 16:27:55 +0000
committerCristian Cadar <c.cadar@imperial.ac.uk>2016-03-22 16:27:55 +0000
commit58f947302c9807b7f6bea2fcb2a7bb325f8dd1b2 (patch)
tree4fa8d60bec12dbb109fe0a222bcc4248211979ca /lib
parentfd96a7a39d59deb0ce7a2b983a300dc00714198c (diff)
parent70b406696b6cc4c1c3c13f7d50ec1fe083a4fa5b (diff)
downloadklee-58f947302c9807b7f6bea2fcb2a7bb325f8dd1b2.tar.gz
Merge pull request #361 from MartinNowack/fix_determ_expprinter
ExprPPrinter: Print out arrays deterministically
Diffstat (limited to 'lib')
-rw-r--r--lib/Expr/ExprPPrinter.cpp22
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 {