[clang-format] Fix bug that misses some function-like macro usages

Fixes PR41483

Differential Revision: https://reviews.llvm.org/D61297

llvm-svn: 359687
This commit is contained in:
Owen Pan 2019-05-01 15:03:41 +00:00
parent 6711b9699a
commit 945890a63c
2 changed files with 15 additions and 4 deletions

View File

@ -1335,10 +1335,15 @@ void UnwrappedLineParser::parseStructuralElement() {
// See if the following token should start a new unwrapped line.
StringRef Text = FormatTok->TokenText;
nextToken();
if (Line->Tokens.size() == 1 &&
// JS doesn't have macros, and within classes colons indicate fields,
// not labels.
Style.Language != FormatStyle::LK_JavaScript) {
// JS doesn't have macros, and within classes colons indicate fields, not
// labels.
if (Style.Language == FormatStyle::LK_JavaScript)
break;
TokenCount = Line->Tokens.size();
if (TokenCount == 1 ||
(TokenCount == 2 && Line->Tokens.front().Tok->is(tok::comment))) {
if (FormatTok->Tok.is(tok::colon) && !Line->MustBeDeclaration) {
Line->Tokens.begin()->Tok->MustBreakBefore = true;
parseLabel();

View File

@ -2584,6 +2584,12 @@ TEST_F(FormatTest, MacrosWithoutTrailingSemicolon) {
verifyFormat("VISIT_GL_CALL(GenBuffers, void, (GLsizei n, GLuint* buffers), "
"(n, buffers))\n",
getChromiumStyle(FormatStyle::LK_Cpp));
// See PR41483
EXPECT_EQ("/**/ FOO(a)\n"
"FOO(b)",
format("/**/ FOO(a)\n"
"FOO(b)"));
}
TEST_F(FormatTest, MacroCallsWithoutTrailingSemicolon) {