clang-format: Improve recovery from enums with errors.

Before:
  namespace n {
  enum Type {
    One,
    Two, // missing };
    int i;
  } void g() {
  }

After:
  namespace n {
  enum Type {
    One,
    Two, // missing };
    int i;
  }
  void g() {}

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189662 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp
index 9e4600b..fb63899 100644
--- a/lib/Format/UnwrappedLineParser.cpp
+++ b/lib/Format/UnwrappedLineParser.cpp
@@ -937,6 +937,7 @@
     if (FormatTok->Tok.is(tok::identifier))
       nextToken();
   }
+  bool HasError = false;
   if (FormatTok->Tok.is(tok::l_brace)) {
     if (Style.BreakBeforeBraces == FormatStyle::BS_Allman)
       addUnwrappedLine();
@@ -952,7 +953,17 @@
         addUnwrappedLine();
         nextToken();
         --Line->Level;
+        if (HasError) {
+          if (FormatTok->is(tok::semi))
+            nextToken();
+          addUnwrappedLine();
+        }
         return;
+      case tok::semi:
+        HasError = true;
+        nextToken();
+        addUnwrappedLine();
+        break;
       case tok::comma:
         nextToken();
         addUnwrappedLine();