r178641 - Improve formatting of for loops and multi-variable DeclStmts.

Daniel Jasper djasper at google.com
Thu Apr 4 12:32:26 PDT 2013


Fixed in r178779.


On Thu, Apr 4, 2013 at 10:22 AM, Alexey Samsonov <samsonov at google.com>wrote:

> Hi Daniel!
>
> Greetings from out llvm-bootstrap bot:
> [ RUN      ] FormatTest.IncorrectCodeUnbalancedBraces
> =================================================================
> ==3759==ERROR: AddressSanitizer: heap-buffer-overflow on address
> 0x60400000340c at pc 0x6fad44 bp 0x7ffff8a7d310 sp 0x7ffff8a7d308
> READ of size 4 at 0x60400000340c thread T0
>     #0 0x6fad43 in
> clang::format::UnwrappedLineFormatter::moveStateToNextToken(clang::format::UnwrappedLineFormatter::LineState&,
> bool) /usr/local/google/llvm/tools/clang/lib/Format/Format.cpp:930
>     #1 0x6fc95f in
> clang::format::UnwrappedLineFormatter::addTokenToState(bool, bool,
> clang::format::UnwrappedLineFormatter::LineState&)
> /usr/local/google/llvm/tools/clang/lib/Format/Format.cpp:853
>     #2 0x6f5d5b in
> clang::format::UnwrappedLineFormatter::format(clang::format::AnnotatedLine
> const*) /usr/local/google/llvm/tools/clang/lib/Format/Format.cpp:509
>     #3 0x6ecb07 in clang::format::Formatter::format()
> /usr/local/google/llvm/tools/clang/lib/Format/Format.cpp:1422
>     #4 0x6eaa31 in clang::format::reformat(clang::format::FormatStyle
> const&, clang::Lexer&, clang::SourceManager&,
> std::vector<clang::CharSourceRange, std::allocator<clang::CharSourceRange>
> >, clang::DiagnosticConsumer*)
> /usr/local/google/llvm/tools/clang/lib/Format/Format.cpp:1739
>     #5 0x588132 in clang::format::FormatTest::format(llvm::StringRef,
> unsigned int, unsigned int, clang::format::FormatStyle const&)
> /usr/local/google/llvm/tools/clang/unittests/Format/FormatTest.cpp:35
>     #6 0x586f6b in str
> /usr/local/google/llvm/tools/clang/unittests/Format/FormatTest.cpp:45
>     #7 0x586f6b in
> clang::format::FormatTest::verifyFormat(llvm::StringRef,
> clang::format::FormatStyle const&)
> /usr/local/google/llvm/tools/clang/unittests/Format/FormatTest.cpp:95
>     #8 0x55de08 in
> clang::format::FormatTest_IncorrectCodeUnbalancedBraces_Test::TestBody()
> /usr/local/google/llvm/tools/clang/unittests/Format/FormatTest.cpp:94
>     #9 0x67af37 in testing::Test::Run()
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:2161
>     #10 0x67f7d4 in testing::TestInfo::Run()
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:2309
>     #11 0x680cb2 in testing::TestCase::Run()
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:2416
>     #12 0x69b1e2 in testing::internal::UnitTestImpl::RunAllTests()
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:4205
>     #13 0x69a6f0 in
> HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:2145
>     #14 0x69a6f0 in testing::UnitTest::Run()
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:3840
>     #15 0x6e95da in main
> /usr/local/google/llvm/utils/unittest/UnitTestMain/TestMain.cpp:43
>     #16 0x2b63d03f976c (/lib/x86_64-linux-gnu/libc.so.6+0x2176c)
>     #17 0x51b1cc
> (/usr/local/google/llvm_bootstrap_clang_asan/tools/clang/unittests/Format/FormatTests+0x51b1cc)
> 0x60400000340c is located 4 bytes to the left of 44-byte region
> [0x604000003410,0x60400000343c)
> allocated by thread T0 here:
>     #0 0x50da22 in operator new(unsigned long)
> /usr/local/google/llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:52
>     #1 0x705782 in allocate
> /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/ext/new_allocator.h:92
>     #2 0x705782 in _M_allocate
> /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/stl_vector.h:150
>     #3 0x705782 in
> std::vector<clang::format::UnwrappedLineFormatter::ParenState,
> std::allocator<clang::format::UnwrappedLineFormatter::ParenState>
> >::_M_insert_aux(__gnu_cxx::__normal_iterator<clang::format::UnwrappedLineFormatter::ParenState*,
> std::vector<clang::format::UnwrappedLineFormatter::ParenState,
> std::allocator<clang::format::UnwrappedLineFormatter::ParenState> > >,
> clang::format::UnwrappedLineFormatter::ParenState const&)
> /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/vector.tcc:327
>     #4 0x6f5a3e in ParenState
> /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/stl_vector.h:834
>     #5 0x6f5a3e in
> clang::format::UnwrappedLineFormatter::format(clang::format::AnnotatedLine
> const*) /usr/local/google/llvm/tools/clang/lib/Format/Format.cpp:487
>     #6 0x6ecb07 in clang::format::Formatter::format()
> /usr/local/google/llvm/tools/clang/lib/Format/Format.cpp:1422
>     #7 0x6eaa31 in clang::format::reformat(clang::format::FormatStyle
> const&, clang::Lexer&, clang::SourceManager&,
> std::vector<clang::CharSourceRange, std::allocator<clang::CharSourceRange>
> >, clang::DiagnosticConsumer*)
> /usr/local/google/llvm/tools/clang/lib/Format/Format.cpp:1739
>     #8 0x588132 in clang::format::FormatTest::format(llvm::StringRef,
> unsigned int, unsigned int, clang::format::FormatStyle const&)
> /usr/local/google/llvm/tools/clang/unittests/Format/FormatTest.cpp:35
>     #9 0x586f6b in str
> /usr/local/google/llvm/tools/clang/unittests/Format/FormatTest.cpp:45
>     #10 0x586f6b in
> clang::format::FormatTest::verifyFormat(llvm::StringRef,
> clang::format::FormatStyle const&)
> /usr/local/google/llvm/tools/clang/unittests/Format/FormatTest.cpp:95
>     #11 0x55de08 in
> clang::format::FormatTest_IncorrectCodeUnbalancedBraces_Test::TestBody()
> /usr/local/google/llvm/tools/clang/unittests/Format/FormatTest.cpp:94
>     #12 0x67af37 in testing::Test::Run()
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:2161
>     #13 0x67f7d4 in testing::TestInfo::Run()
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:2309
>     #14 0x680cb2 in testing::TestCase::Run()
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:2416
>     #15 0x69b1e2 in testing::internal::UnitTestImpl::RunAllTests()
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:4205
>     #16 0x69a6f0 in
> HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:2145
>     #17 0x69a6f0 in testing::UnitTest::Run()
> /usr/local/google/llvm/utils/unittest/googletest/gtest.cc:3840
>     #18 0x6e95da in main
> /usr/local/google/llvm/utils/unittest/UnitTestMain/TestMain.cpp:43
>     #19 0x2b63d03f976c (/lib/x86_64-linux-gnu/libc.so.6+0x2176c)
> SUMMARY: AddressSanitizer: heap-buffer-overflow
> /usr/local/google/llvm/tools/clang/lib/Format/Format.cpp:931
> clang::format::UnwrappedLineFormatter::moveStateToNextToken(clang::format::UnwrappedLineFormatter::LineState&,
> bool)
>
>
>
> On Wed, Apr 3, 2013 at 5:36 PM, Daniel Jasper <djasper at google.com> wrote:
>
>> Author: djasper
>> Date: Wed Apr  3 08:36:17 2013
>> New Revision: 178641
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=178641&view=rev
>> Log:
>> Improve formatting of for loops and multi-variable DeclStmts.
>>
>> This combines several related changes:
>> a) Don't break before after the variable types in for loops with a
>>    single variable.
>> b) Better indent DeclStmts defining multiple variables.
>>
>> Before:
>> bool aaaaaaaaaaaaaaaaaaaaaaaaa =
>>     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaa),
>>      bbbbbbbbbbbbbbbbbbbbbbbbb =
>>          bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb(bbbbbbbbbbbbbbbb);
>> for (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>>          aaaaaaaaaaa = aaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaa;
>>      aaaaaaaaaaa != aaaaaaaaaaaaaaaaaaa; ++aaaaaaaaaaa) {
>> }
>>
>> After:
>> bool aaaaaaaaaaaaaaaaaaaaaaaaa =
>>          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaa),
>>      bbbbbbbbbbbbbbbbbbbbbbbbb =
>>          bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb(bbbbbbbbbbbbbbbb);
>> for (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaa =
>>          aaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaa;
>>      aaaaaaaaaaa != aaaaaaaaaaaaaaaaaaa; ++aaaaaaaaaaa) {
>> }
>>
>> Modified:
>>     cfe/trunk/lib/Format/Format.cpp
>>     cfe/trunk/lib/Format/TokenAnnotator.cpp
>>     cfe/trunk/lib/Format/TokenAnnotator.h
>>     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=178641&r1=178640&r2=178641&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Format/Format.cpp (original)
>> +++ cfe/trunk/lib/Format/Format.cpp Wed Apr  3 08:36:17 2013
>> @@ -487,7 +487,6 @@ public:
>>      State.Stack.push_back(
>>          ParenState(FirstIndent, FirstIndent, !Style.BinPackParameters,
>>                     /*HasMultiParameterLine=*/ false));
>> -    State.VariablePos = 0;
>>      State.LineContainsContinuedForLoopSection = false;
>>      State.ParenLevel = 0;
>>      State.StartOfStringLiteral = 0;
>> @@ -537,7 +536,7 @@ private:
>>            AvoidBinPacking(AvoidBinPacking), BreakBeforeParameter(false),
>>            HasMultiParameterLine(HasMultiParameterLine), ColonPos(0),
>>            StartOfFunctionCall(0), NestedNameSpecifierContinuation(0),
>> -          CallContinuation(0) {}
>> +          CallContinuation(0), VariablePos(0) {}
>>
>>      /// \brief The position to which a specific parenthesis level needs
>> to be
>>      /// indented.
>> @@ -591,6 +590,11 @@ private:
>>      /// contains the start column of the second line. Otherwise 0.
>>      unsigned CallContinuation;
>>
>> +    /// \brief The column of the first variable name in a variable
>> declaration.
>> +    ///
>> +    /// Used to align further variables if necessary.
>> +    unsigned VariablePos;
>> +
>>      bool operator<(const ParenState &Other) const {
>>        if (Indent != Other.Indent)
>>          return Indent < Other.Indent;
>> @@ -618,6 +622,8 @@ private:
>>                 Other.NestedNameSpecifierContinuation;
>>        if (CallContinuation != Other.CallContinuation)
>>          return CallContinuation < Other.CallContinuation;
>> +      if (VariablePos != Other.VariablePos)
>> +        return VariablePos < Other.VariablePos;
>>        return false;
>>      }
>>    };
>> @@ -632,11 +638,6 @@ private:
>>      /// \brief The token that needs to be next formatted.
>>      const AnnotatedToken *NextToken;
>>
>> -    /// \brief The column of the first variable name in a variable
>> declaration.
>> -    ///
>> -    /// Used to align further variables if necessary.
>> -    unsigned VariablePos;
>> -
>>      /// \brief \c true if this line contains a continued for-loop
>> section.
>>      bool LineContainsContinuedForLoopSection;
>>
>> @@ -660,8 +661,6 @@ private:
>>          return NextToken < Other.NextToken;
>>        if (Column != Other.Column)
>>          return Column < Other.Column;
>> -      if (VariablePos != Other.VariablePos)
>> -        return VariablePos < Other.VariablePos;
>>        if (LineContainsContinuedForLoopSection !=
>>                Other.LineContainsContinuedForLoopSection)
>>          return LineContainsContinuedForLoopSection;
>> @@ -727,10 +726,9 @@ private:
>>          }
>>        } else if (Current.Type == TT_ConditionalExpr) {
>>          State.Column = State.Stack.back().QuestionColumn;
>> -      } else if (Previous.is(tok::comma) && State.VariablePos != 0 &&
>> -                 ((RootToken.is(tok::kw_for) && State.ParenLevel == 1) ||
>> -                  State.ParenLevel == 0)) {
>> -        State.Column = State.VariablePos;
>> +      } else if (Previous.is(tok::comma) &&
>> +                 State.Stack.back().VariablePos != 0) {
>> +        State.Column = State.Stack.back().VariablePos;
>>        } else if (Previous.ClosesTemplateDeclaration ||
>>                   (Current.Type == TT_StartOfName && State.ParenLevel ==
>> 0)) {
>>          State.Column = State.Stack.back().Indent;
>> @@ -799,10 +797,13 @@ private:
>>            State.Stack.back().BreakBeforeParameter = true;
>>        }
>>      } else {
>> -      // FIXME: Put VariablePos into ParenState and remove second part
>> of if().
>>        if (Current.is(tok::equal) &&
>> -          (RootToken.is(tok::kw_for) || State.ParenLevel == 0))
>> -        State.VariablePos = State.Column -
>> Previous.FormatTok.TokenLength;
>> +          (RootToken.is(tok::kw_for) || State.ParenLevel == 0)) {
>> +        State.Stack.back().VariablePos =
>> +            State.Column - Previous.FormatTok.TokenLength;
>> +        if (Previous.PartOfMultiVariableDeclStmt)
>> +          State.Stack.back().LastSpace = State.Stack.back().VariablePos;
>> +      }
>>
>>        unsigned Spaces = State.NextToken->SpacesRequiredBefore;
>>
>> @@ -828,7 +829,7 @@ private:
>>          State.Stack.back().HasMultiParameterLine = true;
>>
>>        State.Column += Spaces;
>> -      if (Current.is(tok::l_paren) && Previous.is(tok::kw_if))
>> +      if (Current.is(tok::l_paren) && Previous.isOneOf(tok::kw_if,
>> tok::kw_for))
>>          // Treat the condition inside an if as if it was a second
>> function
>>          // parameter, i.e. let nested calls have an indent of 4.
>>          State.Stack.back().LastSpace = State.Column + 1; // 1 is length
>> of "(".
>> @@ -926,9 +927,11 @@ private:
>>      }
>>
>>      // Remove scopes created by fake parenthesis.
>> +    unsigned VariablePos = State.Stack.back().VariablePos;
>>
>
> looks like State.Stack may be empty at this point.
>
>
>
>>      for (unsigned i = 0, e = Current.FakeRParens; i != e; ++i) {
>>        State.Stack.pop_back();
>>      }
>> +    State.Stack.back().VariablePos = VariablePos;
>>
>>      if (Current.is(tok::string_literal)) {
>>        State.StartOfStringLiteral = State.Column;
>>
>> Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=178641&r1=178640&r2=178641&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
>> +++ cfe/trunk/lib/Format/TokenAnnotator.cpp Wed Apr  3 08:36:17 2013
>> @@ -408,6 +408,10 @@ private:
>>            Tok->FormatTok.Tok.getIdentifierInfo() == &Ident_in)
>>          Tok->Type = TT_ObjCForIn;
>>        break;
>> +    case tok::comma:
>> +      if (Contexts.back().FirstStartOfName)
>> +        Contexts.back().FirstStartOfName->PartOfMultiVariableDeclStmt =
>> true;
>> +      break;
>>      default:
>>        break;
>>      }
>> @@ -538,7 +542,8 @@ private:
>>          : ContextKind(ContextKind), BindingStrength(BindingStrength),
>>            LongestObjCSelectorName(0), ColonIsForRangeExpr(false),
>>            ColonIsObjCMethodExpr(false), FirstObjCSelectorName(NULL),
>> -          IsExpression(IsExpression), CanBeExpression(true) {}
>> +          FirstStartOfName(NULL), IsExpression(IsExpression),
>> +          CanBeExpression(true) {}
>>
>>      tok::TokenKind ContextKind;
>>      unsigned BindingStrength;
>> @@ -546,6 +551,7 @@ private:
>>      bool ColonIsForRangeExpr;
>>      bool ColonIsObjCMethodExpr;
>>      AnnotatedToken *FirstObjCSelectorName;
>> +    AnnotatedToken *FirstStartOfName;
>>      bool IsExpression;
>>      bool CanBeExpression;
>>    };
>> @@ -600,8 +606,10 @@ private:
>>            ((Current.Parent->is(tok::identifier) &&
>>              Current.Parent->FormatTok.Tok.getIdentifierInfo()
>>                  ->getPPKeywordID() == tok::pp_not_keyword) ||
>> +           isSimpleTypeSpecifier(*Current.Parent) ||
>>             Current.Parent->Type == TT_PointerOrReference ||
>>             Current.Parent->Type == TT_TemplateCloser)) {
>> +        Contexts.back().FirstStartOfName = &Current;
>>          Current.Type = TT_StartOfName;
>>        } else if (Current.isOneOf(tok::star, tok::amp, tok::ampamp)) {
>>          Current.Type =
>> @@ -720,6 +728,39 @@ private:
>>      return TT_UnaryOperator;
>>    }
>>
>> +  // FIXME: This is copy&pasted from Sema. Put it in a common place and
>> remove
>> +  // duplication.
>> +  /// \brief Determine whether the token kind starts a
>> simple-type-specifier.
>> +  bool isSimpleTypeSpecifier(const AnnotatedToken &Tok) const {
>> +    switch (Tok.FormatTok.Tok.getKind()) {
>> +    case tok::kw_short:
>> +    case tok::kw_long:
>> +    case tok::kw___int64:
>> +    case tok::kw___int128:
>> +    case tok::kw_signed:
>> +    case tok::kw_unsigned:
>> +    case tok::kw_void:
>> +    case tok::kw_char:
>> +    case tok::kw_int:
>> +    case tok::kw_half:
>> +    case tok::kw_float:
>> +    case tok::kw_double:
>> +    case tok::kw_wchar_t:
>> +    case tok::kw_bool:
>> +    case tok::kw___underlying_type:
>> +      return true;
>> +    case tok::annot_typename:
>> +    case tok::kw_char16_t:
>> +    case tok::kw_char32_t:
>> +    case tok::kw_typeof:
>> +    case tok::kw_decltype:
>> +      return Lex.getLangOpts().CPlusPlus;
>> +    default:
>> +      break;
>> +    }
>> +    return false;
>> +  }
>> +
>>    SmallVector<Context, 8> Contexts;
>>
>>    SourceManager &SourceMgr;
>> @@ -886,7 +927,7 @@ unsigned TokenAnnotator::splitPenalty(co
>>    const AnnotatedToken &Right = Tok;
>>
>>    if (Right.Type == TT_StartOfName) {
>> -    if (Line.First.is(tok::kw_for))
>> +    if (Line.First.is(tok::kw_for) && Right.PartOfMultiVariableDeclStmt)
>>        return 3;
>>      else if (Line.MightBeFunctionDecl && Right.BindingStrength == 1)
>>        // FIXME: Clean up hack of using BindingStrength to find top-level
>> names.
>>
>> Modified: cfe/trunk/lib/Format/TokenAnnotator.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.h?rev=178641&r1=178640&r2=178641&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Format/TokenAnnotator.h (original)
>> +++ cfe/trunk/lib/Format/TokenAnnotator.h Wed Apr  3 08:36:17 2013
>> @@ -76,8 +76,8 @@ public:
>>          ClosesTemplateDeclaration(false), MatchingParen(NULL),
>>          ParameterCount(0), BindingStrength(0), SplitPenalty(0),
>>          LongestObjCSelectorName(0), Parent(NULL), FakeLParens(0),
>> -        FakeRParens(0), LastInChainOfCalls(false) {
>> -  }
>> +        FakeRParens(0), LastInChainOfCalls(false),
>> +        PartOfMultiVariableDeclStmt(false) {}
>>
>>    bool is(tok::TokenKind Kind) const { return FormatTok.Tok.is(Kind); }
>>
>> @@ -166,6 +166,11 @@ public:
>>    /// \brief Is this the last "." or "->" in a builder-type call?
>>    bool LastInChainOfCalls;
>>
>> +  /// \brief Is this token part of a \c DeclStmt defining multiple
>> variables?
>> +  ///
>> +  /// Only set if \c Type == \c TT_StartOfName.
>> +  bool PartOfMultiVariableDeclStmt;
>> +
>>    const AnnotatedToken *getPreviousNoneComment() const {
>>      AnnotatedToken *Tok = Parent;
>>      while (Tok != NULL && Tok->is(tok::comment))
>>
>> Modified: cfe/trunk/unittests/Format/FormatTest.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=178641&r1=178640&r2=178641&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/unittests/Format/FormatTest.cpp (original)
>> +++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Apr  3 08:36:17 2013
>> @@ -311,8 +311,8 @@ TEST_F(FormatTest, FormatsForLoop) {
>>    verifyFormat(
>>        "for (MachineFun::iterator IIII = PrevIt, EEEE = F.end(); IIII !=
>> EEEE;\n"
>>        "     ++IIIII) {\n}");
>> -  verifyFormat("for (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
>> -               "         aaaaaaaaaaa =
>> aaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaa;\n"
>> +  verifyFormat("for (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaa =\n"
>> +               "         aaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaa;\n"
>>                 "     aaaaaaaaaaa != aaaaaaaaaaaaaaaaaaa; ++aaaaaaaaaaa)
>> {\n}");
>>    verifyFormat("for (llvm::ArrayRef<NamedDecl *>::iterator\n"
>>                 "         I = FD->getDeclsInPrototypeScope().begin(),\n"
>> @@ -329,6 +329,10 @@ TEST_F(FormatTest, FormatsForLoop) {
>>    verifyFormat("for (int aaaaaaaaaaa = 1; aaaaaaaaaaa <=
>> bbbbbbbbbbbbbbb;\n"
>>                 "     aaaaaaaaaaa++, bbbbbbbbbbbbbbbbb++) {\n"
>>                 "}");
>> +  verifyFormat("for (some_namespace::SomeIterator iter( // force break\n"
>> +               "         aaaaaaaaaa);\n"
>> +               "     iter; ++iter) {\n"
>> +               "}");
>>
>>    FormatStyle NoBinPacking = getLLVMStyle();
>>    NoBinPacking.BinPackParameters = false;
>> @@ -1188,8 +1192,9 @@ TEST_F(FormatTest, FormatsSmallMacroDefi
>>  }
>>
>>  TEST_F(FormatTest, DoesNotBreakPureVirtualFunctionDefinition) {
>> -  verifyFormat("virtual void write(ELFWriter *writerrr,\n"
>> -               "                   OwningPtr<FileOutputBuffer> &buffer)
>> = 0;");
>> +  verifyFormat(
>> +      "virtual void\n"
>> +      "write(ELFWriter *writerrr, OwningPtr<FileOutputBuffer> &buffer) =
>> 0;");
>>  }
>>
>>  TEST_F(FormatTest, LayoutUnknownPPDirective) {
>> @@ -1378,7 +1383,7 @@ TEST_F(FormatTest, MixingPreprocessorDir
>>  TEST_F(FormatTest, LayoutStatementsAroundPreprocessorDirectives) {
>>    EXPECT_EQ("int\n"
>>              "#define A\n"
>> -            "    a;",
>> +            "a;",
>>              format("int\n#define A\na;"));
>>    verifyFormat("functionCallTo(\n"
>>                 "    someOtherFunction(\n"
>> @@ -1613,7 +1618,7 @@ TEST_F(FormatTest, BreaksDesireably) {
>>  }
>>
>>  TEST_F(FormatTest, FormatsOneParameterPerLineIfNecessary) {
>> -  FormatStyle NoBinPacking = getLLVMStyle();
>> +  FormatStyle NoBinPacking = getGoogleStyle();
>>    NoBinPacking.BinPackParameters = false;
>>    verifyFormat("f(aaaaaaaaaaaaaaaaaaaa,\n"
>>                 "  aaaaaaaaaaaaaaaaaaaa,\n"
>> @@ -1851,14 +1856,13 @@ TEST_F(FormatTest, DeclarationsOfMultipl
>>                 "     aaaaaaaaaaa = aaaaaa->aaaaaaaaaaa();");
>>    verifyFormat("bool a = true, b = false;");
>>
>> -  // FIXME: Indentation looks weird.
>>    verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaaa =\n"
>> -               "    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaa),\n"
>> +               "
>> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaa),\n"
>>                 "     bbbbbbbbbbbbbbbbbbbbbbbbb =\n"
>>                 "
>> bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb(bbbbbbbbbbbbbbbb);");
>>    verifyFormat(
>>        "bool aaaaaaaaaaaaaaaaaaaaa =\n"
>> -      "    bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb &&
>> cccccccccccccccccccccccccccc,\n"
>> +      "         bbbbbbbbbbbbbbbbbbbbbbbbbbbb &&
>> cccccccccccccccccccccccccccc,\n"
>>        "     d = e && f;");
>>
>>  }
>> @@ -2051,7 +2055,7 @@ TEST_F(FormatTest, WrapsTemplateDeclarat
>>        "                    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);");
>>    verifyFormat("template <typename T>\n"
>>                 "void
>> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
>> -               "    int aaaaaaaaaaaaaaaaa);");
>> +               "    int aaaaaaaaaaaaaaaaaaaaaa);");
>>    verifyFormat(
>>        "template <typename T1, typename T2 = char, typename T3 = char,\n"
>>        "          typename T4 = char>\n"
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
>
>
> --
> Alexey Samsonov, MSK
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130404/db7c93c4/attachment.html>


More information about the cfe-commits mailing list