soot-oss / soot

Soot - A Java optimization framework
GNU Lesser General Public License v2.1
2.86k stars 707 forks source link

Large SCC (strongly connected components) in call graph #1353

Open coder-chenzhi opened 4 years ago

coder-chenzhi commented 4 years ago

I use StronglyConnectedComponents.getSuperGraph() to get the compact representation of call graph of Apache Cassandra. The call graph is generated by using Spark points-to analysis. I find that there is a large SCC in the call graph, which has more than 10K methods. However, it seems that some methods in the SCC are not reachable from each other. If I don't misunderstand, any methods are reachable from each other in the same SCC. Can anyone give me any hints about this problem?

benSepanski commented 3 years ago

I have a similar issue. I think it may have to do with how isForward is set in the StronglyConnectedComponents#iterate method here. I think it causes the wrong branch here to be taken when a node is backtracked to