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

Nuno Lopes nunoplopes at sapo.pt
Sun Oct 7 12:13:29 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..
>
> Ok, the dataflow framework Ted is working on will be useful to you.   We 
> don't really support interprocedural analysis yet though.

No, I don't need interprocedural analysis right now. For now, I'll just code 
what the functions do. e.g.:
zend_parse_parameters(ZEND_NUM_ARGS(), "s|d", &str, &str_len, &integer);

I know that str and str_len will get initialized (unless the function 
returns FAILURE) and that integer may or may not be initialized. So for now, 
I'll have all the information hard-coded. Maybe next year I can do my master 
thesis with clang/llvm and use interprocedural analysis.


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

OK, thanks, I'll check it out.


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

It could just ignore type checking and such kind of checks, as I don't need 
that. It is enough for me to have the function/type names without further 
information.
Do you think I can workaround this? It's very very important for this 
particular project.


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

damn..


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

Attached.


Thanks,
Nuno 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: php_pcre.c.clang.i
Type: application/octet-stream
Size: 28612 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20071007/a1396941/attachment.obj>


More information about the cfe-dev mailing list