From 9f82df295e59bcdef10b93e541b164ebccfe6bb2 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Tue, 28 May 2013 07:42:44 +0000 Subject: [PATCH] Fix formatting of expressions containing ">>". This gets turned into two ">" operators at the beginning in order to simplify template parameter handling. Thus, we need a special case to handle those two binary operators correctly. With this patch, clang-format can now correctly handle cases like: aaaaaa = aaaaaaa(aaaaaaa, // break aaaaaa) >> bbbbbb; llvm-svn: 182754 --- clang/lib/Format/Format.cpp | 1 + clang/unittests/Format/FormatTest.cpp | 3 +++ 2 files changed, 4 insertions(+) diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index ea8a0f9f7d10..f244792e521f 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -1040,6 +1040,7 @@ private: // If we need to break somewhere inside the LHS of a binary expression, we // should also break after the operator. if (Previous.Type == TT_BinaryOperator && + Current.Type != TT_BinaryOperator && // Special case for ">>". !Previous.isOneOf(tok::lessless, tok::question) && getPrecedence(Previous) != prec::Assignment && State.Stack.back().BreakBeforeParameter) diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index fd9678c3527c..d39a8a409341 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -1921,6 +1921,9 @@ TEST_F(FormatTest, LineBreakingInBinaryExpressions) { verifyFormat("aaaaaa = aaaaaaa(aaaaaaa, // break\n" " aaaaaa) &&\n" " bbbbbb && cccccc;"); + verifyFormat("aaaaaa = aaaaaaa(aaaaaaa, // break\n" + " aaaaaa) >>\n" + " bbbbbb;"); verifyFormat("Whitespaces.addUntouchableComment(\n" " SourceMgr.getSpellingColumnNumber(\n" " TheLine.Last->FormatTok.Tok.getLocation()) -\n"