<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Hi Stephen-<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">I’m digging through this, and it seems odd.  SVN seems to store it with the CRLF line endings.  The Git mirror for some reason is not paying attention to the
 svn file attribute.  However, the .gitattribute file seems to convert it to the CRLF endings (as it should be), but it seems to think I’ve modified it now.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Are you seeing the same symptom? 
<o:p></o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></a></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Stephen Hines [mailto:srhines@google.com]
<br>
<b>Sent:</b> Thursday, August 24, 2017 3:18 PM<br>
<b>To:</b> Keane, Erich <erich.keane@intel.com><br>
<b>Cc:</b> cfe-commits <cfe-commits@lists.llvm.org><br>
<b>Subject:</b> Re: r311683 - [Preprocessor] Correct internal token parsing of newline characters in CRLF<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">This change seems to have broken the git mirrors, as I can no longer check out clang without having a merge conflict as git alters the line endings. Setting core.autocrlf to false doesn't help either. Does anyone have any idea how to fix
 this svn <-> git issue?<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Steve<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Thu, Aug 24, 2017 at 11:36 AM, Erich Keane via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<o:p></o:p></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">Author: erichkeane<br>
Date: Thu Aug 24 11:36:07 2017<br>
New Revision: 311683<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=311683&view=rev" target="_blank">
http://llvm.org/viewvc/llvm-project?rev=311683&view=rev</a><br>
Log:<br>
[Preprocessor] Correct internal token parsing of newline characters in CRLF<br>
<br>
Discovered due to a goofy git setup, the test system-headerline-directive.c<br>
(and a few others) failed because the token-consumption will consume only the<br>
'\r' in CRLF, making the preprocessor's printed value give the wrong line number<br>
when returning from an include. For example:<br>
<br>
(line 1):#include <noline.h>\r\n<br>
<br>
The "file exit" code causes the printer to try to print the 'returned to the<br>
main file' line. It looks up what the current line number is. However, since the<br>
current 'token' is the '\n' (since only the \r was consumed), it will give the<br>
line number as '1", not '2'. This results in a few failed tests, but more<br>
importantly, results in error messages being incorrect when compiling a<br>
previously preprocessed file.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D37079" target="_blank">
https://reviews.llvm.org/D37079</a><br>
<br>
Added:<br>
    cfe/trunk/test/Frontend/.gitattributes<br>
    cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c   (with props)<br>
Modified:<br>
    cfe/trunk/lib/Lex/Lexer.cpp<br>
<br>
Modified: cfe/trunk/lib/Lex/Lexer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=311683&r1=311682&r2=311683&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=311683&r1=311682&r2=311683&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Lex/Lexer.cpp (original)<br>
+++ cfe/trunk/lib/Lex/Lexer.cpp Thu Aug 24 11:36:07 2017<br>
@@ -3073,6 +3073,8 @@ LexNextToken:<br>
<br>
   case '\n':<br>
   case '\r':<br>
+    if (CurPtr[0] != Char && (CurPtr[0] == '\n' || CurPtr[0] == '\r'))<br>
+      Char = getAndAdvanceChar(CurPtr, Result);<br>
     // If we are inside a preprocessor directive and we see the end of line,<br>
     // we know we are done with the directive, so return an EOD token.<br>
     if (ParsingPreprocessorDirective) {<br>
<br>
Added: cfe/trunk/test/Frontend/.gitattributes<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/.gitattributes?rev=311683&view=auto" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/.gitattributes?rev=311683&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/Frontend/.gitattributes (added)<br>
+++ cfe/trunk/test/Frontend/.gitattributes Thu Aug 24 11:36:07 2017<br>
@@ -0,0 +1,2 @@<br>
+# Below test validates crlf line endings, so it should stay crlf.<br>
+system-header-line-directive-ms-lineendings.c text eol=crlf<br>
<br>
Added: cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c?rev=311683&view=auto" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c?rev=311683&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c (added)<br>
+++ cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c Thu Aug 24 11:36:07 2017<br>
@@ -0,0 +1,21 @@<br>
+// RUN: %clang_cc1 %s -E -o - -I %S/Inputs -isystem %S/Inputs/SystemHeaderPrefix | FileCheck %s<br>
+#include <noline.h><br>
+#include <line-directive-in-system.h><br>
+<br>
+#include "line-directive.h"<br>
+<br>
+// This tests that the line numbers for the current file are correctly outputted<br>
+// for the include-file-completed test case.<br>
+<br>
+// CHECK: # 1 "{{.*}}system-header-line-directive-ms-lineendings.c" 2<br>
+// CHECK: # 1 "{{.*}}noline.h" 1 3<br>
+// CHECK: foo();<br>
+// CHECK: # 3 "{{.*}}system-header-line-directive-ms-lineendings.c" 2<br>
+// CHECK: # 1 "{{.*}}line-directive-in-system.h" 1 3<br>
+//      The "3" below indicates that "foo.h" is considered a system header.<br>
+// CHECK: # 1 "foo.h" 3<br>
+// CHECK: foo();<br>
+// CHECK: # 4 "{{.*}}system-header-line-directive-ms-lineendings.c" 2<br>
+// CHECK: # 1 "{{.*}}line-directive.h" 1<br>
+// CHECK: # 10 "foo.h"{{$}}<br>
+// CHECK: # 6 "{{.*}}system-header-line-directive-ms-lineendings.c" 2<br>
<br>
Propchange: cfe/trunk/test/Frontend/system-header-line-directive-ms-lineendings.c<br>
------------------------------------------------------------------------------<br>
    svn:eol-style = CRLF<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>