AIM for today : - find and try alternative to make the analyser return from the function - if failed to find any worthy alternative then start changing the implementation of call_string to track gcalls* instead of return_edges
— PROGRESS : - I initially tried to look for some workarounds to make the call return from the function by making returning exploded nodes and edges at the time of the call itself but failed - so I created a local (experimental) branch and started hacking the call_string to maintain a vector of gcall* instead of return_superedge*. - I was able to modify all function execpt few, for which I either didn’t quite understood what should be changed or found discussing with you better before proceeding much better. They are as follows :- 1. call_string::validate () : ( this one performs sanity on the object ) earlier object was considered to be sane if the caller is the callee of previous entry, but how can I get caller from the gcall ? or when can I know that I have a correct vector of gcalls* ? 2. call_string::cmp (const call_string &a, const call_string &b) : ( this one is a comparator of the call-strings ) it was earlier comparing the index of edges and then length. for now I have just condensed it down to compare based on the size of gcall vector ( assuming more calls means deeper call stack ) 3. call_string::print (pretty_printer *pp): ( printer of the call-string ): how should the printed call stack look-like ? for me, it looks like maybe just tracking gcalls is not enough, or maybe I don’t know enough about the stuff I can access from from the gcalls ( I am currently looking into gcc/gimple.c for the all the possible actions I can take with a gimple statement ) STATUS AT THE END OF THE DAY :- - find and try alternative to make the analyser return from the function ( abandoned ) - if failed to find any worthy alternative then start changing the implementation of call_string to track gcalls* instead of return_edges ( pending ) Thank you - Ankur