Issue 176205
Summary Non-Idempotency on 21.1.8 with Default Configuration
Labels new issue
Assignees
Reporter joh06937
    I can run `clang-format` on Windows, version 21.1.8, using the default configuration and have changes appear on the second run of a simple test file `test.cpp`:
```cpp
void Function() {
  LongType variable = longParameterParameter12 || /* Big long comment that will invoke line wrapping */
                      parameter3 ||
 parameter4;
}
```
`$ clang-format -i test.cpp`
`test.cpp` now contains:
```cpp
void Function() {
  LongType variable = longParameterParameter12 || /* Big long comment that will
 invoke line wrapping */
 parameter3 ||
                      parameter4;
}
```
If I run it again, it will then combine the two parameters below the now-wrapped comment:
`$ clang-format -i test.cpp`
`test.cpp` now contains:
```cpp
void Function() {
  LongType variable = longParameterParameter12 || /* Big long comment that will
 invoke line wrapping */
 parameter3 || parameter4;
}
```
Note that the issue goes away if the comment is changed from the `/* */` style to `//`, even with the line wrapping handling performed. Additionally, if I make the name of the parameter in front of the comment short enough that it can be combined on a single line with the parameter above it (thus not invoking the line wrapping handling on the comment), the issue goes away. So it might be something in the handling for that style of comment specifically?

