[cfe-commits] r172049 - in /cfe/trunk: lib/Format/Format.cpp unittests/Format/FormatTest.cpp
Daniel Jasper
djasper at google.com
Thu Jan 10 01:26:47 PST 2013
Author: djasper
Date: Thu Jan 10 03:26:47 2013
New Revision: 172049
URL: http://llvm.org/viewvc/llvm-project?rev=172049&view=rev
Log:
Do more error checking for '{}'.
This fixes llvm.org/PR14883, where clang-format would run into an
assertion on:
void f() { return } 42
Modified:
cfe/trunk/lib/Format/Format.cpp
cfe/trunk/unittests/Format/FormatTest.cpp
Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=172049&r1=172048&r2=172049&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Thu Jan 10 03:26:47 2013
@@ -651,6 +651,21 @@
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 @@
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 @@
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;
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=172049&r1=172048&r2=172049&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Thu Jan 10 03:26:47 2013
@@ -1036,6 +1036,10 @@
// Error recovery tests.
//===----------------------------------------------------------------------===//
+TEST_F(FormatTest, IncorrectCodeTrailingStuff) {
+ verifyFormat("void f() { return } 42");
+}
+
TEST_F(FormatTest, IndentationWithinColumnLimitNotPossible) {
verifyFormat("int aaaaaaaa =\n"
" // Overly long comment\n"
More information about the cfe-commits
mailing list