[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