r230061 - Fix merging of << at end of input.

Jacques Pienaar jpienaar at google.com
Sun Feb 22 17:56:26 PST 2015


That is weird as I tested that locally and that was one of the cases I
checked. And it wouldn't have exercised the code path that caused problems
last time. I tried reproducing locally as follows:

cmake -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
-DLLVM_USE_SANITIZER=Address -DLLVM_USE_SANITIZE_COVERAGE=YES
-DLLVM_ENABLE_ASSERTIONS=ON -DCMAKE_BUILD_TYPE=Release ../ && ninja -j 10
clang-format

printf "<<<" | ASAN_OPTIONS=coverage=1 ./bin/clang-format

ninja clang-format-fuzzer

./bin/clang-format-fuzzer corpus/

But none of the tests gave me an error. So if I was doing it correctly,
then the only other thing I could think of is that the bot was using an
older revision. I didn't see the revision number in the error report. Is
this possible?


On Sun, Feb 22, 2015 at 1:43 PM, Kostya Serebryany <kcc at google.com> wrote:

> I don't think this is a complete fix.
> The fuzzer is still unhappy, this time on <<<
>
> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fuzzer/builds/442/steps/stage2%2Fasan%20run%20clang-format-fuzzer/logs/stdio
>
> On Fri, Feb 20, 2015 at 1:09 PM, Jacques Pienaar <jpienaar at google.com>
> wrote:
>
>> Author: jpienaar
>> Date: Fri Feb 20 15:09:01 2015
>> New Revision: 230061
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=230061&view=rev
>> Log:
>> Fix merging of << at end of input.
>>
>> Commit of review http://reviews.llvm.org/D7766
>>
>>
>> Modified:
>>     cfe/trunk/lib/Format/Format.cpp
>>     cfe/trunk/unittests/Format/FormatTest.cpp
>>
>> Modified: cfe/trunk/lib/Format/Format.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=230061&r1=230060&r2=230061&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Format/Format.cpp (original)
>> +++ cfe/trunk/lib/Format/Format.cpp Fri Feb 20 15:09:01 2015
>> @@ -662,33 +662,26 @@ private:
>>
>>    bool tryMergeLessLess() {
>>      // Merge X,less,less,Y into X,lessless,Y unless X or Y is less.
>> -    if (Tokens.size() < 4) {
>> -      // Merge <,<,eof to <<,eof
>> -      if (Tokens.back()->Tok.isNot(tok::eof))
>> -        return false;
>> +    if (Tokens.size() < 3)
>> +      return false;
>>
>> -      auto &eof = Tokens.back();
>> -      Tokens.pop_back();
>> -      bool LessLessMerged;
>> -      if ((LessLessMerged = tryMergeTokens({tok::less, tok::less})))
>> -        Tokens.back()->Tok.setKind(tok::lessless);
>> -      Tokens.push_back(eof);
>> -      return LessLessMerged;
>> -    }
>> +    bool FourthTokenIsLess = false;
>> +    if (Tokens.size() > 3)
>> +      FourthTokenIsLess = (Tokens.end() - 4)[0]->is(tok::less);
>>
>> -    auto First = Tokens.end() - 4;
>> -    if (First[3]->is(tok::less) || First[2]->isNot(tok::less) ||
>> -        First[1]->isNot(tok::less) || First[0]->is(tok::less))
>> +    auto First = Tokens.end() - 3;
>> +    if (First[2]->is(tok::less) || First[1]->isNot(tok::less) ||
>> +        First[0]->isNot(tok::less) || FourthTokenIsLess)
>>        return false;
>>
>>      // Only merge if there currently is no whitespace between the two
>> "<".
>> -    if (First[2]->WhitespaceRange.getBegin() !=
>> -        First[2]->WhitespaceRange.getEnd())
>> +    if (First[1]->WhitespaceRange.getBegin() !=
>> +        First[1]->WhitespaceRange.getEnd())
>>        return false;
>>
>> -    First[1]->Tok.setKind(tok::lessless);
>> -    First[1]->TokenText = "<<";
>> -    First[1]->ColumnWidth += 1;
>> +    First[0]->Tok.setKind(tok::lessless);
>> +    First[0]->TokenText = "<<";
>> +    First[0]->ColumnWidth += 1;
>>      Tokens.erase(Tokens.end() - 2);
>>      return true;
>>    }
>>
>> Modified: cfe/trunk/unittests/Format/FormatTest.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=230061&r1=230060&r2=230061&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/unittests/Format/FormatTest.cpp (original)
>> +++ cfe/trunk/unittests/Format/FormatTest.cpp Fri Feb 20 15:09:01 2015
>> @@ -9752,6 +9752,7 @@ TEST_F(FormatTest, TripleAngleBrackets)
>>  }
>>
>>  TEST_F(FormatTest, MergeLessLessAtEnd) {
>> +  verifyFormat("<<");
>>
>>  verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
>>                 "aaallvm::outs() <<");
>>
>>  verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150223/5ed06120/attachment.html>


More information about the cfe-commits mailing list