Fix an error in formatting of for-loops.
Two minor changes:
* Slight penalty for breaking at "," as opposed to ";".
* Don't apply bin-packing rules to for-loops.
Before:
for (int aaaaaa = aaaaaaaaaa; aaaaaa < bbbbbbbb; ++aaaaaa,
++ccccccccccccccc) {}
After:
for (int aaaaaa = aaaaaaaaaa; aaaaaa < bbbbbbbb;
++aaaaaa, ++ccccccccccccccc) {}
llvm-svn: 174308
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index 6d227cc..2f14fc0 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -493,7 +493,8 @@
if (Newline && Previous.is(tok::l_brace))
State.Stack.back().BreakBeforeClosingBrace = true;
- if (State.Stack.back().AvoidBinPacking && Newline) {
+ if (State.Stack.back().AvoidBinPacking && Newline &&
+ (Line.First.isNot(tok::kw_for) || ParenLevel != 1)) {
// If we are breaking after '(', '{', '<', this is not bin packing unless
// AllowAllParametersOfDeclarationOnNextLine is false.
if ((Previous.isNot(tok::l_paren) && Previous.isNot(tok::l_brace) &&
@@ -505,7 +506,8 @@
// Any break on this level means that the parent level has been broken
// and we need to avoid bin packing there.
for (unsigned i = 0, e = State.Stack.size() - 1; i != e; ++i) {
- State.Stack[i].BreakAfterComma = true;
+ if (Line.First.isNot(tok::kw_for) || i != 1)
+ State.Stack[i].BreakAfterComma = true;
}
}