[cfe-dev] my experience with clang

Nuno Lopes nunoplopes at sapo.pt
Sat Dec 22 05:47:27 PST 2007


Hi,

As promised previously, I'll try to provide a review of clang. I'm not an 
expert on compilers by any means, though.

I used clang to make a static code analyzer tool, based on the ARCHER paper 
from Stanford, albeit simpler. It is able to detect both static and dynamic 
memory overflows. It only supports intra-procedural analysis. It also 
provides analysis for the PHP interpreter API varargs functions (printf 
style).
In case someone is interested, the full source-code is available at: 
http://web.ist.utl.pt/nuno.lopes/sirs-project.tar.bz2
It also includes a presentation of the project in Portuguese, as well as 
some examples of bugs that it is able to find.

My code doesn't use the clang analysis framework, as the path-sensitive 
analyzer wasn't ready by the time I started the project.

So, about clang.. It is a very nice tool with a low learning curve. really. 
I once tried to look to the gcc code and I gave up (I admit I didn't try too 
much, but..). From all the compiler tools I've worked so far, clang proved 
to be the easiest one. This is due to the nice C++/OOP usage, as well as an 
intuitive AST (if you know C, you know how the AST looks like).
A con of clang in the point of view of code analysis is that clang is 
optimized for IDEs. That means that some AST nodes could be removed 
altogether (e.g. ParenExpr). Also, similar expressions are represented 
differently:
int x=2;
and
int x; x=2;

This makes sense in the IDE world, but only makes things more difficult in 
the analysis world. But I'm not sure how clang could be improved any further 
about this point.
Also using clang as a gcc replacement is very difficult, mainly where you 
are using ./configure && make. I had to do a script to strip unknown 
options, as well as run gcc in parallel to clang (as ./configure usually 
checks if the compiler is able to create executable files).

If I would recomend clang? Yes, sure! Although the API is not stable, it's 
still a nice framework.


Thank you all, especially Ted, who was always ready to answer my questions 
with throughout explanations.

I hope you enjoyed my presence here and I hope this is not the end of my 
work in the compiler world :)


Regards,
Nuno Lopes

P.S.:  I feel I'm missing a lot of things, but I'll send another e-mail if I 
remember something important. 




More information about the cfe-dev mailing list