13 using namespace boost;
16 yices_expr
mainParse(vector<SgGraphNode*> expr, yices_context& ctx);
21 std::map<SgInitializedName*, yices_var_decl>
unknowns;
22 std::map<yices_var_decl, SgInitializedName*>
IName;
25 std::map<SgInitializedName*, std::vector<int> >
notMap;
28 std::map<std::vector<SgGraphNode*>, std::set<int> >
calledMap;
36 std::vector<std::vector<SgGraphNode*> >
vpaths;
37 void analyzePath(std::vector<VertexID>& pth);
49 std::vector<SgGraphNode*> path;
50 for (
unsigned int j = 0; j < pathR.size(); j++) {
61 if (path.back()->get_SgNode() == path.front()->get_SgNode()) {
62 vpaths.push_back(path);
67 std::map<SgNode*, std::vector<std::vector<SgGraphNode*> > >
FuncPathMap;
76 std::map<int, std::vector<SgGraphNode*> >
intvecmap;
81 std::vector<std::vector<SgGraphNode*> >
paths;
95 typedef boost::adjacency_list<
98 boost::bidirectionalS,
171 ROSE_ASSERT(sgfd != NULL);
173 ROSE_ASSERT(sgfdef != NULL);
176 std::vector<std::vector<SgGraphNode*> > funcPaths =
FuncPathMap[sgfdef];
177 ROSE_ASSERT(funcPaths.size() > 0);
178 int funcIndEnd = path[i]->get_SgNode()->cfgIndexForEnd();
179 if (path.size() > 1) {
182 while (indiec < funcIndEnd) {
184 if (path[kk]->get_SgNode() == path[i]->get_SgNode()) {
186 if (indiec == funcIndEnd) {
193 int startingpoint = kk;
198 std::vector<SgGraphNode*> oldpath = path;
199 std::vector<SgGraphNode*> newpath;
201 for (
int qe = 0; qe < startingpoint; qe++) {
202 newpath.push_back(path[qe]);
204 for (
size_t qe2 = 0; qe2 < funcPaths[0].size(); qe2++) {
205 newpath.push_back(funcPaths[0][qe2]);
207 for (
size_t qe3 = startingpoint; qe3 < path.size(); qe3++) {
208 newpath.push_back(path[qe3]);
218 if (funcPaths.size() == 1) {
221 for (
size_t qw = 1; qw < funcPaths.size(); qw++) {
223 std::vector<SgGraphNode*> npath;
224 for (
int qe = 0; qe < startingpoint; qe++) {
225 npath.push_back(path[qe]);
227 for (
size_t qe2 = 0; qe2 < funcPaths[qw].size(); qe2++) {
228 npath.push_back(funcPaths[qw][qe2]);
230 for (
size_t qe3 = startingpoint; qe3 < path.size(); qe3++) {
231 npath.push_back(path[qe3]);
239 paths.push_back(npath);
264 void analyzePath(std::vector<VertexID>& pth);
278 void analyzePath(std::vector<VertexID>& pth);
305 tltnodes += pathR.size();
337 str << cf <<
" expr: " << (*g)[v].exprstr;
339 else if ((*g)[v].vardec) {
341 str << cf <<
" vardec: " << (*g)[v].varstr;
346 std::string nodeColor =
"black";
347 o << cf <<
" [label=\"" <<
" num:" << str.str() <<
"\", color=\"" << nodeColor <<
"\", style=\"" <<
"solid" <<
"\"];\n";
354 o << src <<
" -> " << tar <<
" [label=\"" << src <<
" " << tar <<
"\", style=\"" <<
"solid" <<
"\"];\n";
363 std::stringstream filenam;
364 filenam <<
"hotness2" << currhot <<
".dot";
365 std::string fn = filenam.str();
368 mf <<
"digraph defaultName { \n";
373 for (tie(v, vend) = vertices(*g); v != vend; ++v)
379 for (tie(e, eend) = edges(*g); e != eend; ++e)
407 return "long long int";
410 return "long double";
421 yices_expr
evalFunction(std::vector<SgGraphNode*> path, yices_context& ctx,
bool mainFlag);
448 stringstream pathstream;
461 std::vector<SgGraphNode*> path;
463 std::vector<SgGraphNode*> exprPath;
464 for (
unsigned int j = 0; j < pathR.size(); j++) {
468 if (path.back()->get_SgNode() != path.front()->get_SgNode()) {
486 paths.push_back(path);
487 std::vector<SgNode*> called;
488 while (jjf !=
paths.size()) {
490 std::vector<SgGraphNode*> pathc =
paths[jjf];
492 while (jj != pathc.size()) {
497 ROSE_ASSERT(sgfd != NULL);
501 if (sgfdef != NULL) {
535 pathnumber +=
paths.size();
536 std::vector<SgNode*> ncalled;
538 for (
size_t q = 0; q <
paths.size(); q++) {
540 y <<
"yices" <<
qst + q <<
".txt";
542 string fileSaver =
"pathsets";
543 fout.open(fileSaver.c_str(),ios::app);
544 for (
size_t qr = 0; qr <
paths[q].size(); qr++) {
547 fout <<
"************************\n";
550 yices_enable_log_file((
char*) y.str().c_str());
561 std::vector<SgGraphNode*> path =
paths[q];
564 ROSE_ASSERT(path.front()->get_SgNode() == path.back()->get_SgNode());
565 yices_context ctx = yices_mk_context();
570 switch(yices_check(ctx)) {
575 yices_model m = yices_get_model(ctx);
581 for (
int yy = 0; yy < 4; yy++) {
582 std::cout <<
"unknownvdeclis.size(): " <<
unknownvdeclis.size() << std::endl;
584 yices_var_decl vdecli =
new yices_var_decl();
588 ROSE_ASSERT(sg != NULL);
589 ROSE_ASSERT(
IName.find(vdecli) !=
IName.end());
590 long* val =
new long;
591 yices_get_int_value(m,vdecli,val);
594 std::cout <<
"unknown " << sn.
getString() <<
" is: " << *val << std::endl;
595 notMap[sg].push_back(
int(*val));
609 if (yices_inconsistent(ctx)) {
610 std::cout <<
"********************" << std::endl;
611 std::cout <<
"inconsistent at yy: " << yy << std::endl;
612 std::cout <<
"********************" << std::endl;
619 std::cout <<
"*****************" << std::endl;
620 std::cout <<
"consistent at yy: " << yy << std::endl;
621 std::cout <<
"*****************" << std::endl;
653 yices_expr
evalFunction(std::vector<SgGraphNode*> path, yices_context& ctx,
bool mainFlag) {
660 std::vector<SgGraphNode*> exprPath;
702 while (i < (
int)path.size()) {
718 if (yices_inconsistent(ctx)) {
734 yices_expr ywrong = yices_mk_fresh_bool_var(ctx);
745 std::vector<SgGraphNode*> retpath;
749 while (path[j]->get_SgNode() != path[i]->get_SgNode()) {
750 retpath.push_back(path[j]);
753 if (j == (
int)path.size()) {
758 yices_expr retparse =
mainParse(retpath, ctx);
763 i += retpath.size()+2;
769 exprPath.push_back(path[i]);
770 if (path[i]->get_SgNode()->cfgIndexForEnd() == 0) {
780 char* fun = (
char*) funN.str().c_str();
781 char* valTypeCh = (
char*) typ_str.c_str();
782 yices_type ty = yices_mk_type(ctx, valTypeCh);
783 yices_var_decl vdecl = yices_mk_var_decl(ctx, fun, ty);
784 yices_expr e1 = yices_mk_var_from_decl(ctx, vdecl);
791 unsigned int k = i+1;
798 while (check < path[i]->get_SgNode()->cfgIndexForEnd()) {
799 if (path[i]->get_SgNode() == path[k]->get_SgNode()) {
801 if (check == path[i]->get_SgNode()->cfgIndexForEnd()) {
805 exprPath.push_back(path[k]);
808 exprPath.push_back(path[k]);
823 ROSE_ASSERT(y1 != NULL);
827 yices_assert(ctx, y1);
836 i += exprPath.size()+1;
842 std::vector<SgGraphNode*> internals;
843 std::vector<SgGraphNode*> exitStmt;
849 while (i < (
int)path.size() && path[i]->get_SgNode() != path[iorig]->get_SgNode()) {
854 exitStmt.push_back(path[i]);
865 while (i < (
int)path.size() && path[iorig]->get_SgNode() != path[i]->get_SgNode()) {
868 internals.push_back(path[i]);
875 if (internals.size() == 0) {
876 yices_expr wh =
mainParse(exitStmt, ctx);
877 yices_expr nwhile = yices_mk_not(ctx,wh);
878 yices_assert(ctx,nwhile);
885 while (path[i]->get_SgNode() != path[iorig]->get_SgNode()) {
893 yices_expr exityi =
mainParse(exitStmt, ctx);
894 yices_assert(ctx, exityi);
895 if (yices_inconsistent(ctx)) {
897 if (!yices_inconsistent(ctx)) {
922 yices_expr mP =
mainParse(exitStmt, ctx);
923 yices_expr nmP = yices_mk_not(ctx, mP);
924 yices_assert(ctx, nmP);
928 yices_expr yf = yices_mk_false(ctx);
929 yices_assert(ctx,yf);
945 std::vector<SgGraphNode*> internals;
946 std::vector<SgGraphNode*> initStmt;
947 std::vector<SgGraphNode*> exitStmt;
948 std::vector<SgGraphNode*> update;
956 while (path[i+1]->get_SgNode() != path[k]->get_SgNode()) {
957 initStmt.push_back(path[k]);
965 yices_expr yk =
mainParse(initStmt, ctx);
968 yices_assert(ctx, yk);
971 while (path[j]->get_SgNode() != path[k]->get_SgNode()) {
972 exitStmt.push_back(path[j]);
999 yices_expr exity =
mainParse(exitStmt, ctx);
1002 yices_expr notexp = yices_mk_not(ctx, exity);
1003 yices_assert(ctx, notexp);
1009 while (path[j]->get_SgNode() != path[i]->get_SgNode() && j < (
int)path.size()-1) {
1012 internals.push_back(path[j]);
1030 while (path[j]->get_SgNode() != path[i]->get_SgNode()) {
1031 update.push_back(path[j]);
1037 ROSE_ASSERT(path[j]->get_SgNode() == path[i]->get_SgNode());
1039 while(path[j]->get_SgNode() != path[i]->get_SgNode()) {
1053 yices_expr exityi =
mainParse(exitStmt, ctx);
1054 yices_assert(ctx, exityi);
1055 if (yices_inconsistent(ctx)) {
1057 if (!yices_inconsistent(ctx)) {
1069 yices_expr eupdate =
mainParse(update, ctx);
1070 yices_assert(ctx, eupdate);
1083 yices_expr ey =
mainParse(exitStmt, ctx);
1084 yices_expr eyn = yices_mk_not(ctx,ey);
1085 yices_assert(ctx,eyn);
1089 yices_expr yf = yices_mk_false(ctx);
1090 yices_assert(ctx,yf);
1160 std::vector<SgGraphNode*> fpath;
1161 while (path[k]->get_SgNode() != path[i+1]->get_SgNode()) {
1163 fpath.push_back(path[k]);
1176 ROSE_ASSERT(
isSgIfStmt(path[kk]->get_SgNode()));
1179 std::vector<CFGEdge> ed = cn.
inEdges();
1184 for (
size_t qt = 0; qt < ed.size(); qt++) {
1215 yices_assert(ctx, y1);
1219 yices_expr ynot = yices_mk_not(ctx,y1);
1220 yices_assert(ctx,ynot);
1231 std::vector<SgGraphNode*> fpath2;
1232 fpath2.push_back(path[kk2]);
1234 while (path[kk2]->get_SgNode() != path[kk+1]->get_SgNode() ||
opencfg->
toCFGNode(path[kk2]).
getIndex() != path[kk+1]->get_SgNode()->cfgIndexForEnd()) {
1237 fpath2.push_back(path[kk2]);
1240 if (kk2 == (
int)path.size()) {
1246 if (kk2 < (
int)path.size()) {
1247 fpath2.push_back(path[kk2]);
1249 if (kk2 == (
int)path.size()) {
1266 if (fpath2.size() != 0) {
1318 std::vector<SgGraphNode*> ses;
1319 ses.push_back(path[i]);
1320 while (path[i]->get_SgNode() != path[j]->get_SgNode()) {
1322 ses.push_back(path[j]);
1326 ses.push_back(path[j]);
1328 yices_assert(ctx, mP);
1444 SgNode* index = expr[0]->get_SgNode();
1445 std::vector<int> bounds(3, 0);
1448 while (expr[i]->get_SgNode() != index) {
1450 ROSE_ASSERT(i < expr.size());
1454 bounds[2] = expr.size()-1;
1471 std::vector<SgGraphNode*>
getSlice(std::vector<SgGraphNode*> vv,
int i) {
1472 int cfgEnd = vv[i]->get_SgNode()->cfgIndexForEnd();
1474 std::vector<SgGraphNode*> slice;
1477 slice.push_back(vv[i]);
1480 slice.push_back(vv[i]);
1483 ROSE_ASSERT(cfgEnd != ind);
1485 if (vv[i]->get_SgNode() == vv[k]->get_SgNode()) {
1487 if (ind == cfgEnd) {
1488 slice.push_back(vv[k]);
1492 slice.push_back(vv[k]);
1507 yices_expr
mainParse(vector<SgGraphNode*> expr, yices_context& ctx) {
1514 std::stringstream stst;
1517 std::vector<SgGraphNode*> vec1;
1518 std::vector<SgGraphNode*> vec2;
1521 if (expr.size() == 0) {
1522 yices_expr empty =
new yices_expr;
1532 std::vector<SgGraphNode*> toSolve;
1533 for (
size_t j = 1; j < expr.size()-1; j++) {
1534 toSolve.push_back(expr[j]);
1536 yices_expr ts =
mainParse(toSolve, ctx);
1542 yices_var_decl ftydecl;
1552 const char* ty_const_char = ty_str.c_str();
1553 yices_type rty = yices_mk_type(ctx,(
char*)ty_const_char);
1555 yices_type dom[sipl.size()];
1557 for (SgInitializedNamePtrList::iterator ii = sipl.begin(); ii != sipl.end(); ii++) {
1558 string domY =
getType((*ii)->get_type());
1559 yices_type typdom = yices_mk_type(ctx,(
char*)domY.c_str());
1569 fty = yices_mk_function_type(ctx, dom, ds, rty);;
1570 ftydecl = yices_mk_var_decl(ctx, (
char*) nam.str().c_str(),fty);
1571 f = yices_mk_var_from_decl(ctx, ftydecl);
1581 if (i > (
int)expr.size()) {
1583 yices_expr empty =
new yices_expr;
1589 std::vector<yices_expr> argsyices;
1590 std::vector<SgGraphNode*> yexp;
1591 while (checks != (
int)expr[i]->get_SgNode()->cfgIndexForEnd()) {
1593 while (expr[j]->get_SgNode() != expr[i]->get_SgNode()) {
1594 yexp.push_back(expr[j]);
1596 if (j >= (
int)expr.size()) {
1598 yices_expr empty =
new yices_expr;
1612 ROSE_ASSERT(yex != NULL);
1613 argsyices.push_back(yex);
1619 yices_expr argsaryices[argsyices.size()];
1620 for (
size_t tt = 0; tt < argsyices.size(); tt++) {
1621 argsaryices[tt] = argsyices[tt];
1624 yices_expr app = yices_mk_app(ctx,f,argsaryices,argsyices.size());
1630 SgInitializedNamePtrList::iterator ite = sinp.begin();
1632 for (ite = sinp.begin(); ite != sinp.end(); ite++) {
1638 nameOf[svs] = funN.str();
1640 yices_type ty1 = yices_mk_type(ctx, (
char*) valType.c_str());
1641 yices_var_decl decl1 = yices_mk_var_decl(ctx, (
char*) funN.str().c_str(), ty1);
1642 yices_expr e1 = yices_mk_var_from_decl(ctx, decl1);
1649 ROSE_ASSERT(argsyices[argnum] != NULL);
1650 getExpr[svs] = argsyices[argnum];
1652 yices_expr exp = yices_mk_eq(ctx,e1,argsyices[argnum]);
1653 yices_assert(ctx,exp);
1671 std::vector<SgGraphNode*> funcLine;
1681 while (check2 < (
int)expr[k]->get_SgNode()->cfgIndexForEnd()) {
1682 if (expr[k]->get_SgNode() == expr[j]->get_SgNode()) {
1692 funcLine.push_back(expr[j]);
1697 std::vector<SgGraphNode*> funcLine2;
1698 for (
size_t kk = 1; kk < funcLine.size()-1; kk++) {
1699 funcLine2.push_back(funcLine[kk]);
1709 yices_expr funcexp =
evalFunction(funcLine2, ctx,
false);
1710 ROSE_ASSERT(funcexp != NULL);
1716 else if (
isSgNotOp(expr[0]->get_SgNode())) {
1717 ret = yices_mk_fresh_bool_var(ctx);
1720 while (curr->
get_SgNode() != expr[0]->get_SgNode()) {
1721 vec1.push_back(curr);
1725 yices_expr e1 = yices_mk_fresh_bool_var(ctx);
1727 ret = yices_mk_not(ctx, e1);
1731 ret = yices_mk_fresh_bool_var(ctx);
1734 std::map<int, std::vector<SgGraphNode*> > vec;
1735 std::vector<SgGraphNode*> vecX;
1744 if (expr[qt]->get_SgNode() == expr[0]->get_SgNode()) {
1750 vecX.push_back(expr[qt]);
1765 yices_expr e1 = yices_mk_fresh_bool_var(ctx);
1766 yices_expr e2 = yices_mk_fresh_bool_var(ctx);
1777 if (vec2.size() != 0) {
1782 if (vec1.size() == 0 && ls ==
"and") {
1783 e1 = yices_mk_false(ctx);
1785 else if (vec1.size() == 0 && ls ==
"or") {
1786 e1 = yices_mk_true(ctx);
1788 else if (vec2.size() == 0 && ls ==
"and") {
1789 e2 = yices_mk_false(ctx);
1791 else if (vec2.size() == 0 && ls ==
"or") {
1792 e2 = yices_mk_true(ctx);
1800 ret = yices_mk_or(ctx, arr, 2);
1802 else if (ls ==
"and") {
1803 ret = yices_mk_and(ctx, arr, 2);
1827 std::vector<SgGraphNode*> vecX;
1828 std::map<int, std::vector<SgGraphNode*> > vec;
1829 while (check < (
int)expr[0]->get_SgNode()->cfgIndexForEnd()) {
1830 if (expr[0]->get_SgNode() == expr[i]->get_SgNode()) {
1834 if (check == (
int)expr[0]->get_SgNode()->cfgIndexForEnd()) {
1838 if (expr[0]->get_SgNode() != expr[i]->get_SgNode()) {
1839 vecX.push_back(expr[i]);
1861 ret = yices_mk_fresh_bool_var(ctx);
1864 if (parsed ==
">") {
1865 ret = yices_mk_gt(ctx,e1, e2);
1867 else if (parsed ==
"<") {
1868 ret = yices_mk_lt(ctx, e1, e2);
1870 else if (parsed ==
"=") {
1871 ret = yices_mk_eq(ctx, e1, e2);
1873 else if (parsed ==
"!=") {
1874 ret = yices_mk_diseq(ctx, e1, e2);
1876 else if (parsed ==
"<=") {
1877 ret = yices_mk_le(ctx, e1, e2);
1879 else if (parsed ==
">=") {
1880 ret = yices_mk_ge(ctx, e1, e2);
1887 ROSE_ASSERT(ret != NULL);
1895 yices_expr yicesarr[2];
1901 ret = yices_mk_sum(ctx, yicesarr, 2);
1903 else if (bop ==
"-") {
1904 ret = yices_mk_sub(ctx, yicesarr, 2);
1906 else if (bop ==
"*") {
1907 ret = yices_mk_mul(ctx, yicesarr, 2);
1922 for (
size_t i = 1; i < expr.size() - 1; i++) {
1923 vec1.push_back(expr[i]);
1928 funN <<
"V" <<
nvars;
1935 yices_expr en = yices_mk_num(ctx, 1);
1938 ret = yices_mk_sum(ctx, arr, 2);
1941 else if (
isAtom(expr[0]->get_SgNode()) !=
"") {
1942 string ty =
isAtom(expr[0]->get_SgNode());
1945 ret = yices_mk_num(ctx, ival);
1950 else if (ty ==
"double") {
1954 ret = yices_mk_num(ctx, dval);
1956 else if (ty ==
"float") {
1960 ret = yices_mk_num(ctx, fval);
1962 else if (ty ==
"short") {
1966 ret = yices_mk_num(ctx, sval);
1968 else if (ty ==
"long") {
1972 ret = yices_mk_num(ctx, lval);
1974 else if (ty ==
"long long int") {
1978 ret = yices_mk_num(ctx, llval);
1980 else if (ty ==
"long double") {
1984 ret = yices_mk_num(ctx, lldval);
1986 else if (ty ==
"bool") {
1990 ret = yices_mk_true(ctx);
1994 ret = yices_mk_false(ctx);
2023 string valType =
getType(typ);
2024 char* valTypeCh = (
char*) valType.c_str();
2028 nameOf[svs] = stst.str();
2030 char* fun = (
char*) stst.str().c_str();
2031 yices_type ty = yices_mk_type(ctx, valTypeCh);
2032 yices_var_decl vdecl = yices_mk_var_decl(ctx, fun, ty);
2033 e1 = yices_mk_var_from_decl(ctx, vdecl);
2042 std::vector<SgGraphNode*> vec1;
2050 string valType =
getType(typ);
2071 vec1.push_back(expr[2]);
2075 while ( check < (
int)expr[2]->get_SgNode()->cfgIndexForEnd()) {
2076 if (expr[2]->get_SgNode() == expr[p]->get_SgNode()) {
2078 if (check >= (
int)expr[2]->get_SgNode()->cfgIndexForEnd()) {
2082 vec1.push_back(expr[p]);
2087 vec1.push_back(expr[p]);
2102 nameOf[svs] = funN.str();
2107 char* fun = (
char*) funN.str().c_str();
2112 char* valTypeCh = (
char*) valType.c_str();
2119 yices_type ty = yices_mk_type(ctx, valTypeCh);
2120 yices_var_decl vdecl = yices_mk_var_decl(ctx, fun, ty);
2121 yices_expr e1 = yices_mk_var_from_decl(ctx, vdecl);
2143 yices_expr jvexpr =yices_mk_num(ctx, jv);
2144 yices_expr ei = yices_mk_diseq(ctx, e1, jvexpr);
2145 yices_assert(ctx,ei);
2152 ret = yices_mk_eq(ctx, e1, e1);
2165 ROSE_ASSERT(e1 != NULL);
2166 ROSE_ASSERT(e2 != NULL);
2167 ret = yices_mk_eq(ctx, e1, e2);
2179 std::vector<SgGraphNode*> expr2;
2182 for (
size_t tt = 1; tt < expr.size()-1; tt++) {
2183 expr2.push_back(expr[tt]);
2201 string valType =
getType(typ);
2202 for (
int j = bounds[1]+1; j < bounds[2]; j++) {
2203 vec2.push_back(expr[j]);
2211 yices_type ty1 = yices_mk_type(ctx, (
char*) valType.c_str());
2212 yices_var_decl decl1 = yices_mk_var_decl(ctx, (
char*) ss.str().c_str(), ty1);
2213 yices_expr e1 = yices_mk_var_from_decl(ctx, decl1);
2217 ret = yices_mk_eq(ctx, e1, e1);
2221 ret = yices_mk_eq(ctx, e1, e2);
2235 char valTypeCh[valType.size()];
2236 for (
size_t k = 0; k < valType.size(); k++) {
2237 valTypeCh[k] = valType[k];
2239 char nam[ss.str().size()];
2240 for (
size_t q = 0; q < ss.str().size(); q++) {
2241 nam[q] = ss.str()[q];
2243 string fun = valType;
2245 yices_type ty = yices_mk_type(ctx, (
char*) valType.c_str());
2246 yices_var_decl decl1 = yices_mk_var_decl(ctx,(
char*) ss.str().c_str(), ty);
2247 yices_expr e1 = yices_mk_var_from_decl(ctx, decl1);
2253 ret = yices_mk_eq(ctx, e1, e2);
2270 std::vector<SgGraphNode*> nexpr;
2271 for (
size_t q = 1; q < expr.size()-1; q++) {
2272 nexpr.push_back(expr[q]);
2283 yices_expr y1 = yices_mk_fresh_bool_var(ctx);
2307 return "long long int";
2310 return "long double";
2446 string y =
"yices.txt";
2447 yices_enable_log_file((
char*) y.c_str());
2449 string fileSaver =
"saviorStuff";
2454 ROSE_ASSERT (proj != NULL);
2462 std::vector<SgNode*> funcs;
2463 for (Rose_STL_Container<SgNode*>::iterator i = functionDefinitionList.begin(); i != functionDefinitionList.end(); i++) {
2466 ROSE_ASSERT(fni != NULL);
2468 funcs.push_back(fni);
2474 for (
unsigned int i = 0; i < funcs.size(); i++) {
2486 string fileName= functionDeclaration->
get_name().
str();
2487 string dotFileName1;
2488 ss << fileName <<
"." << counter <<
".dot";
2490 dotFileName1 = ss.str();
2505 std::vector<std::vector<SgGraphNode*> > vp = visfunc->
vpaths;
2506 ROSE_ASSERT(sfdd != NULL);
2577 cout <<
"filename: " << fileName << std::endl;
2578 cout <<
"finished" << std::endl;
2579 cout <<
"paths: " << vis->
pathnumber <<
" ipaths: " <<
ipaths << std::endl;