[cfe-users] Parsing C code looking for Basic Blocks

Anna Zaks ganna at apple.com
Tue Mar 19 10:42:22 PDT 2013


On Mar 19, 2013, at 8:43 AM, Harald Servat <harald.servat at bsc.es> wrote:

> El dt 19 de 03 de 2013 a les 12:43 +0100, en/na Harald Servat va
> escriure:
>> Dear list,
>> 
>>  I'm a newcommer to Clang/LLVM and I'm not sure whether this is the
>> correct place to ask this topic. If it's not, would you mind to point me
>> to the correct place/list?
>> 
>>  I'm looking for a mechanism to detect basic blocks in C codes
>> (optionally C++, and eventually Fortran, in a future). I'm wondering
>> whether how can Clang help me? Is it an appropriate tool for doing such
>> thing? I'm not looking for something very difficult (I think). 
>> 
>>  Imagine I have the following code (line numbering on the left, source
>> code on the right)
>> 
>> 01: void foo(void)
>> 02: {
>> 03:    int a = 10;
>> 04:    int b = 11;
>> 05:    if (a > b)
>> 06:    {
>> 07:       printf ("a is greater than b\n");
>> 08:    }
>> 09:    else
>> 10:   {
>> 11:      printf ("b is greater or equal than a\n");
>> 12:   }
>> 13: }
>> 
>>  I'd like to have a obtain a list of pairs that delimit the basic
>> blocks of the code. For the previous example, for instance it should
>> return something like : [01-05], [06-08], [10-12]. 
>> 
>>  Is there any Clang mechanism to provide such information? If not, is
>> it possible to do it through Clang?
>> 
>> Thank you very much!
>> 
>> 
>> 
>> WARNING / LEGAL TEXT: This message is intended only for the use of the
>> individual or entity to which it is addressed and may contain
>> information which is privileged, confidential, proprietary, or exempt
>> from disclosure under applicable law. If you are not the intended
>> recipient or the person responsible for delivering the message to the
>> intended recipient, you are strictly prohibited from disclosing,
>> distributing, copying, or in any way using this message. If you have
>> received this communication in error, please notify the sender and
>> destroy and delete any copies you may have received.
>> 
>> http://www.bsc.es/disclaimer
>> _______________________________________________
>> cfe-users mailing list
>> cfe-users at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users
> 
> Hello,
> 
>  I found the following command exceptionally useful for the purposes I
> wanted:
> 
>    clang -cc1 -ast-dump file.c
> 
This would dump AST, not Basic Blocks from Control Flow Graph. Clang does have CFG as well. 
To view/dump CFG use debug.ViewCFG or debug.DumpCFG checkers: 
$ clang -cc1 -analyze -analyzer-checker=debug.Dump/CFG test.c

Note, this is a debugging facility and not a user feature of clang, so the interface is not guaranteed to be stable.

Cheers,
Anna.
>  With that and some scripting I can do what I was looking for.
> 
> Thank you and sorry for disturbing your mailboxes
> 
> 
> 
> WARNING / LEGAL TEXT: This message is intended only for the use of the
> individual or entity to which it is addressed and may contain
> information which is privileged, confidential, proprietary, or exempt
> from disclosure under applicable law. If you are not the intended
> recipient or the person responsible for delivering the message to the
> intended recipient, you are strictly prohibited from disclosing,
> distributing, copying, or in any way using this message. If you have
> received this communication in error, please notify the sender and
> destroy and delete any copies you may have received.
> 
> http://www.bsc.es/disclaimer
> _______________________________________________
> cfe-users mailing list
> cfe-users at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20130319/7a2546e4/attachment.html>


More information about the cfe-users mailing list