Here is a dump of the config for this setup:
```
$ clang-format -i test.cpp --dump-config
---
Language:        Cpp
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignArrayOfStructures: None
AlignConsecutiveAssignments:
  Enabled:         false
 AcrossEmptyLines: false
  AcrossComments:  false
  AlignCompound:   false
 AlignFunctionDeclarations: false
  AlignFunctionPointers: false
 PadOperators:    true
AlignConsecutiveBitFields:
  Enabled:         false
 AcrossEmptyLines: false
  AcrossComments:  false
  AlignCompound: false
  AlignFunctionDeclarations: false
  AlignFunctionPointers: false
 PadOperators:    false
AlignConsecutiveDeclarations:
  Enabled: false
  AcrossEmptyLines: false
  AcrossComments:  false
  AlignCompound: false
  AlignFunctionDeclarations: true
  AlignFunctionPointers: false
 PadOperators:    false
AlignConsecutiveMacros:
  Enabled:         false
 AcrossEmptyLines: false
  AcrossComments:  false
  AlignCompound:   false
 AlignFunctionDeclarations: false
  AlignFunctionPointers: false
 PadOperators:    false
AlignConsecutiveShortCaseStatements:
  Enabled: false
  AcrossEmptyLines: false
  AcrossComments:  false
 AlignCaseArrows: false
  AlignCaseColons: false
AlignConsecutiveTableGenBreakingDAGArgColons:
  Enabled: false
  AcrossEmptyLines: false
  AcrossComments:  false
  AlignCompound: false
  AlignFunctionDeclarations: false
  AlignFunctionPointers: false
 PadOperators:    false
AlignConsecutiveTableGenCondOperatorColons:
 Enabled:         false
  AcrossEmptyLines: false
  AcrossComments:  false
 AlignCompound:   false
  AlignFunctionDeclarations: false
 AlignFunctionPointers: false
  PadOperators: false
AlignConsecutiveTableGenDefinitionColons:
  Enabled:         false
 AcrossEmptyLines: false
  AcrossComments:  false
  AlignCompound:   false
 AlignFunctionDeclarations: false
  AlignFunctionPointers: false
 PadOperators:    false
AlignEscapedNewlines: Right
AlignOperands: Align
AlignTrailingComments:
  Kind:            Always
  OverEmptyLines: 0
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowBreakBeforeNoexceptSpecifier: Never
AllowShortBlocksOnASingleLine: Never
AllowShortCaseExpressionOnASingleLine: true
AllowShortCaseLabelsOnASingleLine: false
AllowShortCompoundRequirementOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: false
AllowShortNamespacesOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AttributeMacros:
  - __capability
BinPackArguments: true
BinPackLongBracedList: true
BinPackParameters: BinPack
BitFieldColonSpacing: Both
BracedInitializerIndentWidth: -1
BraceWrapping:
  AfterCaseLabel: false
  AfterClass:      false
  AfterControlStatement: Never
  AfterEnum: false
  AfterExternBlock: false
  AfterFunction:   false
 AfterNamespace:  false
  AfterObjCDeclaration: false
  AfterStruct: false
  AfterUnion:      false
  BeforeCatch:     false
  BeforeElse: false
  BeforeLambdaBody: false
  BeforeWhile:     false
  IndentBraces: false
  SplitEmptyFunction: true
  SplitEmptyRecord: true
 SplitEmptyNamespace: true
BreakAdjacentStringLiterals: true
BreakAfterAttributes: Leave
BreakAfterJavaFieldAnnotations: false
BreakAfterReturnType: None
BreakArrays: true
BreakBeforeBinaryOperators: None
BreakBeforeConceptDeclarations: Always
BreakBeforeBraces: Attach
BreakBeforeInlineASMColon: OnlyMultiline
BreakBeforeTemplateCloser: false
BreakBeforeTernaryOperators: true
BreakBinaryOperations: Never
BreakConstructorInitializers: BeforeColon
BreakFunctionDefinitionParameters: false
BreakInheritanceList: BeforeColon
BreakStringLiterals: true
BreakTemplateDeclarations: MultiLine
ColumnLimit:     80
CommentPragmas:  '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
EnumTrailingComma: Leave
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
  - foreach
  - Q_FOREACH
  - BOOST_FOREACH
IfMacros:
  - KJ_IF_MAYBE
IncludeBlocks: Preserve
IncludeCategories:
  - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
    Priority:        2
    SortPriority: 0
    CaseSensitive:   false
  - Regex: '^(<|"(gtest|gmock|isl|json)/)'
    Priority:        3
    SortPriority: 0
    CaseSensitive:   false
  - Regex:           '.*'
    Priority: 1
    SortPriority:    0
    CaseSensitive:   false
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentAccessModifiers: false
IndentCaseBlocks: false
IndentCaseLabels: false
IndentExportBlock: true
IndentExternBlock: AfterExternBlock
IndentGotoLabels: true
IndentPPDirectives: None
IndentRequiresClause: true
IndentWidth: 2
IndentWrappedFunctionNames: false
InsertBraces: false
InsertNewlineAtEOF: false
InsertTrailingCommas: None
IntegerLiteralSeparator:
  Binary:          0
  BinaryMinDigits: 0
 Decimal:         0
  DecimalMinDigits: 0
  Hex:             0
 HexMinDigits:    0
_javascript_Quotes: Leave
_javascript_WrapImports: true
KeepEmptyLines:
  AtEndOfFile:     false
  AtStartOfBlock:  true
 AtStartOfFile:   true
KeepFormFeed:    false
LambdaBodyIndentation: Signature
LineEnding:      DeriveLF
MacroBlockBegin: ''
MacroBlockEnd: ''
MainIncludeChar: Quote
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
OneLineFormatOffRegex: ''
PackConstructorInitializers: BinPack
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakBeforeMemberAccess: 150
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakOpenParenthesis: 0
PenaltyBreakScopeResolution: 500
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyIndentedWhitespace: 0
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
PPIndentWidth: -1
QualifierAlignment: Leave
ReferenceAlignment: Pointer
ReflowComments: Always
RemoveBracesLLVM: false
RemoveEmptyLinesInUnwrappedLines: false
RemoveParentheses: Leave
RemoveSemicolon: false
RequiresClausePosition: OwnLine
RequiresExpressionIndentation: OuterScope
SeparateDefinitionBlocks: Leave
ShortNamespaceLines: 1
SkipMacroDefinitionBody: false
SortIncludes:
  Enabled:         true
 IgnoreCase:      false
SortJavaStaticImport: Before
SortUsingDeclarations: LexicographicNumeric
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterOperatorKeyword: false
SpaceAfterTemplateKeyword: true
SpaceAroundPointerQualifiers: Default
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeJsonColon: false
SpaceBeforeParens: ControlStatements
SpaceBeforeParensOptions:
  AfterControlStatements: true
  AfterForeachMacros: true
  AfterFunctionDefinitionName: false
 AfterFunctionDeclarationName: false
  AfterIfMacros:   true
  AfterNot: false
  AfterOverloadedOperator: false
  AfterPlacementOperator: true
 AfterRequiresInClause: false
  AfterRequiresInExpression: false
 BeforeNonEmptyParentheses: false
SpaceBeforeRangeBasedForLoopColon: true
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: Never
SpacesInContainerLiterals: true
SpacesInLineCommentPrefix:
 Minimum:         1
  Maximum:         -1
SpacesInParens: Never
SpacesInParensOptions:
  ExceptDoubleParentheses: false
 InCStyleCasts:   false
  InConditionalStatements: false
 InEmptyParentheses: false
  Other:           false
SpacesInSquareBrackets: false
Standard:        Latest
StatementAttributeLikeMacros:
  - Q_EMIT
StatementMacros:
  - Q_UNUSED
  - QT_REQUIRE_VERSION
TableGenBreakInsideDAGArg: DontBreak
TabWidth: 8
UseTab:          Never
VerilogBreakBetweenInstancePorts: true
WhitespaceSensitiveMacros:
  - BOOST_PP_STRINGIZE
  - CF_SWIFT_NAME
 - NS_SWIFT_NAME
  - PP_STRINGIZE
  - STRINGIZE
WrapNamespaceBodyWithEmptyLines: Leave
...
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to