[clang-format] Correctly annotate braces of empty ctors/dtors (#82097)
Also reformat Polly. Fixes #79834.
This commit is contained in:
@@ -3754,10 +3754,11 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) const {
|
||||
for (AnnotatedLine *ChildLine : Line.Children)
|
||||
calculateFormattingInformation(*ChildLine);
|
||||
|
||||
Line.First->TotalLength =
|
||||
Line.First->IsMultiline ? Style.ColumnLimit
|
||||
: Line.FirstStartColumn + Line.First->ColumnWidth;
|
||||
FormatToken *Current = Line.First->Next;
|
||||
auto *First = Line.First;
|
||||
First->TotalLength = First->IsMultiline
|
||||
? Style.ColumnLimit
|
||||
: Line.FirstStartColumn + First->ColumnWidth;
|
||||
FormatToken *Current = First->Next;
|
||||
bool InFunctionDecl = Line.MightBeFunctionDecl;
|
||||
bool AlignArrayOfStructures =
|
||||
(Style.AlignArrayOfStructures != FormatStyle::AIAS_None &&
|
||||
@@ -3779,16 +3780,15 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) const {
|
||||
if (const bool IsCtorOrDtor = Tok->is(TT_CtorDtorDeclName);
|
||||
IsCtorOrDtor ||
|
||||
isFunctionDeclarationName(Style.isCpp(), *Tok, Line, ClosingParen)) {
|
||||
if (!IsCtorOrDtor) {
|
||||
LineIsFunctionDeclaration = true;
|
||||
if (!IsCtorOrDtor)
|
||||
Tok->setFinalizedType(TT_FunctionDeclarationName);
|
||||
}
|
||||
LineIsFunctionDeclaration = true;
|
||||
SeenName = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsCpp && LineIsFunctionDeclaration &&
|
||||
if (IsCpp && (LineIsFunctionDeclaration || First->is(TT_CtorDtorDeclName)) &&
|
||||
Line.endsWith(tok::semi, tok::r_brace)) {
|
||||
auto *Tok = Line.Last->Previous;
|
||||
while (Tok->isNot(tok::r_brace))
|
||||
@@ -3811,7 +3811,7 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) const {
|
||||
if (IsCpp) {
|
||||
if (!LineIsFunctionDeclaration) {
|
||||
// Annotate */&/&& in `operator` function calls as binary operators.
|
||||
for (const auto *Tok = Line.First; Tok; Tok = Tok->Next) {
|
||||
for (const auto *Tok = First; Tok; Tok = Tok->Next) {
|
||||
if (Tok->isNot(tok::kw_operator))
|
||||
continue;
|
||||
do {
|
||||
@@ -3948,7 +3948,7 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) const {
|
||||
|
||||
calculateUnbreakableTailLengths(Line);
|
||||
unsigned IndentLevel = Line.Level;
|
||||
for (Current = Line.First; Current; Current = Current->Next) {
|
||||
for (Current = First; Current; Current = Current->Next) {
|
||||
if (Current->Role)
|
||||
Current->Role->precomputeFormattingInfos(Current);
|
||||
if (Current->MatchingParen &&
|
||||
|
||||
@@ -2678,6 +2678,20 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
|
||||
EXPECT_TOKEN(Tokens[4], tok::l_brace, TT_FunctionLBrace);
|
||||
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
|
||||
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
|
||||
|
||||
Tokens = annotate("struct Foo {\n"
|
||||
" Foo() {};\n"
|
||||
" ~Foo() {};\n"
|
||||
"};");
|
||||
ASSERT_EQ(Tokens.size(), 19u) << Tokens;
|
||||
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_CtorDtorDeclName);
|
||||
EXPECT_TOKEN(Tokens[6], tok::l_brace, TT_FunctionLBrace);
|
||||
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
|
||||
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
|
||||
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_CtorDtorDeclName);
|
||||
EXPECT_TOKEN(Tokens[13], tok::l_brace, TT_FunctionLBrace);
|
||||
EXPECT_BRACE_KIND(Tokens[13], BK_Block);
|
||||
EXPECT_BRACE_KIND(Tokens[14], BK_Block);
|
||||
}
|
||||
|
||||
TEST_F(TokenAnnotatorTest, StreamOperator) {
|
||||
|
||||
@@ -842,7 +842,7 @@ class JSONImporterPrinterLegacyPass final : public ScopPass {
|
||||
public:
|
||||
static char ID;
|
||||
|
||||
JSONImporterPrinterLegacyPass() : JSONImporterPrinterLegacyPass(outs()){};
|
||||
JSONImporterPrinterLegacyPass() : JSONImporterPrinterLegacyPass(outs()) {}
|
||||
explicit JSONImporterPrinterLegacyPass(llvm::raw_ostream &OS)
|
||||
: ScopPass(ID), OS(OS) {}
|
||||
|
||||
|
||||
@@ -1463,7 +1463,7 @@ class DeLICMPrinterLegacyPass final : public ScopPass {
|
||||
public:
|
||||
static char ID;
|
||||
|
||||
DeLICMPrinterLegacyPass() : DeLICMPrinterLegacyPass(outs()){};
|
||||
DeLICMPrinterLegacyPass() : DeLICMPrinterLegacyPass(outs()) {}
|
||||
explicit DeLICMPrinterLegacyPass(llvm::raw_ostream &OS)
|
||||
: ScopPass(ID), OS(OS) {}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ public:
|
||||
static char ID;
|
||||
|
||||
FlattenSchedulePrinterLegacyPass()
|
||||
: FlattenSchedulePrinterLegacyPass(outs()){};
|
||||
: FlattenSchedulePrinterLegacyPass(outs()) {}
|
||||
explicit FlattenSchedulePrinterLegacyPass(llvm::raw_ostream &OS)
|
||||
: ScopPass(ID), OS(OS) {}
|
||||
|
||||
|
||||
@@ -1149,7 +1149,7 @@ class ForwardOpTreePrinterLegacyPass final : public ScopPass {
|
||||
public:
|
||||
static char ID;
|
||||
|
||||
ForwardOpTreePrinterLegacyPass() : ForwardOpTreePrinterLegacyPass(outs()){};
|
||||
ForwardOpTreePrinterLegacyPass() : ForwardOpTreePrinterLegacyPass(outs()) {}
|
||||
explicit ForwardOpTreePrinterLegacyPass(llvm::raw_ostream &OS)
|
||||
: ScopPass(ID), OS(OS) {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user