[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