Hi Revital,
Because of doing copy, paste I forgot to delete one line from the CASE
1 example:
Instead:
> /* below I pass a the tree of the current_function_decl a global
> variable in tree.h */
> this_cfun = DECL_STRUCT_FUNCTION(current_function_decl);
> FOR_EACH_BB_FN(bb, this_cfun) /* Crashes here, Also tried with
> FOR_EACH_BB */
> for (bsi = bsi_start(bb); !bsi_end_p(bsi); bsi_next(&bsi))
> {
> bsi_stmt(bsi);
> }
> bsi = bsi_for_stmt(current_function_decl); /* Crashes right here */
> }
I have:
/* below I pass a the tree of the current_function_decl a global
variable in tree.h */
this_cfun = DECL_STRUCT_FUNCTION(current_function_decl);
FOR_EACH_BB_FN(bb, this_cfun)
/* Crashes here, Also tried with FOR_EACH_BB */
for (bsi = bsi_start(bb); !bsi_end_p(bsi); bsi_next(&bsi))
{
bsi_stmt(bsi);
}
}
And the code crashes at the macro FOR_EACH_BB_FN.. This is exatly as
it is implemented in cgraph_create_edges() function.. but I think that
the problem is because I call it at wrong time (too early, or too late
- before or after parsing).. Could it be?
When cgraph_create_edges() function is called it is passed a
function's declaration tree. In my case I also pass a function
declaration tree:
this_cfun = DECL_STRUCT_FUNCTION(current_function_decl);
where this_cfun is used in macro FOR_EACH_BB_FN
bsi_for_stmt(current_function_decl); does not seems correct to me
as it should return the function's declaration's basic block
iterator; which does not belongs to bb.
I am sorry this statement shouldn't be in the code. I have it in CASE2
that is a different way I tried to do my implementation/
I think you are also missing some statement to get the current
tree node in the loop:
tree stmt = bsi_stmt (bsi);
and later recursively manipulate it with walk_tree ().
The execution actually does not reach this part of the code. I had it
written but, decided to remove them until solvin the problem with the
correct initialization of bb (basic blok) with the FOR_EACH_BB_FN
macro.
Ferad Zyulkyarov