[clang] 28b76b1 - [clang-format] Handle goto labels for RemoveBracesLLVM
via cfe-commits
cfe-commits at lists.llvm.org
Sat Mar 5 12:47:09 PST 2022
Author: owenca
Date: 2022-03-05T12:46:57-08:00
New Revision: 28b76b1e23bb25ed333183361705841ff8f77574
URL: https://github.com/llvm/llvm-project/commit/28b76b1e23bb25ed333183361705841ff8f77574
DIFF: https://github.com/llvm/llvm-project/commit/28b76b1e23bb25ed333183361705841ff8f77574.diff
LOG: [clang-format] Handle goto labels for RemoveBracesLLVM
Differential Revision: https://reviews.llvm.org/D121042
Added:
Modified:
clang/lib/Format/UnwrappedLineParser.cpp
clang/lib/Format/UnwrappedLineParser.h
clang/unittests/Format/FormatTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index 646374c0cd626..a62aa5e649839 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -476,6 +476,7 @@ bool UnwrappedLineParser::parseLevel(bool HasOpeningBrace,
: TT_Unknown;
const bool IsPrecededByCommentOrPPDirective =
!Style.RemoveBracesLLVM || precededByCommentOrPPDirective();
+ bool HasLabel = false;
unsigned StatementCount = 0;
bool SwitchLabelEncountered = false;
do {
@@ -486,9 +487,9 @@ bool UnwrappedLineParser::parseLevel(bool HasOpeningBrace,
kind = tok::r_brace;
auto ParseDefault = [this, HasOpeningBrace, IfKind, NextLevelLBracesType,
- &StatementCount] {
- parseStructuralElement(IfKind, /*IsTopLevel=*/!HasOpeningBrace,
- /*NextLBracesType=*/NextLevelLBracesType);
+ &HasLabel, &StatementCount] {
+ parseStructuralElement(IfKind, !HasOpeningBrace, NextLevelLBracesType,
+ HasLabel ? nullptr : &HasLabel);
++StatementCount;
assert(StatementCount > 0 && "StatementCount overflow!");
};
@@ -523,7 +524,7 @@ bool UnwrappedLineParser::parseLevel(bool HasOpeningBrace,
if (HasOpeningBrace) {
if (!Style.RemoveBracesLLVM)
return false;
- if (FormatTok->isNot(tok::r_brace) || StatementCount != 1 ||
+ if (FormatTok->isNot(tok::r_brace) || StatementCount != 1 || HasLabel ||
IsPrecededByCommentOrPPDirective ||
precededByCommentOrPPDirective())
return false;
@@ -1312,7 +1313,8 @@ void UnwrappedLineParser::readTokenWithJavaScriptASI() {
void UnwrappedLineParser::parseStructuralElement(IfStmtKind *IfKind,
bool IsTopLevel,
- TokenType NextLBracesType) {
+ TokenType NextLBracesType,
+ bool *HasLabel) {
if (Style.Language == FormatStyle::LK_TableGen &&
FormatTok->is(tok::pp_include)) {
nextToken();
@@ -1758,6 +1760,8 @@ void UnwrappedLineParser::parseStructuralElement(IfStmtKind *IfKind,
if (FormatTok->is(tok::colon) && !Line->MustBeDeclaration) {
Line->Tokens.begin()->Tok->MustBreakBefore = true;
parseLabel(!Style.IndentGotoLabels);
+ if (HasLabel)
+ *HasLabel = true;
return;
}
// Recognize function-like macro usages without trailing semicolon as
diff --git a/clang/lib/Format/UnwrappedLineParser.h b/clang/lib/Format/UnwrappedLineParser.h
index b2a2ae1bedc17..5cc01398a5457 100644
--- a/clang/lib/Format/UnwrappedLineParser.h
+++ b/clang/lib/Format/UnwrappedLineParser.h
@@ -112,7 +112,8 @@ class UnwrappedLineParser {
void readTokenWithJavaScriptASI();
void parseStructuralElement(IfStmtKind *IfKind = nullptr,
bool IsTopLevel = false,
- TokenType NextLBracesType = TT_Unknown);
+ TokenType NextLBracesType = TT_Unknown,
+ bool *HasLabel = nullptr);
bool tryToParseBracedList();
bool parseBracedList(bool ContinueOnSemicolons = false, bool IsEnum = false,
tok::TokenKind ClosingBraceKind = tok::r_brace);
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index f453a4f77f8b3..8909acdae5dc3 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -25018,6 +25018,23 @@ TEST_F(FormatTest, RemoveBraces) {
"}",
Style);
+ verifyFormat("if (a) {\n"
+ "Label:\n"
+ "}",
+ Style);
+
+ verifyFormat("if (a) {\n"
+ "Label:\n"
+ " f();\n"
+ "}",
+ Style);
+
+ verifyFormat("if (a) {\n"
+ " f();\n"
+ "Label:\n"
+ "}",
+ Style);
+
// FIXME: See https://github.com/llvm/llvm-project/issues/53543.
#if 0
Style.ColumnLimit = 65;
More information about the cfe-commits
mailing list