[PATCH] D37079: [Preprocessor] Correct internal token parsing of newline characters in CRLF
Erich Keane via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 24 11:37:24 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL311683: [Preprocessor] Correct internal token parsing of newline characters in CRLF (authored by erichkeane).
Changed prior to commit:
https://reviews.llvm.org/D37079?vs=112581&id=112589#toc
Repository:
rL LLVM
https://reviews.llvm.org/D37079
Files:
cfe/trunk/lib/Lex/Lexer.cpp
cfe/trunk/test/Frontend/.gitattributes
cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c
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 <noline.h>
+#include <line-directive-in-system.h>
+
+#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
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) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37079.112589.patch
Type: text/x-patch
Size: 2117 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170824/6205869f/attachment.bin>
More information about the cfe-commits
mailing list