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