Remove assertion that can be triggered on bad input.
authorDaniel Jasper <djasper@google.com>
Wed, 20 Mar 2013 15:58:10 +0000 (15:58 +0000)
committerDaniel Jasper <djasper@google.com>
Wed, 20 Mar 2013 15:58:10 +0000 (15:58 +0000)
clang-format can't do anything useful, so it should leave the remainder
of the line unchanged, but it should not assert/segfault.

llvm-svn: 177530

clang/lib/Format/Format.cpp
clang/unittests/Format/FormatTest.cpp

index b1005b5..b4cbfec 100644 (file)
@@ -601,9 +601,8 @@ private:
   unsigned addTokenToState(bool Newline, bool DryRun, LineState &State) {
     const AnnotatedToken &Current = *State.NextToken;
     const AnnotatedToken &Previous = *State.NextToken->Parent;
-    assert(State.Stack.size());
 
-    if (Current.Type == TT_ImplicitStringLiteral) {
+    if (State.Stack.size() == 0 || Current.Type == TT_ImplicitStringLiteral) {
       State.Column += State.NextToken->FormatTok.WhiteSpaceLength +
                       State.NextToken->FormatTok.TokenLength;
       if (State.NextToken->Children.empty())
index 2a3d66d..0edb191 100644 (file)
@@ -2413,7 +2413,10 @@ TEST_F(FormatTest, IncorrectAccessSpecifier) {
                "B { int x; }");
 }
 
-TEST_F(FormatTest, IncorrectCodeUnbalancedBraces) { verifyFormat("{"); }
+TEST_F(FormatTest, IncorrectCodeUnbalancedBraces) {
+  verifyFormat("{");
+  verifyFormat("#})");
+}
 
 TEST_F(FormatTest, IncorrectCodeDoNoWhile) {
   verifyFormat("do {\n}");