AIM for today : - get "state_purge_per_ssa_name::process_point () “ to go from the “return" supernode to the “call” supernode. - fix bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100546 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100546> in the process - test and observe the effect of changes done so far on vfunc calls
— PROGRESS : - In order to go from “return” supernode to “call” supernode, I used the fact that return supernode will have GIMPLE call statement which when passed to “get_supernode_for_stmt ()” returns pointer to “call” supernode. now that part of the function look something like this File: {SCR_DIR}/gcc/analyzer/state-purge.cc <http://state-purge.cc/> 347: /* Add any intraprocedually edge for a call. */ 348: if (snode->m_returning_call) 349: { 350: cgraph_edge *cedge 351: = supergraph_call_edge (snode->m_fun, 352: snode->m_returning_call); 353: if(!cedge) 354: { 355: supernode* callernode = map.get_sg ().get_supernode_for_stmt(snode->m_returning_call); 356: gcc_assert (callernode); 357: add_to_worklist 358: (function_point::after_supernode (callernode), 359: worklist, logger); 360: } 361: else 362: { 363: gcc_assert (cedge); 364: superedge *sedge 365: = map.get_sg ().get_intraprocedural_edge_for_call (cedge); 366: gcc_assert (sedge); 367: add_to_worklist 368: (function_point::after_supernode (sedge->m_src), 369: worklist, logger); 370: } 371: } - now the patch also fixes bug #100546 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100546 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100546>) and doesn’t give out a false report about dereferencing a null pointer which will never happen. - now I tested it with vfuncs to see what happens in that case, the results were as expected where the analyzer detects the call to virtual function and split call and returning supernodes, but did not understand which function to calll, making nodes after it unreachable. - Now If we somehow able to update the regional model to understand which function is called ( or may be called ) then the analyzer can now easily call and analyze that virtual function call. STATUS AT THE END OF THE DAY :- - get "state_purge_per_ssa_name::process_point () “ to go from the “return" supernode to the “call” supernode. ( done ) - fix bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100546 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100546> in the process. ( done ) - test and observe the effect of changes done so far on vfunc calls ( done ) — P.S. regarding the patch I sent to mailing list yesterday. I found it, apparently the mail was detected as a "spam mail” by my system and was redirected to my spam inbox. Btw I am also attaching that patch file with this mail for the records. Thank you - Ankur