<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/67852>67852</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-format: wrong format in switch with conditional compilation
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-format
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
MaJerle
</td>
</tr>
</table>
<pre>
clang-format: `17.0.1` but seen in `16` too.
Source code for test. Comments:
- With case `0`, Comment after opening curly bracket. There is no conditional compilation. Code is properly formatted
- With case `1`, we have comment after curly bracket, and local variable, which has been formatted to the same line as comment. Wrong, no?
- With case `2`, there is no comment, but there is a conditional compilation, and it again works fine
- With case `3`, things are even funnier. Everything has been put in one line up to conditional block.
It seems that a combination of comment, local variable and conditional compilation, breaks the formatting.
Is this expected behavior?
```c
#include "abc"
void
func(int par) {
switch (par) {
case 0: { /* my comment */
const char* abc;
/* ... */
printf("abc");
break;
}
case 1: { /* my comment */ const char* abc;
#if CONDITION
/* Code here */
#endif /* CONDITION */
/* ... */
printf("abc");
break;
}
case 2: {
const char* abc;
#if CONDITION
/* Code here */
#endif /* CONDITION */
/* ... */
printf("abc");
break;
}
case 3: { /* my comment */ const char* abc; get_abc_data(&abc);
#if CONDITION
/* Code here */
#endif /* CONDITION */
/* ... */
printf("abc");
break;
}
default: {
break;
}
}
}
```
clang-format fle:
```
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignArrayOfStructures: None
AlignConsecutiveMacros:
Enabled: true
AcrossEmptyLines: true
AcrossComments: true
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields:
Enabled: true
AcrossEmptyLines: true
AcrossComments: true
AlignConsecutiveDeclarations: None
AlignEscapedNewlines: Right
AlignOperands: Align
SortIncludes: true
InsertBraces: true # Control statements must have curly brackets
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortEnumsOnASingleLine: true
AllowShortBlocksOnASingleLine: Empty
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: All
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: AllDefinitions
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
AttributeMacros:
- __capability
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeConceptDeclarations: true
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 120
CommentPragmas: "^ IWYU pragma:"
QualifierAlignment: Leave
CompactNamespaces: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
ExperimentalAutoDetectBinPacking: false
PackConstructorInitializers: BinPack
BasedOnStyle: ""
ConstructorInitializerAllOnOneLineOrOnePerLine: false
AllowAllConstructorInitializersOnNextLine: true
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IfMacros:
- KJ_IF_MAYBE
IncludeBlocks: Preserve
IncludeCategories:
- Regex: "^<(.*)>"
Priority: 0
- Regex: '^"(.*)"'
Priority: 1
- Regex: "(.*)"
Priority: 2
IncludeIsMainRegex: "(Test)?$"
IncludeIsMainSourceRegex: ""
IndentAccessModifiers: false
IndentCaseLabels: true
IndentCaseBlocks: false
IndentGotoLabels: true
IndentPPDirectives: None
IndentExternBlock: AfterExternBlock
IndentRequires: true
IndentWidth: 4
IndentWrappedFunctionNames: false
InsertTrailingCommas: None
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
LambdaBodyIndentation: Signature
MacroBlockBegin: ""
MacroBlockEnd: ""
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakOpenParenthesis: 0
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PenaltyIndentedWhitespace: 0
PointerAlignment: Left
PPIndentWidth: -1
ReferenceAlignment: Pointer
ReflowComments: false
RemoveBracesLLVM: false
SeparateDefinitionBlocks: Always
ShortNamespaceLines: 1
SortJavaStaticImport: Before
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeParens: ControlStatements
SpaceBeforeParensOptions:
AfterControlStatements: true
AfterForeachMacros: true
AfterFunctionDefinitionName: false
AfterFunctionDeclarationName: false
AfterIfMacros: true
AfterOverloadedOperator: false
BeforeNonEmptyParentheses: false
SpaceAroundPointerQualifiers: Default
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: Never
SpacesInConditionalStatement: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInLineCommentPrefix:
Minimum: 1
Maximum: -1
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
BitFieldColonSpacing: Both
Standard: Latest
StatementAttributeLikeMacros:
- Q_EMIT
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 8
UseCRLF: false
UseTab: Never
WhitespaceSensitiveMacros:
- STRINGIZE
- PP_STRINGIZE
- BOOST_PP_STRINGIZE
- NS_SWIFT_NAME
- CF_SWIFT_NAME
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
---
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWutz4jgS_2ucLyooMBkyfMgH89pjlwADZFN7Xyhht23tCMkrySTcX38l-SU_yOxd7T2mdmcS9a9b_VKrW4ClJBEDeHa-TJ0v8wecqpiL5xf8MwgKD2ce3J59ilnUC7m4YOWMPOSMB8On_qA_dMYDdE4VkgAMEWYIY72oOO87g7kz8LK_DzwVPiCfB4BCLpACqfpoxi8XYEo6I88G99AbUTHysQQtceCMB447K9AIhwoE4gkwwiLkp4Le0Flg_zuoPjrGIAARiRhHPmcBUYQzTJHPLwmhWP-m9w0MJhE8Ac2emaYg6FRgmCvwDijGV22FrUhNAQ3DLECU-5iiKxYEnykY5pj4MYqxRGftrHJHpDhSMSCJL4AoYYCwLHboozfBWaTZGXdGy07t3Fw7VbPc8OtlHZ6ShO_5pNCbKIQjTBh65-K7RCFh0LnpqNyUsEgiLADBVZuVMkZA9NHiCuJmqJXNSap0knCWG5om2nhbozPl_vda4qxMcl0kUjFWRv_LmTCjM-KhbWjd5caaT4w9C8DfpfF8HgrCovrOmkokgo8EfB2oM8T4SrgoA5H_PR5k__n57-6IMJ-mASDHdfHZd1zXxl85ydMsTJnvuF8JUyjBwnEnyHmaZiSEEJLvRPkxctyvXVT9x0RjYE7k0xQ57tJxPXS5lQnquJ5erPEYPs6kQn6sxXpIqzia2ira2Fxqv9-_Ky4RhKnQcb9W9rqTUqSNNF5vUZyneb5gDBr-yKDP9HdHJESz7Wa-Oq62m1xsLsgce3MUbEscdwQsIGGJKpjrqP8Dx7i5Y_6lgP7vHfLXecFO-9G_lSUoAnXCZ_8UYIWNSmOj0uQHDmub-Rf47j-ZQS2nBRDilKq7KfQj35c_VT8Uhc82ym4VUEihutrr6F6vl_2wxixKcaSBaJYkpRvRFEsItuygbkYKQuv1ry8Z2fN9kPKFByQkILZhKMEY1ssLrUdJxDx9O28TYNP8ah55yBBsjBD4tg0PSqS-SgXoTgRteHHpGcyMMwl-qsgVXrAveNWtoAXTV02gmZRIoXCdp1FycUnUbU1YJrRNt5ofi9rc0jPtWQm8r9uUqCUBGvx31ZuDT7Ewt2qXfgvp4wSCDbzTYqc9iWJlQbYJCMyM2nZ4DlyoVXaNNlRYMQlC6aBWFKQTZsaZEpwiqbACozu6pFLlPZvdpUlr_6PAhBIW3bOX8nePUk9EqSFv2QY-lPZbN3CHBb6AAiG3oeWcT9kOMRdqwdKL3DLvQFhE4TPkVDdJbagJaBM7wxLW-Az0z4lepsw3sWyhPUqb4DW-nAP8p6Cr8FAGpYXfwBVESzjnSRsaYipLpd_xTU511TInfQ4hYabZ24NKBTveEmhmZJ2jjvMorUTIFscUQi7gJaVKZwsclNCN732djnBJKFatA_IbFLKVEuScqlZRQT10Ovk4wWdCSRHRKWE77H8v07AewJxa5V6DrM_Km8BJQlhkbWS8UGZIw5aCTLFsmplTsuNWBrYRypxfp3W35CLXuqkbfAGZYL8Z9py8Pf8-s1zbqWBW1bv5X9ndnRcfCgQzh6wJyJJghpUft3gz2kKvdJOy4zLlwa1b7FtMaJt3xQJgVrWrEQ8JJcqce9uZVi2vAHvwuWhdBRW95m87dcrcnxKGxc2Ua8VFUe2r-6nFMOPMh0Q1T0C38NJATynsxy3AisUgiMLMB12pccMXBmlh1kSayBeaUM5aIo8gWhY1lNM3nckiLla6MmBK_gFCFlLv6HGH674-Ju9-xldsbnCPMa4qfzWlZ6VnTRQITBtKzzhNL2xNLsRYP3QHxbq53HYCRxdseHQn-WWBVm-_vaLELOvCUEyq31JMTW9lrsjidK8BX8uNLgn2VZk1TU27XZAl8xsJlDk_jyVWEZYai-8gkmQ4NCkS6MCWLWFl-BwEuZprYsGCrMq1qDtOmGqYZKk8J1K3S8vylcuilc2SiVS9_WzUvRKahbqNXfOI-JhmBSZj-UhAEK0Spl6q-BwU-Cov6rkxljJ69bMUy_jyjGk00WaAcD-LkUfplm2Z8eVWbBnsQHRev1m_c0eRe_3OknyUOdPdcS25WGA_7rgVtTvL0qAXvp2W2_3Cm_2tWpput4djfXkVdsj65efTanl68X6bLoqu0vSaWW-lNdoJkCCuUCPPsIKICwJ1aXuI4KM6Vc5o5rhf-2ammzijRelxPVHtBOFC3-sjDw06RTxpETpOpQj9y1O3iOEdLWrMnZxuzbKVfMGENUQcQSpjwtJxH0tBNY7sYbfOV-L0Wa4fgGadyDBVl9ps9QtqFZcW809c8fvMu92cCPD1rNIYUDJ647ZvdQAWdA9_pES0x5GuipWv6p4LguJyNpnfskFPM_YQght66nvh4AuSqG8pV5kAqxJXZL3b6pJw0TxSvwAk1bjnqWMMB4WF2oaVWyt01adkRpQN1oFEDOspOcOZU2UETCEirBn9irxgQZv4USl05FpBK5nLCtFQoPKJbv-KpldwxX1OixtfF1ALpBVohMi1yFU3sAGpIDB400fXnaLBB62SSZCd-dxANRu5EpRJbGpWSdsBw1Tdsru_aqAq3WxAJmxJhFQzbA2YxmGTNj4vq5o8GgzadCNpDVLq_2tdgo3aJsB2WABTMUgirWplo7JexAgZdO3VMQVl4Bp08aFLxCzGAvuFYQPzpwar5rUtWym5fWfF_TKuA7N4Q_AWE1U1tQWmowtYQ5i3r7tdI1l6eU7uIQQBzIcaYy6shFD-bt9qVm7s4cKveZtrHrLq5AMk2j9QjaDV0cymyhynZ-PyfJTPN8Pq0cTUA31m_KwWVF1nhXmVhEX3-_Iq0WemcZhh2WyIKkjezmz4fUiRBb_A7b01hFgHpjoKd3pyC6svhayN7tg1P386fY2E5qgq72C3SeGN-gzcYm--mJl5NmtPymajA5HfA1WQdSQ_n46tKN0HWy2OvWs2KV9BUI4DCAqn3plPN5yZmlye-tZdlUVU8JQFeeKXc4KBzvMn5qZz95hFYDrRJRdrzpMycI3QrjINumZvm_4DDfPxrOthb2jDVsxjEc3bgqqBL4iz6sPD2htHazsDVZgw3Sh3TWUlrDxNP7JgZUpbObVBSD6spHwhjFyyZ5Wy_XvBH8Var2Hljzc7_JHibAY3j6N3T9SnuOIB2gRXM-U3w5SrvGc_KMwCnBWANVa6uSzWM_eWb2Jr8r3rXezbafGyOjaYOnGvm9fDYm6tHE_7xbfX1X5x-nWxP5Qf7BzxuSz1X7OlVwmz_XrZsO5VwhGfG6lSXTAHYJJ0fUSAeuhw3K82P63-vqiWdrtTc7WYXTpIqIc2h9PhbbU8njbei7U8W7aW7RpZH5vvx3VWn97uHc-Ol5gWsPxcp_y85yF4HgWT0QQ_wPNwPBkPXHfw6D7Ez8HXyTh8gtHj5AzuePA4-DLGj8PhEAbwNHYhfCDP7sAdDSbuxB0OHwduP3gajoZPo_Nw8vT4BT8-Oo8DuGBC-5ReL30uogciZQrP46evX9wHaoYC870W1619hUVPafMH8azZeuc0ks7jgBKpZCVIEUWh9cWXd8FZlH9hABFWfET_br4a0f1lg4dU0OdYqcQkhbt03GVEVJye-z6_OO5S75j_00sE_x185bhLY4d03KUx5Z8BAAD__weGQU8">