[cfe-commits] [PATCH] Using proper file mode for -E

Douglas Gregor dgregor at apple.com
Fri Sep 23 14:54:09 PDT 2011


On Sep 23, 2011, at 2:39 PM, Aaron Ballman wrote:

> On Fri, Sep 23, 2011 at 12:42 PM, Douglas Gregor <dgregor at apple.com> wrote:
>> On Sep 18, 2011, at 7:46 AM, Aaron Ballman wrote:
>> 
>>> This is a fix for Bug 6870.
>>> 
>>> On Windows, we really do want CRLFs to remain, otherwise the output
>>> ends up looking incredibly bad when piped to a file (even though it
>>> looks fine on the command prompt).  For instance:
>>> 
>>> clang.exe -E some_file.cpp > test.txt
>>> 
>>> With Unix line endings, that will produce output which appears all in
>>> a single line in some text editors (such as notepad).  Such as:
>>> 
>>> #line 1 "some_file.cpp" #line 1 "some_file.cpp" #line 1 "<built-in>"
>>> #line 1 "<built-in>" #line 138 "<built-in>" #line 1 "<command line>"
>>> #line 1
>>> and so on...
>>> 
>>> But with CRLFs, the output ends up looking fine:
>>> #line 1 "some_file.cpp"
>>> #line 1 "some_file.cpp"
>>> #line 1 "<built-in>"
>>> #line 1 "<built-in>"
>>> #line 138 "<built-in>"
>>> #line 1 "<command line>"
>>> #line 1
>> 
>> 
>> The use of binary mode was intentional, because we didn't want to translate files with just LF's to CRLF's. The ideal behavior would probably be to emit CRLF's consistently if the input file used CRLF, and emit LF's consistently otherwise.
> 
> Here's another attempt -- this time I am trying to determine the
> original file's line endings so I can match them.  I do this by
> looking at the first N bytes of the file to find a CRLF, CR or LF.


I'd like to avoid loading the file just for this purpose. Is it possible to use the SourceManager to get at the main file's buffer and check there, so that we just re-use the already-loaded main source file?

	- Doug



More information about the cfe-commits mailing list