Author: Owen Pan Date: 2022-11-02T13:32:08-07:00 New Revision: 117d792f35e6f84f2f29183408284c7e1cc838e7
URL: https://github.com/llvm/llvm-project/commit/117d792f35e6f84f2f29183408284c7e1cc838e7 DIFF: https://github.com/llvm/llvm-project/commit/117d792f35e6f84f2f29183408284c7e1cc838e7.diff LOG: [clang-format] Don't skip #else/#elif of #if 0 Fixes #58188. Differential Revision: https://reviews.llvm.org/D137052 Added: Modified: clang/lib/Format/UnwrappedLineParser.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index 0372b89397db..77140831c2c0 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -1144,12 +1144,10 @@ void UnwrappedLineParser::conditionalCompilationStart(bool Unreachable) { ++PPBranchLevel; assert(PPBranchLevel >= 0 && PPBranchLevel <= (int)PPLevelBranchIndex.size()); if (PPBranchLevel == (int)PPLevelBranchIndex.size()) { - // If the first branch is unreachable, set the BranchIndex to 1. This way - // the next branch will be parsed if there is one. - PPLevelBranchIndex.push_back(Unreachable ? 1 : 0); + PPLevelBranchIndex.push_back(0); PPLevelBranchCount.push_back(0); } - PPChainBranchIndex.push(0); + PPChainBranchIndex.push(Unreachable ? -1 : 0); bool Skip = PPLevelBranchIndex[PPBranchLevel] > 0; conditionalCompilationCondition(Unreachable || Skip); } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 18e79125d389..82e91b322271 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -6127,6 +6127,33 @@ TEST_F(FormatTest, LayoutStatementsAroundPreprocessorDirectives) { "#endif\n" " x;\n" "}"); + + verifyFormat("#if 0\n" + "#endif\n" + "#if X\n" + "int something_fairly_long; // Align here please\n" + "#endif // Should be aligned"); + + verifyFormat("#if 0\n" + "#endif\n" + "#if X\n" + "#else // Align\n" + ";\n" + "#endif // Align"); + + verifyFormat("void SomeFunction(int param1,\n" + " template <\n" + "#ifdef A\n" + "#if 0\n" + "#endif\n" + " MyType<Some>>\n" + "#else\n" + " Type1, Type2>\n" + "#endif\n" + " param2,\n" + " param3) {\n" + " f();\n" + "}"); } TEST_F(FormatTest, GraciouslyHandleIncorrectPreprocessorConditions) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits