Fix bug where optimization would lead to strange line breaks.

Before:
  void f() {
    CHECK_EQ(aaaa, (
                       *bbbbbbbbb)->cccccc)
        << "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
  }

After:
  void f() {
    CHECK_EQ(aaaa, (*bbbbbbbbb)->cccccc)
        << "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";
  }

llvm-svn: 195240
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp
index 971acc2..bbc1ac5 100644
--- a/clang/lib/Format/ContinuationIndenter.cpp
+++ b/clang/lib/Format/ContinuationIndenter.cpp
@@ -224,13 +224,14 @@
   if (Newline)
     Penalty = addTokenOnNewLine(State, DryRun);
   else
-    addTokenOnCurrentLine(State, DryRun, ExtraSpaces);
+    Penalty = addTokenOnCurrentLine(State, DryRun, ExtraSpaces);
 
   return moveStateToNextToken(State, DryRun, Newline) + Penalty;
 }
 
-void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun,
-                                                 unsigned ExtraSpaces) {
+unsigned ContinuationIndenter::addTokenOnCurrentLine(LineState &State,
+                                                     bool DryRun,
+                                                     unsigned ExtraSpaces) {
   FormatToken &Current = *State.NextToken;
   const FormatToken &Previous = *State.NextToken->Previous;
   if (Current.is(tok::equal) &&
@@ -249,6 +250,15 @@
       State.Stack.back().LastSpace = State.Stack.back().VariablePos;
   }
 
+  unsigned Penalty = 0;
+  // A break before a "<<" will get Style.PenaltyBreakFirstLessLess, so a
+  // continuation with "<<" has a smaller penalty in general.
+  // If the LHS is long, we don't want to penalize the break though, so we
+  // also add Style.PenaltyBreakFirstLessLess.
+  if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess == 0 &&
+      State.Column > Style.ColumnLimit / 2)
+    Penalty += Style.PenaltyBreakFirstLessLess;
+
   unsigned Spaces = Current.SpacesRequiredBefore + ExtraSpaces;
 
   if (!DryRun)
@@ -307,6 +317,7 @@
         State.Stack[State.Stack.size() - 2].CallContinuation == 0)
       State.Stack.back().LastSpace = State.Column;
   }
+  return Penalty;
 }
 
 unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State,
@@ -332,9 +343,8 @@
   Penalty += State.NextToken->SplitPenalty;
 
   // Breaking before the first "<<" is generally not desirable if the LHS is
-  // short.
-  if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess == 0 &&
-      State.Column <= Style.ColumnLimit / 2)
+  // short (not breaking with a long LHS is penalized in addTokenOnCurrentLine).
+  if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess == 0)
     Penalty += Style.PenaltyBreakFirstLessLess;
 
   if (Current.is(tok::l_brace) && Current.BlockKind == BK_Block) {
diff --git a/clang/lib/Format/ContinuationIndenter.h b/clang/lib/Format/ContinuationIndenter.h
index b317565..b675b0a 100644
--- a/clang/lib/Format/ContinuationIndenter.h
+++ b/clang/lib/Format/ContinuationIndenter.h
@@ -91,8 +91,8 @@
   ///
   /// If \p DryRun is \c false, also creates and stores the required
   /// \c Replacement.
-  void addTokenOnCurrentLine(LineState &State, bool DryRun,
-                             unsigned ExtraSpaces);
+  unsigned addTokenOnCurrentLine(LineState &State, bool DryRun,
+                                 unsigned ExtraSpaces);
 
   /// \brief Appends the next token to \p State and updates information
   /// necessary for indentation.