about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorPeter Collingbourne <pcc@google.com>2014-03-10 01:31:17 -0700
committerPeter Collingbourne <pcc@google.com>2014-04-02 23:55:55 -0700
commita058d57a66a98752b2ce49da9e42d474191cd5c7 (patch)
tree3e15969a0f049a2b17f05f634064be4678688b57
parent2ea7722ac9b43857358dc12493d7bd9de16e313b (diff)
downloadklee-a058d57a66a98752b2ce49da9e42d474191cd5c7.tar.gz
Modify the SMT-LIB printer to declare arrays in a deterministic (alphabetical) order.
-rw-r--r--lib/Expr/ExprSMTLIBPrinter.cpp22
-rw-r--r--test/Expr/print-smt.smt2.good22
2 files changed, 28 insertions, 16 deletions
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<const Array *>::iterator it = usedArrays.begin();
-       it != usedArrays.end(); it++) {
+  // Declare arrays in a deterministic order.
+  std::vector<const Array *> sortedArrays(usedArrays.begin(), usedArrays.end());
+  std::sort(sortedArrays.begin(), sortedArrays.end(), ArrayPtrsByName());
+  for (std::vector<const Array *>::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<const Array *>::iterator it = usedArrays.begin();
-         it != usedArrays.end(); it++) {
+    for (std::vector<const Array *>::iterator it = sortedArrays.begin();
+         it != sortedArrays.end(); it++) {
       array = *it;
       int byteIndex = 0;
       if (array->isConstantArray()) {
diff --git a/test/Expr/print-smt.smt2.good b/test/Expr/print-smt.smt2.good
index cca282af..7b2002b9 100644
--- a/test/Expr/print-smt.smt2.good
+++ b/test/Expr/print-smt.smt2.good
@@ -859,9 +859,9 @@
 ;SMTLIBv2 Query 72
 (set-option :produce-models true)
 (set-logic QF_AUFBV )
-(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (declare-fun const_arr2 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (assert (=  (select const_arr2 (_ bv0 32) ) (_ bv121 8) ) )
 (assert (=  (select const_arr2 (_ bv1 32) ) (_ bv101 8) ) )
 (assert (=  (select const_arr2 (_ bv2 32) ) (_ bv115 8) ) )
@@ -881,8 +881,8 @@
 ;SMTLIBv2 Query 73
 (set-option :produce-models true)
 (set-logic QF_AUFBV )
-(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (assert (let (  (?B0 ((_ extract 31  0)  (bvadd  (_ bv18446744073709533360 64) (bvmul  (_ bv4 64) ((_ sign_extend 32)  (concat  (select  unnamed_1 (_ bv3 32) ) (concat  (select  unnamed_1 (_ bv2 32) ) (concat  (select  unnamed_1 (_ bv1 32) ) (select  unnamed_1 (_ bv0 32) ) ) ) ) ) ) ) ) ) (?B1 (bvadd  (_ bv18446744073709533360 64) (bvmul  (_ bv4 64) ((_ sign_extend 32)  (concat  (select  unnamed_1 (_ bv3 32) ) (concat  (select  unnamed_1 (_ bv2 32) ) (concat  (select  unnamed_1 (_ bv1 32) ) (select  unnamed_1 (_ bv0 32) ) ) ) ) ) ) ) ) (?B2 (bvmul  (_ bv4 64) ((_ sign_extend 32)  (concat  (select  unnamed_1 (_ bv3 32) ) (concat  (select  unnamed_1 (_ bv2 32) ) (concat  (select  unnamed_1 (_ bv1 32) ) (select  unnamed_1 (_ bv0 32) ) ) ) ) ) ) ) ) (and (=  false (bvult  ?B2 (_ bv13 64) ) ) (and (=  false (bvult  (bvadd  (_ bv31312 64) ?B2 ) (_ bv1 64) ) ) (and (=  false (bvult  (bvadd  (_ bv31760 64) ?B2 ) (_ bv13 64) ) ) (and (=  false (bvult  (bvadd  (_ bv111120 64) ?B2 ) (_ bv1 64) ) ) (and (bvult  ?B1 (_ bv1 64) ) (=  false (=  (concat  (select  unnamed (_ bv3 32) ) (concat  (select  unnamed (_ bv2 32) ) (concat  (select  unnamed (_ bv1 32) ) (select  unnamed (_ bv0 32) ) ) ) ) (concat  (select  unnamed (bvadd  (_ bv3 32) ?B0 ) ) (concat  (select  unnamed (bvadd  (_ bv2 32) ?B0 ) ) (concat  (select  unnamed (bvadd  (_ bv1 32) ?B0 ) ) (select  unnamed ?B0 ) ) ) ) ) ) ) ) ) ) ) )  )
 (check-sat)
 (get-value ( (select unnamed_1 (_ bv0 32) ) ) )
@@ -898,9 +898,9 @@
 ;SMTLIBv2 Query 74
 (set-option :produce-models true)
 (set-logic QF_AUFBV )
-(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
-(declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (declare-fun const_arr5 () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (assert (=  (select const_arr5 (_ bv0 32) ) (_ bv171 8) ) )
 (assert (=  (select const_arr5 (_ bv1 32) ) (_ bv171 8) ) )
 (assert (=  (select const_arr5 (_ bv2 32) ) (_ bv171 8) ) )
@@ -920,9 +920,9 @@
 ;SMTLIBv2 Query 75
 (set-option :produce-models true)
 (set-logic QF_AUFBV )
-(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
-(declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (declare-fun const_arr1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (assert (=  (select const_arr1 (_ bv0 32) ) (_ bv12 8) ) )
 (assert (=  (select const_arr1 (_ bv1 32) ) (_ bv0 8) ) )
 (assert (=  (select const_arr1 (_ bv2 32) ) (_ bv0 8) ) )
@@ -954,9 +954,9 @@
 ;SMTLIBv2 Query 76
 (set-option :produce-models true)
 (set-logic QF_AUFBV )
-(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
-(declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (declare-fun const_arr4 () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (assert (=  (select const_arr4 (_ bv0 32) ) (_ bv171 8) ) )
 (assert (=  (select const_arr4 (_ bv1 32) ) (_ bv171 8) ) )
 (assert (=  (select const_arr4 (_ bv2 32) ) (_ bv171 8) ) )
@@ -976,9 +976,9 @@
 ;SMTLIBv2 Query 77
 (set-option :produce-models true)
 (set-logic QF_AUFBV )
-(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
-(declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (declare-fun const_arr3 () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (assert (=  (select const_arr3 (_ bv0 32) ) (_ bv12 8) ) )
 (assert (=  (select const_arr3 (_ bv1 32) ) (_ bv0 8) ) )
 (assert (=  (select const_arr3 (_ bv2 32) ) (_ bv0 8) ) )
@@ -1010,8 +1010,8 @@
 ;SMTLIBv2 Query 78
 (set-option :produce-models true)
 (set-logic QF_AUFBV )
-(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (declare-fun unnamed () (Array (_ BitVec 32) (_ BitVec 8) ) )
+(declare-fun unnamed_1 () (Array (_ BitVec 32) (_ BitVec 8) ) )
 (assert (let (  (?B0 ((_ extract 31  0)  (bvadd  (_ bv18446744073709532800 64) (bvmul  (_ bv4 64) ((_ sign_extend 32)  (concat  (select  unnamed_1 (_ bv3 32) ) (concat  (select  unnamed_1 (_ bv2 32) ) (concat  (select  unnamed_1 (_ bv1 32) ) (select  unnamed_1 (_ bv0 32) ) ) ) ) ) ) ) ) ) (?B1 (bvadd  (_ bv18446744073709532800 64) (bvmul  (_ bv4 64) ((_ sign_extend 32)  (concat  (select  unnamed_1 (_ bv3 32) ) (concat  (select  unnamed_1 (_ bv2 32) ) (concat  (select  unnamed_1 (_ bv1 32) ) (select  unnamed_1 (_ bv0 32) ) ) ) ) ) ) ) ) (?B2 (bvmul  (_ bv4 64) ((_ sign_extend 32)  (concat  (select  unnamed_1 (_ bv3 32) ) (concat  (select  unnamed_1 (_ bv2 32) ) (concat  (select  unnamed_1 (_ bv1 32) ) (select  unnamed_1 (_ bv0 32) ) ) ) ) ) ) ) ) (and (=  false (bvult  ?B2 (_ bv13 64) ) ) (and (=  false (bvult  (bvadd  (_ bv31312 64) ?B2 ) (_ bv1 64) ) ) (and (=  false (bvult  (bvadd  (_ bv31760 64) ?B2 ) (_ bv13 64) ) ) (and (=  false (bvult  (bvadd  (_ bv111120 64) ?B2 ) (_ bv1 64) ) ) (and (=  false (bvult  (bvadd  (_ bv18446744073709533360 64) ?B2 ) (_ bv1 64) ) ) (and (=  false (bvult  (bvadd  (_ bv18446744073709533328 64) ?B2 ) (_ bv1 64) ) ) (and (bvult  ?B1 (_ bv1 64) ) (=  (concat  (select  unnamed (_ bv3 32) ) (concat  (select  unnamed (_ bv2 32) ) (concat  (select  unnamed (_ bv1 32) ) (select  unnamed (_ bv0 32) ) ) ) ) (concat  (select  unnamed_1 (bvadd  (_ bv3 32) ?B0 ) ) (concat  (select  unnamed_1 (bvadd  (_ bv2 32) ?B0 ) ) (concat  (select  unnamed_1 (bvadd  (_ bv1 32) ?B0 ) ) (select  unnamed_1 ?B0 ) ) ) ) ) ) ) ) ) ) ) ) )  )
 (check-sat)
 (get-value ( (select unnamed_1 (_ bv0 32) ) ) )