aboutsummaryrefslogtreecommitdiff
path: root/lib/Format/Format.cpp
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2013-01-10 09:26:47 +0000
committerDaniel Jasper <djasper@google.com>2013-01-10 09:26:47 +0000
commit700e710544a50ec63f984b9b098530bf9107920a (patch)
treec6bd533a7e87f689117115d2fc09e43f8c3c5afc /lib/Format/Format.cpp
parentf20318f9e27a064bdd9a3fbb51d2c3a4a4f3ac2e (diff)
Do more error checking for '{}'.
This fixes llvm.org/PR14883, where clang-format would run into an assertion on: void f() { return } 42 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172049 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Format/Format.cpp')
-rw-r--r--lib/Format/Format.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp
index 1ab577049c..4de26e2b4e 100644
--- a/lib/Format/Format.cpp
+++ b/lib/Format/Format.cpp
@@ -651,6 +651,21 @@ public:
return false;
}
+ bool parseBrace() {
+ while (CurrentToken != NULL) {
+ if (CurrentToken->is(tok::r_brace)) {
+ next();
+ return true;
+ }
+ if (CurrentToken->is(tok::r_paren) || CurrentToken->is(tok::r_square))
+ return false;
+ if (!consumeToken())
+ return false;
+ }
+ // Lines can currently end with '{'.
+ return true;
+ }
+
bool parseConditional() {
while (CurrentToken != NULL) {
if (CurrentToken->is(tok::colon)) {
@@ -693,6 +708,10 @@ public:
if (!parseSquare())
return false;
break;
+ case tok::l_brace:
+ if (!parseBrace())
+ return false;
+ break;
case tok::less:
if (parseAngle())
Tok->Type = TT_TemplateOpener;
@@ -705,6 +724,11 @@ public:
case tok::r_paren:
case tok::r_square:
return false;
+ case tok::r_brace:
+ // Lines can start with '}'.
+ if (Tok->Parent != NULL)
+ return false;
+ break;
case tok::greater:
Tok->Type = TT_BinaryOperator;
break;