Index: cfe/trunk/lib/Lex/Lexer.cpp =================================================================== --- cfe/trunk/lib/Lex/Lexer.cpp +++ cfe/trunk/lib/Lex/Lexer.cpp @@ -3073,6 +3073,8 @@ case '\n': case '\r': + if (CurPtr[0] != Char && (CurPtr[0] == '\n' || CurPtr[0] == '\r')) + Char = getAndAdvanceChar(CurPtr, Result); // If we are inside a preprocessor directive and we see the end of line, // we know we are done with the directive, so return an EOD token. if (ParsingPreprocessorDirective) { Index: cfe/trunk/test/Frontend/.gitattributes =================================================================== --- cfe/trunk/test/Frontend/.gitattributes +++ cfe/trunk/test/Frontend/.gitattributes @@ -0,0 +1,2 @@ +# Below test validates crlf line endings, so it should stay crlf. +system-header-line-directive-ms-lineendings.c text eol=crlf Index: cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c =================================================================== --- cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c +++ cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c @@ -0,0 +1,21 @@ +// RUN: %clang_cc1 %s -E -o - -I %S/Inputs -isystem %S/Inputs/SystemHeaderPrefix | FileCheck %s +#include +#include + +#include "line-directive.h" + +// This tests that the line numbers for the current file are correctly outputted +// for the include-file-completed test case. + +// CHECK: # 1 "{{.*}}system-header-line-directive-ms-lineendings.c" 2 +// CHECK: # 1 "{{.*}}noline.h" 1 3 +// CHECK: foo(); +// CHECK: # 3 "{{.*}}system-header-line-directive-ms-lineendings.c" 2 +// CHECK: # 1 "{{.*}}line-directive-in-system.h" 1 3 +// The "3" below indicates that "foo.h" is considered a system header. +// CHECK: # 1 "foo.h" 3 +// CHECK: foo(); +// CHECK: # 4 "{{.*}}system-header-line-directive-ms-lineendings.c" 2 +// CHECK: # 1 "{{.*}}line-directive.h" 1 +// CHECK: # 10 "foo.h"{{$}} +// CHECK: # 6 "{{.*}}system-header-line-directive-ms-lineendings.c" 2