From: Manuel Klimek Date: Fri, 11 Jan 2013 18:13:04 +0000 (+0000) Subject: Fix parsing of initializer lists with elaborated type specifier. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=606e07ecc0b7b0e01d23baa833b4b4c73af0d4f4;p=clang Fix parsing of initializer lists with elaborated type specifier. Now we correctly parse and format: verifyFormat("struct foo a = { bar }; int n; git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172229 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index f7332ee770..758f8193ca 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -319,7 +319,7 @@ void UnwrappedLineParser::parseStructuralElement() { return; case tok::kw_struct: // fallthrough case tok::kw_class: - parseStructOrClass(); + parseStructClassOrBracedList(); return; case tok::semi: nextToken(); @@ -565,7 +565,7 @@ void UnwrappedLineParser::parseEnum() { } while (!eof()); } -void UnwrappedLineParser::parseStructOrClass() { +void UnwrappedLineParser::parseStructClassOrBracedList() { nextToken(); do { switch (FormatTok.Tok.getKind()) { @@ -578,6 +578,12 @@ void UnwrappedLineParser::parseStructOrClass() { nextToken(); addUnwrappedLine(); return; + case tok::equal: + nextToken(); + if (FormatTok.Tok.is(tok::l_brace)) { + parseBracedList(); + } + break; default: nextToken(); break; diff --git a/lib/Format/UnwrappedLineParser.h b/lib/Format/UnwrappedLineParser.h index 837b5391f6..cfd0608ba2 100644 --- a/lib/Format/UnwrappedLineParser.h +++ b/lib/Format/UnwrappedLineParser.h @@ -146,7 +146,7 @@ private: void parseNamespace(); void parseAccessSpecifier(); void parseEnum(); - void parseStructOrClass(); + void parseStructClassOrBracedList(); void parseObjCProtocolList(); void parseObjCUntilAtEnd(); void parseObjCInterfaceOrImplementation(); diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index a16f66cd08..71fa83ccb1 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -1163,6 +1163,10 @@ TEST_F(FormatTest, PullTrivialFunctionDefinitionsIntoSingleLine) { "}"); } +TEST_F(FormatTest, BracedInitListWithElaboratedTypeSpecifier) { + verifyFormat("struct foo a = { bar };\nint n;"); +} + // FIXME: This breaks the order of the unwrapped lines: // TEST_F(FormatTest, OrderUnwrappedLines) { // verifyFormat("{\n"