diff --git a/debian/patches/fix-clang-format-bug-47589.patch b/debian/patches/fix-clang-format-bug-47589.patch new file mode 100644 index 00000000..010c3339 --- /dev/null +++ b/debian/patches/fix-clang-format-bug-47589.patch @@ -0,0 +1,148 @@ +From 05860350084abdae30dfbd2181452d1b87dca3b4 Mon Sep 17 00:00:00 2001 +From: Sylvestre Ledru +Date: Mon, 12 Oct 2020 18:47:30 +0200 +Subject: [PATCH] Revert "[clang-format] Fix AlignConsecutive on PP blocks" + +This reverts commit b2eb439317576ce718193763c12bff9fccdfc166. +--- + clang/lib/Format/FormatToken.h | 6 ----- + clang/lib/Format/UnwrappedLineParser.cpp | 2 -- + clang/lib/Format/WhitespaceManager.cpp | 10 +++----- + clang/unittests/Format/FormatTest.cpp | 23 ------------------- + clang/unittests/Format/FormatTestComments.cpp | 21 ----------------- + 5 files changed, 3 insertions(+), 59 deletions(-) + +diff --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h +index d4287f53fde..b132a3e84da 100644 +--- a/clang/lib/Format/FormatToken.h ++++ b/clang/lib/Format/FormatToken.h +@@ -183,12 +183,6 @@ struct FormatToken { + /// before the token. + bool MustBreakBefore = false; + +- /// Whether to not align across this token +- /// +- /// This happens for example when a preprocessor directive ended directly +- /// before the token, but very rarely otherwise. +- bool MustBreakAlignBefore = false; +- + /// The raw text of the token. + /// + /// Contains the raw token text without leading whitespace and without leading +diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp +index a37386425aa..ea8a41cfba8 100644 +--- a/clang/lib/Format/UnwrappedLineParser.cpp ++++ b/clang/lib/Format/UnwrappedLineParser.cpp +@@ -3037,7 +3037,6 @@ void UnwrappedLineParser::readToken(int LevelDifference) { + } + FormatTok = Tokens->getNextToken(); + FormatTok->MustBreakBefore = true; +- FormatTok->MustBreakAlignBefore = true; + } + + if (!PPStack.empty() && (PPStack.back().Kind == PP_Unreachable) && +@@ -3062,7 +3061,6 @@ void UnwrappedLineParser::pushToken(FormatToken *Tok) { + Line->Tokens.push_back(UnwrappedLineNode(Tok)); + if (MustBreakBeforeNextToken) { + Line->Tokens.back().Tok->MustBreakBefore = true; +- Line->Tokens.back().Tok->MustBreakAlignBefore = true; + MustBreakBeforeNextToken = false; + } + } +diff --git a/clang/lib/Format/WhitespaceManager.cpp b/clang/lib/Format/WhitespaceManager.cpp +index 32e0b685ea0..3a265bd0916 100644 +--- a/clang/lib/Format/WhitespaceManager.cpp ++++ b/clang/lib/Format/WhitespaceManager.cpp +@@ -411,11 +411,9 @@ static unsigned AlignTokens(const FormatStyle &Style, F &&Matches, + if (Changes[i].NewlinesBefore != 0) { + CommasBeforeMatch = 0; + EndOfSequence = i; +- // If there is a blank line, there is a forced-align-break (eg, +- // preprocessor), or if the last line didn't contain any matching token, +- // the sequence ends here. +- if (Changes[i].NewlinesBefore > 1 || +- Changes[i].Tok->MustBreakAlignBefore || !FoundMatchOnLine) ++ // If there is a blank line, or if the last line didn't contain any ++ // matching token, the sequence ends here. ++ if (Changes[i].NewlinesBefore > 1 || !FoundMatchOnLine) + AlignCurrentSequence(); + + FoundMatchOnLine = false; +@@ -726,8 +724,6 @@ void WhitespaceManager::alignTrailingComments() { + if (Changes[i].StartOfBlockComment) + continue; + Newlines += Changes[i].NewlinesBefore; +- if (Changes[i].Tok->MustBreakAlignBefore) +- BreakBeforeNext = true; + if (!Changes[i].IsTrailingComment) + continue; + +diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp +index 17d302f0b65..7e4d1fca509 100644 +--- a/clang/unittests/Format/FormatTest.cpp ++++ b/clang/unittests/Format/FormatTest.cpp +@@ -11968,29 +11968,6 @@ TEST_F(FormatTest, AlignConsecutiveAssignments) { + verifyFormat("int oneTwoThree = 123; // comment\n" + "int oneTwo = 12; // comment", + Alignment); +- +- // Bug 25167 +- verifyFormat("#if A\n" +- "#else\n" +- "int aaaaaaaa = 12;\n" +- "#endif\n" +- "#if B\n" +- "#else\n" +- "int a = 12;\n" +- "#endif\n", +- Alignment); +- verifyFormat("enum foo {\n" +- "#if A\n" +- "#else\n" +- " aaaaaaaa = 12;\n" +- "#endif\n" +- "#if B\n" +- "#else\n" +- " a = 12;\n" +- "#endif\n" +- "};\n", +- Alignment); +- + EXPECT_EQ("int a = 5;\n" + "\n" + "int oneTwoThree = 123;", +diff --git a/clang/unittests/Format/FormatTestComments.cpp b/clang/unittests/Format/FormatTestComments.cpp +index 47509f29744..d5b9f8e0885 100644 +--- a/clang/unittests/Format/FormatTestComments.cpp ++++ b/clang/unittests/Format/FormatTestComments.cpp +@@ -2780,27 +2780,6 @@ TEST_F(FormatTestComments, AlignTrailingComments) { + " // line 2 about b\n" + " long b;", + getLLVMStyleWithColumns(80))); +- +- // Checks an edge case in preprocessor handling. +- // These comments should *not* be aligned +- EXPECT_EQ( +- "#if FOO\n" +- "#else\n" +- "long a; // Line about a\n" +- "#endif\n" +- "#if BAR\n" +- "#else\n" +- "long b_long_name; // Line about b\n" +- "#endif\n", +- format("#if FOO\n" +- "#else\n" +- "long a; // Line about a\n" // Previous (bad) behavior +- "#endif\n" +- "#if BAR\n" +- "#else\n" +- "long b_long_name; // Line about b\n" +- "#endif\n", +- getLLVMStyleWithColumns(80))); + } + + TEST_F(FormatTestComments, AlignsBlockCommentDecorations) { +-- +2.28.0 + diff --git a/debian/patches/series b/debian/patches/series index 92cf2f16..cc2a92d2 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -137,4 +137,4 @@ disable-fuzzer-compiler-rt-x86.diff python3-shebang.patch print-lldb-path.patch libcxx-armhf-ftbfs.diff -fix-clang-format-bug-47589.diff +fix-clang-format-bug-47589.patch