diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp
index e8faa12..eb077d3 100644
--- a/lib/Format/Format.cpp
+++ b/lib/Format/Format.cpp
@@ -734,15 +734,16 @@
   }
 
   bool canBreakBetween(const FormatToken &Left, const FormatToken &Right) {
-    if (Right.Tok.is(tok::r_paren))
+    if (Right.Tok.is(tok::r_paren) || Right.Tok.is(tok::l_brace) ||
+        Right.Tok.is(tok::comment) || Right.Tok.is(tok::greater))
       return false;
     if (isBinaryOperator(Left))
       return true;
     if (Right.Tok.is(tok::lessless))
       return true;
-    return Right.Tok.is(tok::colon) || Left.Tok.is(tok::comma) ||
-        Left.Tok.is(tok::semi) || Left.Tok.is(tok::equal) ||
-        Left.Tok.is(tok::ampamp) || Left.Tok.is(tok::pipepipe) ||
+    return Right.Tok.is(tok::colon) || Left.Tok.is(tok::comma) || Left.Tok.is(
+        tok::semi) || Left.Tok.is(tok::equal) || Left.Tok.is(tok::ampamp) ||
+        Left.Tok.is(tok::pipepipe) || Left.Tok.is(tok::l_brace) ||
         (Left.Tok.is(tok::l_paren) && !Right.Tok.is(tok::r_paren));
   }
 
diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp
index 8545f33..7e91cb4 100644
--- a/lib/Format/UnwrappedLineParser.cpp
+++ b/lib/Format/UnwrappedLineParser.cpp
@@ -43,7 +43,8 @@
       parsePPDirective();
       break;
     case tok::comment:
-      parseComment();
+      nextToken();
+      addUnwrappedLine();
       break;
     case tok::l_brace:
       Error |= parseBlock();
@@ -90,22 +91,16 @@
   }
 }
 
-void UnwrappedLineParser::parseComment() {
-  while (!eof()) {
-    nextToken();
-    if (FormatTok.NewlinesBefore > 0) {
-      addUnwrappedLine();
-      return;
-    }
-  }
-}
-
-void UnwrappedLineParser::parseStatement() {
+void UnwrappedLineParser::parseComments() {
   // Consume leading line comments, e.g. for branches without compounds.
   while (FormatTok.Tok.is(tok::comment)) {
     nextToken();
     addUnwrappedLine();
   }
+}
+
+void UnwrappedLineParser::parseStatement() {
+  parseComments();
 
   switch (FormatTok.Tok.getKind()) {
   case tok::kw_namespace:
@@ -164,6 +159,12 @@
         return;
       }
       break;
+    case tok::equal:
+      nextToken();
+      // Skip initializers as they will be formatted by a later step.
+      if (FormatTok.Tok.is(tok::l_brace))
+        nextToken();
+      break;
     default:
       nextToken();
       break;
@@ -325,6 +326,7 @@
       nextToken();
       addUnwrappedLine();
       ++Line.Level;
+      parseComments();
       break;
     case tok::l_paren:
       parseParens();
@@ -332,6 +334,7 @@
     case tok::comma:
       nextToken();
       addUnwrappedLine();
+      parseComments();
       break;
     case tok::r_brace:
       if (HasContents)
diff --git a/lib/Format/UnwrappedLineParser.h b/lib/Format/UnwrappedLineParser.h
index 908391d..287194f 100644
--- a/lib/Format/UnwrappedLineParser.h
+++ b/lib/Format/UnwrappedLineParser.h
@@ -96,7 +96,7 @@
   bool parseLevel();
   bool parseBlock(unsigned AddLevels = 1);
   void parsePPDirective();
-  void parseComment();
+  void parseComments();
   void parseStatement();
   void parseParens();
   void parseIfThenElse();
