Clang Format: Handle missing semicolon
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172606 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp
index 9a29ff0..d6c66dc 100644
--- a/lib/Format/UnwrappedLineParser.cpp
+++ b/lib/Format/UnwrappedLineParser.cpp
@@ -306,8 +306,8 @@
case tok::kw_enum:
parseEnum();
return;
- case tok::kw_struct: // fallthrough
- case tok::kw_union: // fallthrough
+ case tok::kw_struct:
+ case tok::kw_union:
case tok::kw_class:
parseRecord();
// A record declaration or definition is always the start of a structural
@@ -317,6 +317,9 @@
nextToken();
addUnwrappedLine();
return;
+ case tok::r_brace:
+ addUnwrappedLine();
+ return;
case tok::l_paren:
parseParens();
break;
diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp
index ca022a4..4d860c1 100644
--- a/unittests/Format/FormatTest.cpp
+++ b/unittests/Format/FormatTest.cpp
@@ -1213,7 +1213,25 @@
//===----------------------------------------------------------------------===//
TEST_F(FormatTest, IncorrectCodeTrailingStuff) {
- verifyFormat("void f() { return } 42");
+ verifyFormat("void f() { return }\n42");
+ verifyFormat("void f() {\n"
+ " if (0)\n"
+ " return\n"
+ "}\n"
+ "42");
+}
+
+TEST_F(FormatTest, IncorrectCodeMissingSemicolon) {
+ EXPECT_EQ("void f() { return }", format("void f ( ) { return }"));
+ EXPECT_EQ("void f() {\n"
+ " if (a)\n"
+ " return\n"
+ "}", format("void f ( ) { if ( a ) return }"));
+ EXPECT_EQ("namespace N { void f() }", format("namespace N { void f() }"));
+ EXPECT_EQ("namespace N {\n"
+ "void f() {}\n"
+ "void g()\n"
+ "}", format("namespace N { void f( ) { } void g( ) }"));
}
TEST_F(FormatTest, IndentationWithinColumnLimitNotPossible) {