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
>>>
>>

Reply via email to