[cfe-commits] [PATCH] -rewrite-includes

Sebastian Redl sebastian.redl at getdesigned.at
Thu Mar 15 01:54:45 PDT 2012


On 15.03.2012, at 02:12, Lubos Lunak wrote:

> 
> Hello,
> 
> the attached patch is an attempt at option -rewrite-includes, which is 
> similar to -rewrite-macros, but it expands only #include directives.
> 
> The primary motivation is a better functionality of clang together with 
> icecream, a distributed compile system (like distcc, only better, 
> http://en.opensuse.org/Icecream). Remote compilation works by first 
> preprocessing the file and sending the result for actual compilation. This 
> difference doesn't matter with gcc, but clang disables some warnings for code 
> expanded from macros, and also quotes source code, both of which no longer 
> work well in the preprocessed case. So the idea is to add -rewrite-includes, 
> which will only merge all included files into the resulting file, without any 
> other modifications, and the result will be normally compiled again.
> 
> The code is based on RewriteMacros.cpp and PrintPreprocessedOutput.cpp, it 
> more or less works now and I consider it almost ready. The only remaining 
> problem I have is commenting out the preprocessor directives - I'd like to 
> keep them in the resulting file, similarly to what -rewrite-macros does. The 
> problem is that neither /**/ nor // are safe for commenting it out in all 
> possible cases, and since this should be used for transparent conversion 
> during remote compile, I do not want to make assumptions about what the code 
> looks like (e.g. my first trivial solution with /**/ failed 
> on "#include /*MSVC <cstdlib> */ <stdlib.h>" ). Does somebody know how to 
> achieve this? Otherwise I'll probably make it simply erase the directives.

Why isn't // safe?

Sebastian



More information about the cfe-commits mailing list