OK, I think I know how to solve it. Just return TODO_update_ssa <https://code.woboq.org/gcc/gcc/tree-pass.h.html#249>.
On Sun, Jun 21, 2020 at 5:34 PM Shuai Wang <wangshuai...@gmail.com> wrote: > Hello, > > I am doing instrumentation of GIMPLE code by adding extra coverage > counters at each basic block. Basically it's > mimicking -fsanitize-coverage=trace-pc, where the only difference is > that __sanitizer_cov_trace_pc (the default > hander of fsanitize-coverage=trace-pc) has no input parameters, but my > coverage hander has a parameter of basic block id. > > My current issue is that after the instrumentation of one function, the > plugin throws an exception at the following gcc_assert and do not proceed > to instrument another function: > > if (flags & TODO_cleanup_cfg) > cleanup_tree_cfg (flags & TODO_update_ssa_any); > else if (flags & TODO_update_ssa_any) > update_ssa (flags & TODO_update_ssa_any); > gcc_assert (!need_ssa_update_p (fn)); <---------- line 1954 of > gcc/passes.c for gcc 10.1.0 > > This really confused me, because when I print out the instrumented GIMPLE > code and compare with fsanitize-coverage=trace-pc, I don't see a major > difference here: > > ====== my instrumented GIMPLE code =========== > > fun2 () > { > int D.2588; > int _3; > > <bb 2> : > __sanitizer_cov_trace_pc (2); <--- my coverage hander with basic block id > as the input > __builtin_puts (&"fun2"[0]); > _3 = 0; > > <bb 3> : > <L0>: > __sanitizer_cov_trace_pc (3); > return _3; > > } > > ======= the corresponding instrumented GIMPLE code by > fsanitize-coverage=trace-pc ===== > > fun2 () > { > int D.2760; > int _3; > > <bb 2> [0.00%]: > __builtin___sanitizer_cov_trace_pc (); > __builtin_puts (&"fun2"[0]); > _3 = 0; > > <L0> [0.00%]: > __builtin___sanitizer_cov_trace_pc (); > return _3; > > } > > There is no big difference here. Could anyone shed some lights on why an > exception on "need_ssa_update_p" is thrown? I don't think there is an need to > udpate any "SSA" here.. Thank you very much. > > Best, > > Shuai > >