<div dir="ltr">clang-format-fuzzer is hitting this assertion on the bot: <div><a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fuzzer/builds/19/steps/stage2%2Fasan%20run%20clang-format-fuzzer/logs/stdio" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fuzzer/builds/19/steps/stage2%2Fasan%20run%20clang-format-fuzzer/logs/stdio</a><br></div><div><br></div><div>I don't yet have a way for extracting individual reproducers when an assertion happens (this works only for asan-ish bugs),</div><div>but you can reproduce this very easily with</div><div><br></div><div>cmake $HOME/llvm -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON   -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLLVM_USE_SANITIZE_COVERAGE=YES -DLLVM_USE_SANITIZER=Address<br></div><div><div>ninja clang-format-fuzzer </div></div><div>./bin/clang-format-fuzzer<br></div><div><br></div><div><div>llvm/tools/clang/lib/Format/ContinuationIndenter.cpp:257: unsigned int clang::format::ContinuationIndenter::addTokenToState(clang::format::LineState &, bool, bool, unsigned int): Assertion `EndColumn >= StartColumn' failed.</div></div><div><br></div><div>Meanwhile, I am going to disable assertions on the fuzzer bot. </div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 30, 2015 at 11:05 PM, Daniel Jasper <span dir="ltr"><<a href="mailto:djasper@google.com" target="_blank">djasper@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: djasper<br>
Date: Sat Jan 31 01:05:46 2015<br>
New Revision: 227677<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=227677&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=227677&view=rev</a><br>
Log:<br>
clang-format: Fix incorrect handling of leading whitespace.<br>
<br>
Added an assertion that triggered in an existing test case (without<br>
observable differences) and fixed the code.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Format/ContinuationIndenter.cpp<br>
<br>
Modified: cfe/trunk/lib/Format/ContinuationIndenter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/ContinuationIndenter.cpp?rev=227677&r1=227676&r2=227677&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/ContinuationIndenter.cpp?rev=227677&r1=227676&r2=227677&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Format/ContinuationIndenter.cpp (original)<br>
+++ cfe/trunk/lib/Format/ContinuationIndenter.cpp Sat Jan 31 01:05:46 2015<br>
@@ -245,12 +245,18 @@ unsigned ContinuationIndenter::addTokenT<br>
        (Current.Previous->Tok.getIdentifierInfo() == nullptr ||<br>
         Current.Previous->Tok.getIdentifierInfo()->getPPKeywordID() ==<br>
             tok::pp_not_keyword))) {<br>
-    // FIXME: Is this correct?<br>
-    int WhitespaceLength = SourceMgr.getSpellingColumnNumber(<br>
-                               State.NextToken->WhitespaceRange.getEnd()) -<br>
-                           SourceMgr.getSpellingColumnNumber(<br>
-                               State.NextToken->WhitespaceRange.getBegin());<br>
-    State.Column += WhitespaceLength;<br>
+    unsigned EndColumn =<br>
+        SourceMgr.getSpellingColumnNumber(Current.WhitespaceRange.getEnd());<br>
+    if (Current.LastNewlineOffset != 0) {<br>
+      // If there is a newline within this token, the final column will solely<br>
+      // determined by the current end column.<br>
+      State.Column = EndColumn;<br>
+    } else {<br>
+      unsigned StartColumn =<br>
+          SourceMgr.getSpellingColumnNumber(Current.WhitespaceRange.getBegin());<br>
+      assert(EndColumn >= StartColumn);<br>
+      State.Column += EndColumn - StartColumn;<br>
+    }<br>
     moveStateToNextToken(State, DryRun, /*Newline=*/false);<br>
     return 0;<br>
   }<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>