diff --git a/svf/include/WPA/Andersen.h b/svf/include/WPA/Andersen.h index 1a5272cd3..201fd3db8 100644 --- a/svf/include/WPA/Andersen.h +++ b/svf/include/WPA/Andersen.h @@ -118,6 +118,8 @@ class AndersenBase: public WPAConstraintSolver, public BVDataPTAImpl NodeBS redundantGepNodes; + void solveConstraints(); + /// Statistics //@{ static u32_t numOfProcessedAddr; /// Number of processed Addr edge diff --git a/svf/lib/MemoryModel/PointerAnalysisImpl.cpp b/svf/lib/MemoryModel/PointerAnalysisImpl.cpp index f8e5448a9..07492752e 100644 --- a/svf/lib/MemoryModel/PointerAnalysisImpl.cpp +++ b/svf/lib/MemoryModel/PointerAnalysisImpl.cpp @@ -169,7 +169,7 @@ void BVDataPTAImpl::writeObjVarToFile(const string& filename) outs() << " error opening file for writing!\n"; return; } - + // Write BaseNodes insensitivity to file NodeBS NodeIDs; for (auto it = pag->begin(), ie = pag->end(); it != ie; ++it) @@ -185,7 +185,6 @@ void BVDataPTAImpl::writeObjVarToFile(const string& filename) f << "------\n"; - // Job finish and close file f.close(); if (f.good()) { @@ -193,6 +192,7 @@ void BVDataPTAImpl::writeObjVarToFile(const string& filename) return; } + } /*! diff --git a/svf/lib/WPA/Andersen.cpp b/svf/lib/WPA/Andersen.cpp index e895f5f6e..50d95c947 100644 --- a/svf/lib/WPA/Andersen.cpp +++ b/svf/lib/WPA/Andersen.cpp @@ -97,28 +97,9 @@ void AndersenBase::finalize() BVDataPTAImpl::finalize(); } -/*! - * Andersen analysis - */ -void AndersenBase::analyze() +void AndersenBase::solveConstraints() { - /// Initialization for the Solver - initialize(); - - bool readResultsFromFile = false; - if(!Options::ReadAnder().empty()) - { - readResultsFromFile = this->readFromFile(Options::ReadAnder()); - // Finalize the analysis - PointerAnalysis::finalize(); - } - - if (!Options::WriteAnder().empty()) - this->writeObjVarToFile(Options::WriteAnder()); - - if(!readResultsFromFile) - { - // Start solving constraints + // Start solving constraints DBOUT(DGENERAL, outs() << SVFUtil::pasMsg("Start Solving Constraints\n")); bool limitTimerSet = SVFUtil::startAnalysisLimitTimer(Options::AnderTimeLimit()); @@ -144,9 +125,30 @@ void AndersenBase::analyze() SVFUtil::stopAnalysisLimitTimer(limitTimerSet); DBOUT(DGENERAL, outs() << SVFUtil::pasMsg("Finish Solving Constraints\n")); +} + +/*! + * Andersen analysis + */ +void AndersenBase::analyze() +{ + /// Initialization for the Solver + initialize(); + bool readResultsFromFile = false; + if(!Options::ReadAnder().empty()) + { + readResultsFromFile = this->readFromFile(Options::ReadAnder()); + // Finalize the analysis + PointerAnalysis::finalize(); } + if (!Options::WriteAnder().empty()) + this->writeObjVarToFile(Options::WriteAnder()); + + if(!readResultsFromFile) + solveConstraints(); + if (!Options::WriteAnder().empty()) { this->writeToFile(Options::WriteAnder());