[cfe-dev] usage of clang in an university project

Chris Lattner clattner at apple.com
Sun Oct 7 11:41:52 PDT 2007


On Oct 7, 2007, at 11:29 AM, Nuno Lopes wrote:

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

Ok, the dataflow framework Ted is working on will be useful to you.   
We don't really support interprocedural analysis yet though.

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

Yes.  The Diagnostic class handles mapping of warnings and other  
diagnostics to error levels.

Just call Diagnostics->setDiagnosticMapping(somediag,  
diag::MAP_IGNORE); to ignore somediag.

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

No, not in full generality.  In C you need information about types to  
be able to parse, for example.

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

You may have some luck, but in general it won't work well.

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

Please create a .i file with clang and send that in:  clang  
whatever.c -E > output.i

-Chris



More information about the cfe-dev mailing list