[cfe-dev] Preprocessing and whitespace collapsing

Argyrios Kyrtzidis akyrtzi at gmail.com
Tue Jan 14 10:35:44 PST 2014


On Jan 13, 2014, at 9:46 PM, Anders Bakken <agbakken at gmail.com> wrote:

> Hi
> 
> We're using to make an indexer daemon which can be queried from emacs
> (or other editors if so desired). In doing this we, for various
> reasons, preprocess the file first using internal APIs and then invoke
> clang_parseTranslationUnit on the preprocessed content. The code for
> this is here:
> 
> https://github.com/Andersbakken/rtags/blob/multi-process/src/RTagsClang.cpp
> 
> Starting at line 450.
> 
> The problem we're facing is that clang seems to collapse things like this:
> 
> struct A
> {
>    void               foo();
> };
> 
> into this:
> 
> struct A
> {
>    void foo();
> };
> 
> int main()
> {
>    A a;
>    a.foo();
> }
> 
> I realize the standard (at least according to GCC) permits this and
> that it of course would speed up parsing of the resulting code ever so
> slightly. My question is, is it possible to:
> 
> A) Turn this behavior off with an option?

Yes, with "-traditional-cpp”

-Argyrios

> or
> B) Someone query which lines had what amounts of space removed.
> 
> I assume something can be done since if I let
> clang_parseTranslationUnit index it without preprocessing myself
> everything works as expected.
> 
> From (http://gcc.gnu.org/onlinedocs/gcc-3.3/cpp/Preprocessor-Output.html)
> 
> The ISO standard specifies that it is implementation defined whether a
> preprocessor preserves whitespace between tokens, or replaces it with
> e.g. a single space. In GNU CPP, whitespace between tokens is
> collapsed to become a single space, with the exception that the first
> token on a non-directive line is preceded with sufficient spaces that
> it appears in the same column in the preprocessed output that it
> appeared in the original source file. This is so the output is easy to
> read. See Differences from previous versions. CPP does not insert any
> whitespace where there was none in the original source, except where
> necessary to prevent an accidental token paste.
> 
> Thanks and kudos for an awesome project.
> 
> regards
> 
> Anders
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev





More information about the cfe-dev mailing list