OK, I got it. Just a simple gimple_call_internal_p. Shuai
On Tue, Jun 9, 2020 at 4:31 PM Shuai Wang <wangshuai...@gmail.com> wrote: > Hello, > > All right, now I know how to print out GIMPLE internal functions. I do the > following and it won't crash: > > const gcall* a = as_a <const gcall *> (stmt); > const char * tt = > internal_fn_name(gimple_call_internal_fn(a)); > > However, just a follow-up question, how can I actually distinguish GIMPLE > internal functions with "normal" function? Thank you very much! > > Best, > Shuai > > On Tue, Jun 9, 2020 at 3:50 PM Shuai Wang <wangshuai...@gmail.com> wrote: > >> Dear Richard, >> >> Thank you for the information. Yes, that makes sense to me. >> >> Nevertheless, is there any chance that I can still pinpoint this special >> function call? Currently I can iterate all GIMPLE call statements, but how >> to exactly figure out ASAN_MARK seems quite obscure. >> >> Thank you! >> >> Best, >> Shuai >> >> On Tue, Jun 9, 2020 at 3:48 PM Richard Biener <richard.guent...@gmail.com> >> wrote: >> >>> On Tue, Jun 9, 2020 at 3:38 AM Shuai Wang via Gcc <gcc@gcc.gnu.org> >>> wrote: >>> > >>> > Hello! >>> > >>> > I am writing to report a potential bug I encountered when playing with >>> the >>> > GIMPLE IR. I enabled the ASan and would like to print out all ASAN_MARK >>> > statements for the following simple code: >>> > >>> > int main(int argc ,char **argv) >>> > { >>> > int stack_array[100]; >>> > stack_array[1] = 100; >>> > stack_array[argc + 12]; // an ASan check, namely, ASAN_MARK, will >>> > be inserted at this point >>> > } >>> > >>> > And I am using the following code snippet (basically derived from this >>> > post < >>> https://stackoverflow.com/questions/29346772/print-called-function-name-using-gcc-plugin >>> >) >>> > to print out all function calls, including ASAN_MARK: >>> > >>> > if (is_gimple_call(stmt)){ >>> > tree current_fn_decl = gimple_call_fndecl(stmt); >>> > const char* name = get_name(current_fn_decl); >>> > cerr << " Function : " << name << " is called \n"; >>> > } >>> > >>> > However, I note that some internal exceptions are encountered, when I >>> > use gcc version 7.4, 8.3, and also 9.3: >>> > >>> > test.c: In function ‘main’: >>> > test.c:9:5: internal compiler error: Segmentation fault >>> > 9 | int main(int argc ,char **argv) >>> > | ^~~~ >>> > 0xab88bf crash_signal >>> > ../../gcc-9.3.0/gcc/toplev.c:326 >>> > 0xcfc836 location_wrapper_p(tree_node const*) >>> > ../../gcc-9.3.0/gcc/tree.h:3812 >>> > 0xcfc836 tree_nop_conversion >>> > ../../gcc-9.3.0/gcc/tree.c:12850 >>> > 0xcfc836 tree_strip_nop_conversions(tree_node*) >>> > ../../gcc-9.3.0/gcc/tree.c:12888 >>> > 0xcfc836 get_name(tree_node*) >>> > ../../gcc-9.3.0/gcc/tree.c:12559 >>> > 0x7f9466d86bb7 execute >>> > >>> >>> /home/shuaiw/work/sanitizer_reduction_gcc/demo/walk_gimple/walk_gimple.cc:61 >>> > Please submit a full bug report, >>> > with preprocessed source if appropriate. >>> > Please include the complete backtrace with any bug report. >>> > See <https://gcc.gnu.org/bugs/> for instructions. >>> > Makefile:10: recipe for target 'test' failed >>> > make: *** [test] Error 1 >>> > >>> > >>> > I think the issue is due to ASAN_MARK, because when I comment out that >>> > particular array access which induces the ASAN_MARK, all other function >>> > calls, including ASan related functions, __builtin___asan_init >>> > and __builtin___asan_version_mismatch_check_v8, and be smoothly >>> printed out >>> > with no issue. >>> > >>> > Can I interpret it as a bug or somewhat? Any suggestions are welcomed. >>> > Thank you very much. >>> >>> ASAN_MARK is likely an internal function which does not have a function >>> declaration so you feed get_name a NULL pointer. >>> >>> > >>> > Best, >>> > Shuai >>> >>