summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Format/UnwrappedLineParser.cpp8
-rw-r--r--clang/unittests/Format/FormatTest.cpp4
2 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index d863b5db0c0..204132daae3 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -694,9 +694,13 @@ void UnwrappedLineParser::parseStructuralElement() {
break;
case tok::caret:
nextToken();
- if (FormatTok->is(tok::l_brace)) {
+ if (FormatTok->Tok.isAnyIdentifier() ||
+ FormatTok->isSimpleTypeSpecifier())
+ nextToken();
+ if (FormatTok->is(tok::l_paren))
+ parseParens();
+ if (FormatTok->is(tok::l_brace))
parseChildBlock();
- }
break;
case tok::l_brace:
if (!tryToParseBracedList()) {
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 3d1e5a5d8e2..2bf55125765 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -8125,6 +8125,10 @@ TEST_F(FormatTest, FormatsLambdas) {
TEST_F(FormatTest, FormatsBlocks) {
verifyFormat("int (^Block)(int, int);");
verifyFormat("int (^Block1)(int, int) = ^(int i, int j)");
+ verifyFormat("void (^block)(int) = ^(id test) { int i; };");
+ verifyFormat("void (^block)(int) = ^(int test) { int i; };");
+ verifyFormat("void (^block)(int) = ^id(int test) { int i; };");
+ verifyFormat("void (^block)(int) = ^int(int test) { int i; };");
verifyFormat("foo(^{ bar(); });");
verifyFormat("foo(a, ^{ bar(); });");
OpenPOWER on IntegriCloud