Skip to content

Commit 54ca1c4

Browse files
authoredDec 11, 2024
[clang-format] Fix idempotent format of hash in macro body (#118513)
Fixes #118334.
1 parent e940353 commit 54ca1c4

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed
 

‎clang/lib/Format/UnwrappedLineParser.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ void UnwrappedLineParser::calculateBraceTypes(bool ExpectClassBody) {
512512
break;
513513
do {
514514
NextTok = Tokens->getNextToken();
515-
} while (NextTok->NewlinesBefore == 0 && NextTok->isNot(tok::eof));
515+
} while (!NextTok->HasUnescapedNewline && NextTok->isNot(tok::eof));
516516

517517
while (NextTok->is(tok::comment))
518518
NextTok = Tokens->getNextToken();

‎clang/unittests/Format/FormatTest.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -5724,6 +5724,24 @@ TEST_F(FormatTest, HashInMacroDefinition) {
57245724
getLLVMStyleWithColumns(22));
57255725

57265726
verifyFormat("#define A void # ## #", getLLVMStyleWithColumns(22));
5727+
5728+
#if 0
5729+
// FIXME: The correct format is:
5730+
verifyFormat("{\n"
5731+
" {\n"
5732+
"#define GEN_ID(_x) char *_x{#_x}\n"
5733+
" GEN_ID(one);\n"
5734+
" }\n"
5735+
"}");
5736+
#endif
5737+
verifyFormat("{\n"
5738+
" {\n"
5739+
"#define GEN_ID(_x) \\\n"
5740+
" char *_x { #_x }\n"
5741+
" GEN_ID(one);\n"
5742+
" }\n"
5743+
"}",
5744+
getGoogleStyle());
57275745
}
57285746

57295747
TEST_F(FormatTest, RespectWhitespaceInMacroDefinitions) {

‎clang/unittests/Format/TokenAnnotatorTest.cpp

+19
Original file line numberDiff line numberDiff line change
@@ -3346,6 +3346,25 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
33463346
EXPECT_BRACE_KIND(Tokens[11], BK_BracedInit);
33473347
EXPECT_BRACE_KIND(Tokens[13], BK_Block);
33483348

3349+
Tokens = annotate("{\n"
3350+
" {\n"
3351+
"#define GEN_ID(_x) char *_x{#_x}\n"
3352+
" GEN_ID(one);\n"
3353+
" }\n"
3354+
"}");
3355+
ASSERT_EQ(Tokens.size(), 23u) << Tokens;
3356+
EXPECT_TOKEN(Tokens[0], tok::l_brace, TT_BlockLBrace);
3357+
EXPECT_BRACE_KIND(Tokens[0], BK_Block);
3358+
EXPECT_TOKEN(Tokens[1], tok::l_brace, TT_BlockLBrace);
3359+
EXPECT_BRACE_KIND(Tokens[1], BK_Block);
3360+
#if 0
3361+
// FIXME:
3362+
EXPECT_BRACE_KIND(Tokens[11], BK_BracedInit);
3363+
EXPECT_BRACE_KIND(Tokens[14], BK_BracedInit);
3364+
#endif
3365+
EXPECT_BRACE_KIND(Tokens[20], BK_Block);
3366+
EXPECT_BRACE_KIND(Tokens[21], BK_Block);
3367+
33493368
Tokens = annotate("a = class extends goog.a {};",
33503369
getGoogleStyle(FormatStyle::LK_JavaScript));
33513370
ASSERT_EQ(Tokens.size(), 11u) << Tokens;

0 commit comments

Comments
 (0)