release/18.x: [clang-format] Correctly annotate braces in macros (#87953)
Backport 58323de2e5ed
This commit is contained in:
parent
b9b73814ad
commit
35fea10327
@ -539,16 +539,6 @@ void UnwrappedLineParser::calculateBraceTypes(bool ExpectClassBody) {
|
||||
if (Style.Language == FormatStyle::LK_Proto) {
|
||||
ProbablyBracedList = NextTok->isOneOf(tok::comma, tok::r_square);
|
||||
} else {
|
||||
// Skip NextTok over preprocessor lines, otherwise we may not
|
||||
// properly diagnose the block as a braced intializer
|
||||
// if the comma separator appears after the pp directive.
|
||||
while (NextTok->is(tok::hash)) {
|
||||
ScopedMacroState MacroState(*Line, Tokens, NextTok);
|
||||
do {
|
||||
NextTok = Tokens->getNextToken();
|
||||
} while (NextTok->isNot(tok::eof));
|
||||
}
|
||||
|
||||
// Using OriginalColumn to distinguish between ObjC methods and
|
||||
// binary operators is a bit hacky.
|
||||
bool NextIsObjCMethod = NextTok->isOneOf(tok::plus, tok::minus) &&
|
||||
@ -607,6 +597,16 @@ void UnwrappedLineParser::calculateBraceTypes(bool ExpectClassBody) {
|
||||
NextTok = Tokens->getNextToken();
|
||||
ProbablyBracedList = NextTok->isNot(tok::l_square);
|
||||
}
|
||||
|
||||
// Cpp macro definition body that is a nonempty braced list or block:
|
||||
if (Style.isCpp() && Line->InMacroBody && PrevTok != FormatTok &&
|
||||
!FormatTok->Previous && NextTok->is(tok::eof) &&
|
||||
// A statement can end with only `;` (simple statement), a block
|
||||
// closing brace (compound statement), or `:` (label statement).
|
||||
// If PrevTok is a block opening brace, Tok ends an empty block.
|
||||
!PrevTok->isOneOf(tok::semi, BK_Block, tok::colon)) {
|
||||
ProbablyBracedList = true;
|
||||
}
|
||||
}
|
||||
if (ProbablyBracedList) {
|
||||
Tok->setBlockKind(BK_BracedInit);
|
||||
|
@ -1865,6 +1865,13 @@ TEST_F(FormatTest, UnderstandsMacros) {
|
||||
verifyFormat("MACRO(co_return##something)");
|
||||
|
||||
verifyFormat("#define A x:");
|
||||
|
||||
verifyFormat("#define Foo(Bar) {#Bar}", "#define Foo(Bar) \\\n"
|
||||
" { \\\n"
|
||||
" #Bar \\\n"
|
||||
" }");
|
||||
verifyFormat("#define Foo(Bar) {#Bar}", "#define Foo(Bar) \\\n"
|
||||
" { #Bar }");
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, ShortBlocksInMacrosDontMergeWithCodeAfterMacro) {
|
||||
@ -10865,7 +10872,7 @@ TEST_F(FormatTest, UnderstandsTemplateParameters) {
|
||||
verifyFormat("some_templated_type<decltype([](int i) { return i; })>");
|
||||
|
||||
verifyFormat("#define FOO(typeName, realClass) \\\n"
|
||||
" { #typeName, foo<FooType>(new foo<realClass>(#typeName)) }",
|
||||
" {#typeName, foo<FooType>(new foo<realClass>(#typeName))}",
|
||||
getLLVMStyleWithColumns(60));
|
||||
}
|
||||
|
||||
|
@ -1885,14 +1885,20 @@ TEST_F(TokenAnnotatorTest, UnderstandHashInMacro) {
|
||||
" #Bar \\\n"
|
||||
" }");
|
||||
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
|
||||
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
|
||||
EXPECT_BRACE_KIND(Tokens[9], BK_Block);
|
||||
EXPECT_BRACE_KIND(Tokens[6], BK_BracedInit);
|
||||
EXPECT_BRACE_KIND(Tokens[9], BK_BracedInit);
|
||||
|
||||
Tokens = annotate("#define Foo(Bar) \\\n"
|
||||
" { #Bar }");
|
||||
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
|
||||
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
|
||||
EXPECT_BRACE_KIND(Tokens[9], BK_Block);
|
||||
EXPECT_BRACE_KIND(Tokens[6], BK_BracedInit);
|
||||
EXPECT_BRACE_KIND(Tokens[9], BK_BracedInit);
|
||||
|
||||
Tokens = annotate("#define FOO(typeName, realClass) \\\n"
|
||||
" {#typeName, foo<Foo>(new foo<realClass>(#typeName))}");
|
||||
ASSERT_EQ(Tokens.size(), 29u) << Tokens;
|
||||
EXPECT_BRACE_KIND(Tokens[8], BK_BracedInit);
|
||||
EXPECT_BRACE_KIND(Tokens[27], BK_BracedInit);
|
||||
}
|
||||
|
||||
TEST_F(TokenAnnotatorTest, UnderstandsAttributeMacros) {
|
||||
|
@ -45,7 +45,7 @@ using namespace llvm;
|
||||
#define DEBUG_TYPE "polly-detect"
|
||||
|
||||
#define SCOP_STAT(NAME, DESC) \
|
||||
{ "polly-detect", "NAME", "Number of rejected regions: " DESC }
|
||||
{"polly-detect", "NAME", "Number of rejected regions: " DESC}
|
||||
|
||||
static Statistic RejectStatistics[] = {
|
||||
SCOP_STAT(CFG, ""),
|
||||
|
Loading…
x
Reference in New Issue
Block a user