<div dir="ltr">Tweaked in r296460.</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Feb 28, 2017 at 10:28 AM Galina Kistanova via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">Hello Nico,<br class="gmail_msg"><br class="gmail_msg">This commit broke test on one of our builders:<br class="gmail_msg"><br class="gmail_msg">    Clang :: Format/inplace.cpp<br class="gmail_msg"><br class="gmail_msg"><a href="http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/6151/steps/test/logs/stdio" class="gmail_msg" target="_blank">http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/6151/steps/test/logs/stdio</a><br class="gmail_msg"><br class="gmail_msg">Please have a look.<br class="gmail_msg"><br class="gmail_msg">Thanks</div><div dir="ltr" class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">Galina<br class="gmail_msg"></div><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On Mon, Feb 27, 2017 at 2:59 PM, Nico Weber via cfe-commits <span dir="ltr" class="gmail_msg"><<a href="mailto:cfe-commits@lists.llvm.org" class="gmail_msg" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: nico<br class="gmail_msg">
Date: Mon Feb 27 16:59:58 2017<br class="gmail_msg">
New Revision: 296408<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=296408&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=296408&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
clang-format: Don't leave behind temp files in -i mode on Windows, PR26125, reloaded<br class="gmail_msg">
<br class="gmail_msg">
Second attempt after <a href="http://llvm.org/viewvc/llvm-project?rev=296166&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=296166&view=rev</a><br class="gmail_msg">
<br class="gmail_msg">
In the first attempt, Code (the memory buffer backing the input file) was reset<br class="gmail_msg">
before overwriteChangedFiles() was called, but overwriteChangedFiles() still<br class="gmail_msg">
reads from it.  This time, load the whole input file into memory instead of<br class="gmail_msg">
using mmap when formatting in-place.<br class="gmail_msg">
<br class="gmail_msg">
(Since the test is identical to what was in the repo before chapuni's revert,<br class="gmail_msg">
svn diff doesn't show it – see the above link for the test.)<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D30385" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D30385</a><br class="gmail_msg">
<br class="gmail_msg">
Added:<br class="gmail_msg">
    cfe/trunk/test/Format/inplace.cpp<br class="gmail_msg">
      - copied unchanged from r296236, cfe/trunk/test/Format/inplace.cpp<br class="gmail_msg">
Modified:<br class="gmail_msg">
    cfe/trunk/tools/clang-format/ClangFormat.cpp<br class="gmail_msg">
<br class="gmail_msg">
Modified: cfe/trunk/tools/clang-format/ClangFormat.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/ClangFormat.cpp?rev=296408&r1=296407&r2=296408&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/ClangFormat.cpp?rev=296408&r1=296407&r2=296408&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- cfe/trunk/tools/clang-format/ClangFormat.cpp (original)<br class="gmail_msg">
+++ cfe/trunk/tools/clang-format/ClangFormat.cpp Mon Feb 27 16:59:58 2017<br class="gmail_msg">
@@ -236,8 +236,15 @@ static void outputReplacementsXML(const<br class="gmail_msg">
<br class="gmail_msg">
 // Returns true on error.<br class="gmail_msg">
 static bool format(StringRef FileName) {<br class="gmail_msg">
+  if (!OutputXML && Inplace && FileName == "-") {<br class="gmail_msg">
+    errs() << "error: cannot use -i when reading from stdin.\n";<br class="gmail_msg">
+    return false;<br class="gmail_msg">
+  }<br class="gmail_msg">
+  // On Windows, overwriting a file with an open file mapping doesn't work,<br class="gmail_msg">
+  // so read the whole file into memory when formatting in-place.<br class="gmail_msg">
   ErrorOr<std::unique_ptr<MemoryBuffer>> CodeOrErr =<br class="gmail_msg">
-      MemoryBuffer::getFileOrSTDIN(FileName);<br class="gmail_msg">
+      !OutputXML && Inplace ? MemoryBuffer::getFileAsStream(FileName) :<br class="gmail_msg">
+                              MemoryBuffer::getFileOrSTDIN(FileName);<br class="gmail_msg">
   if (std::error_code EC = CodeOrErr.getError()) {<br class="gmail_msg">
     errs() << EC.message() << "\n";<br class="gmail_msg">
     return true;<br class="gmail_msg">
@@ -297,9 +304,7 @@ static bool format(StringRef FileName) {<br class="gmail_msg">
     Rewriter Rewrite(Sources, LangOptions());<br class="gmail_msg">
     tooling::applyAllReplacements(Replaces, Rewrite);<br class="gmail_msg">
     if (Inplace) {<br class="gmail_msg">
-      if (FileName == "-")<br class="gmail_msg">
-        errs() << "error: cannot use -i when reading from stdin.\n";<br class="gmail_msg">
-      else if (Rewrite.overwriteChangedFiles())<br class="gmail_msg">
+      if (Rewrite.overwriteChangedFiles())<br class="gmail_msg">
         return true;<br class="gmail_msg">
     } else {<br class="gmail_msg">
       if (Cursor.getNumOccurrences() != 0)<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
cfe-commits mailing list<br class="gmail_msg">
<a href="mailto:cfe-commits@lists.llvm.org" class="gmail_msg" target="_blank">cfe-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="gmail_msg">
</blockquote></div><br class="gmail_msg"></div>
_______________________________________________<br class="gmail_msg">
cfe-commits mailing list<br class="gmail_msg">
<a href="mailto:cfe-commits@lists.llvm.org" class="gmail_msg" target="_blank">cfe-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="gmail_msg">
</blockquote></div>