[cfe-dev] usage of clang in an university project
Nuno Lopes
nunoplopes at sapo.pt
Sun Oct 7 11:29:00 PDT 2007
Thank you for your fast answer.
Today I was reading the clang code and I'm now trying to implement an
ASTConsumer, as I'll have to do a little more analysis that just checking
function calls. I also need to know when a particular variable used in the
function call is initialized or not as well as if it is not initialized by
the function call (through a pointer) whether it is used afterwards or not.
I still didn't know if this will be simple enough to do, but I'll try..
For now, I have just more two questions:
- is it possible to disable clang warnings and output just the warnings
I'll be generating? (I added a -parse-ast-sirs opt for me)
- can clang ignore parsing errors? e.g. if it can't find an header.h file
can it continue even if a function is called without being declared. This is
especially useful in my case because I'll be parsing the PHP sources (in C)
and I don't have all the external libraries that some PHP extensions rely
on, but I still would like to be able to analyse those extensions, though.
BTW, in attach you'll find a backtrace I got when doing executing
'clang -parse-ast-*'. It happens when I parse a PHP source file and when not
all include (-I) paths are specified. I took a quick look at those
functions, but I couldn't fix the bug myself.
Thanks,
Nuno
----- Original Message -----
From: "Chris Lattner" <clattner at apple.com>
To: "Nuno Lopes" <nunoplopes at sapo.pt>
Cc: <cfe-dev at cs.uiuc.edu>
Sent: Saturday, October 06, 2007 7:27 PM
Subject: Re: [cfe-dev] usage of clang in an university project
> On Oct 6, 2007, at 11:06 AM, Nuno Lopes wrote:
>> I was assigned a project for the security class in the university that
>> consists in doing some analisys of varargs function calls (C only).
>> Basically I need some form of an AST of a C file and a way to transverse
>> it.
>
> Sure, clang can do that very easily.
>
>> Do you think that clang is the best tool for the job? (btw, it has to be
>> delivered in mid-December). I already took a look to other projects,
>> like
>> ANTLR, GCCXML, a flex+bison grammar I found on the web, and even the
>> dump of
>> gcc -fdump-translation-unit, but noone seems to be appropriate (they
>> have a
>> big learning curve or they don't work well enough).
>>
>> So if you think that clang might do the job, can you please give me some
>> pointers to how to get started?
>
> The easiest thing to do is to get clang and build it. Then run the -
> parse-ast-print option. The code for this is implemented in the
> clang/AST/StmtPrinter.cpp file. That will give you an overview of using
> the AST for something simple.
>
> For you, you don't want to process all nodes, just calls. Given a Stmt
> for a function body, to walk the AST, you should be able to do something
> like this:
>
> void WalkAST(Stmt *S) {
> if (S == 0) return;
>
> if (CallExpr *Call = dyn_cast<CallExpr>(S)) {
> // Look at this call.
> }
>
> for (Stmt::child_iterator I = S->child_begin(), E = S->child_end (); I
> != E; ++I)
> WalkAST(*I);
> }
>
> -Chris
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: clang-bt.txt
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20071007/0aea8cfb/attachment.txt>
More information about the cfe-dev
mailing list