[llvm-branch-commits] [clang] 1414560 - [clang-format] Fix idempotent format of hash in macro body (#118513)
Tobias Hieta via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Jan 13 02:51:06 PST 2025
Author: Owen Pan
Date: 2025-01-13T11:51:26+01:00
New Revision: 1414560a9c16039a2037de3e9d7dde8003f2b591
URL: https://github.com/llvm/llvm-project/commit/1414560a9c16039a2037de3e9d7dde8003f2b591
DIFF: https://github.com/llvm/llvm-project/commit/1414560a9c16039a2037de3e9d7dde8003f2b591.diff
LOG: [clang-format] Fix idempotent format of hash in macro body (#118513)
Fixes #118334.
(cherry picked from commit 54ca1c4212e7ff3df880adb1a04dc3d41c033681)
Added:
Modified:
clang/lib/Format/UnwrappedLineParser.cpp
clang/unittests/Format/FormatTest.cpp
clang/unittests/Format/TokenAnnotatorTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index bfb592ae074938..e3fb976ee1cc44 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -512,7 +512,7 @@ void UnwrappedLineParser::calculateBraceTypes(bool ExpectClassBody) {
break;
do {
NextTok = Tokens->getNextToken();
- } while (NextTok->NewlinesBefore == 0 && NextTok->isNot(tok::eof));
+ } while (!NextTok->HasUnescapedNewline && NextTok->isNot(tok::eof));
while (NextTok->is(tok::comment))
NextTok = Tokens->getNextToken();
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index b7d8fc8ea72c6c..7b2947acea4a2e 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -5724,6 +5724,24 @@ TEST_F(FormatTest, HashInMacroDefinition) {
getLLVMStyleWithColumns(22));
verifyFormat("#define A void # ## #", getLLVMStyleWithColumns(22));
+
+#if 0
+ // FIXME: The correct format is:
+ verifyFormat("{\n"
+ " {\n"
+ "#define GEN_ID(_x) char *_x{#_x}\n"
+ " GEN_ID(one);\n"
+ " }\n"
+ "}");
+#endif
+ verifyFormat("{\n"
+ " {\n"
+ "#define GEN_ID(_x) \\\n"
+ " char *_x { #_x }\n"
+ " GEN_ID(one);\n"
+ " }\n"
+ "}",
+ getGoogleStyle());
}
TEST_F(FormatTest, RespectWhitespaceInMacroDefinitions) {
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp
index 07999116ab0cf0..7d4ff3dfa32490 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -3203,6 +3203,25 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
EXPECT_BRACE_KIND(Tokens[11], BK_BracedInit);
EXPECT_BRACE_KIND(Tokens[13], BK_Block);
+ Tokens = annotate("{\n"
+ " {\n"
+ "#define GEN_ID(_x) char *_x{#_x}\n"
+ " GEN_ID(one);\n"
+ " }\n"
+ "}");
+ ASSERT_EQ(Tokens.size(), 23u) << Tokens;
+ EXPECT_TOKEN(Tokens[0], tok::l_brace, TT_BlockLBrace);
+ EXPECT_BRACE_KIND(Tokens[0], BK_Block);
+ EXPECT_TOKEN(Tokens[1], tok::l_brace, TT_BlockLBrace);
+ EXPECT_BRACE_KIND(Tokens[1], BK_Block);
+#if 0
+ // FIXME:
+ EXPECT_BRACE_KIND(Tokens[11], BK_BracedInit);
+ EXPECT_BRACE_KIND(Tokens[14], BK_BracedInit);
+#endif
+ EXPECT_BRACE_KIND(Tokens[20], BK_Block);
+ EXPECT_BRACE_KIND(Tokens[21], BK_Block);
+
Tokens = annotate("a = class extends goog.a {};",
getGoogleStyle(FormatStyle::LK_JavaScript));
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
More information about the llvm-branch-commits
mailing list