From a058d57a66a98752b2ce49da9e42d474191cd5c7 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Mon, 10 Mar 2014 01:31:17 -0700 Subject: Modify the SMT-LIB printer to declare arrays in a deterministic (alphabetical) order. --- lib/Expr/ExprSMTLIBPrinter.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/Expr/ExprSMTLIBPrinter.cpp b/lib/Expr/ExprSMTLIBPrinter.cpp index 812c1e9a..c32b5bf9 100644 --- a/lib/Expr/ExprSMTLIBPrinter.cpp +++ b/lib/Expr/ExprSMTLIBPrinter.cpp @@ -454,14 +454,26 @@ void ExprSMTLIBPrinter::printSetLogic() { *o << " )" << std::endl; } +namespace { + +struct ArrayPtrsByName { + bool operator()(const Array *a1, const Array *a2) const { + return a1->name < a2->name; + } +}; + +} + void ExprSMTLIBPrinter::printArrayDeclarations() { // Assume scan() has been called if (humanReadable) *o << "; Array declarations" << endl; - // declare arrays - for (set::iterator it = usedArrays.begin(); - it != usedArrays.end(); it++) { + // Declare arrays in a deterministic order. + std::vector sortedArrays(usedArrays.begin(), usedArrays.end()); + std::sort(sortedArrays.begin(), sortedArrays.end(), ArrayPtrsByName()); + for (std::vector::iterator it = sortedArrays.begin(); + it != sortedArrays.end(); it++) { *o << "(declare-fun " << (*it)->name << " () " "(Array (_ BitVec " << (*it)->getDomain() << ") " @@ -477,8 +489,8 @@ void ExprSMTLIBPrinter::printArrayDeclarations() { const Array *array; // loop over found arrays - for (set::iterator it = usedArrays.begin(); - it != usedArrays.end(); it++) { + for (std::vector::iterator it = sortedArrays.begin(); + it != sortedArrays.end(); it++) { array = *it; int byteIndex = 0; if (array->isConstantArray()) { -- cgit 1.4.1