[PATCH] D137052: [clang-format] Don't skip #else/#elif of #if 0
Owen Pan via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 31 19:36:56 PDT 2022
owenpan updated this revision to Diff 472204.
owenpan added a comment.
Tweaked the fix and added a test.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D137052/new/
https://reviews.llvm.org/D137052
Files:
clang/lib/Format/UnwrappedLineParser.cpp
clang/unittests/Format/FormatTest.cpp
Index: clang/unittests/Format/FormatTest.cpp
===================================================================
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -6119,7 +6119,7 @@
"#endif");
// Verify that indentation is correct when there is an `#if 0` with an
- // `#else`.
+ // `#else`/`#elif`.
verifyFormat("#if 0\n"
"{\n"
"#else\n"
@@ -6127,6 +6127,40 @@
"#endif\n"
" x;\n"
"}");
+ verifyFormat("#if 0\n"
+ "{\n"
+ "#elif FOO\n"
+ "{\n"
+ "#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) {
Index: clang/lib/Format/UnwrappedLineParser.cpp
===================================================================
--- clang/lib/Format/UnwrappedLineParser.cpp
+++ clang/lib/Format/UnwrappedLineParser.cpp
@@ -1144,12 +1144,10 @@
++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);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D137052.472204.patch
Type: text/x-patch
Size: 2532 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221101/763ae765/attachment.bin>
More information about the cfe-commits
mailing list