| Issue |
52929
|
| Summary |
clang-format is not idempotent - rerunning clang-format produces different answers
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
JohnC32
|
Rerunning clang-format 13 (and at least the last few prior versions) on already formatted code gives a different answer. Given
```c++
// <snip>
#define EML_CLONE_EXPRS(X) \
X(ASSIGN) \
X(VIRTUAL_ASSIGN) \
X(STRUCT_VALUE) \
X(ADD) X(MINUS) X(MUL) X(DIV) \
X(LT) X(LE) X(GT) X(GE) X(EQ) X(NE) \
X(CAND) X(COR) X(NOT) \
X(UMINUS) \
X(UPLUS) \
X(CALL) \
X(CHECK) \
X(VECTOR) \
X(MMUL) X(MDIV) X(MIDIV) X(MPOWER) \
X(IDIV) X(POWER) \
X(AND) X(OR) \
X(CTRANSPOSE) X(TRANSPOSE) \
X(VCAT) X(HCAT) \
X(VAR) X(CONST) X(DEREF) \
X(SUB) X(SUB_REF) \
X(FIELD) X(FIELD_REF) X(FIELDCOMP) \
X(EMPTY_MATRIX) \
X(ALL) X(ANY) \
X(END) X(SPAN) \
X(CELL_ARRAY) \
X(CELL_EMPTY) \
X(CELL_HCAT) \
X(CELL_VCAT) \
X(CELL_VAL) \
X(CELL_REF) \
X(CELL_TO_MATRIX) \
X(MATRIX) \
X(AT)
// <snip>
```
```bash
clang-format -i test.cpp > test1.cpp
clang-format -i test1.cpp > test2.cpp
clang-format -i test2.cpp > test3.cpp
.....
```
Then if you ```diff test1.cpp test2.cpp``` and ```diff test2.cpp test3.cpp``` you will see differences.
Here's the first clang-format result, test1.cpp:
```c++
// <snip>
#define EML_CLONE_EXPRS(X) \
X(ASSIGN) \
X(VIRTUAL_ASSIGN) \
X(STRUCT_VALUE) \
X(ADD) \
X(MINUS) X(MUL) X(DIV) X(LT) X(LE) X(GT) X(GE) X(EQ) X(NE) X(CAND) X(COR) \
X(NOT) X(UMINUS) X(UPLUS) X(CALL) X(CHECK) X(VECTOR) X(MMUL) X(MDIV) \
X(MIDIV) X(MPOWER) X(IDIV) X(POWER) X(AND) X(OR) X(CTRANSPOSE) \
X(TRANSPOSE) X(VCAT) X(HCAT) X(VAR) X(CONST) X(DEREF) X(SUB) \
X(SUB_REF) X(FIELD) X(FIELD_REF) X(FIELDCOMP) \
X(EMPTY_MATRIX) X(ALL) X(ANY) X(END) X(SPAN) \
X(CELL_ARRAY) X(CELL_EMPTY) X(CELL_HCAT) \
X(CELL_VCAT) X(CELL_VAL) X(CELL_REF) \
X(CELL_TO_MATRIX) X(MATRIX) X(AT)
// <snip>
```
Here's the second clang-format result, test2.cpp:
```c++
// <snip>
#define EML_CLONE_EXPRS(X) \
X(ASSIGN) \
X(VIRTUAL_ASSIGN) \
X(STRUCT_VALUE) \
X(ADD) \
X(MINUS) \
X(MUL) X(DIV) X(LT) X(LE) X(GT) X(GE) X(EQ) X(NE) X(CAND) X(COR) X(NOT) \
X(UMINUS) X(UPLUS) X(CALL) X(CHECK) X(VECTOR) X(MMUL) X(MDIV) X(MIDIV) \
X(MPOWER) X(IDIV) X(POWER) X(AND) X(OR) X(CTRANSPOSE) X(TRANSPOSE) \
X(VCAT) X(HCAT) X(VAR) X(CONST) X(DEREF) X(SUB) X(SUB_REF) \
X(FIELD) X(FIELD_REF) X(FIELDCOMP) X(EMPTY_MATRIX) X(ALL) \
X(ANY) X(END) X(SPAN) X(CELL_ARRAY) X(CELL_EMPTY) \
X(CELL_HCAT) X(CELL_VCAT) X(CELL_VAL) X(CELL_REF) \
X(CELL_TO_MATRIX) X(MATRIX) X(AT)
// <snip>
```
Here's the thrid clang-format result, test3.cpp:
```c++
// <snip>
#define EML_CLONE_EXPRS(X) \
X(ASSIGN) \
X(VIRTUAL_ASSIGN) \
X(STRUCT_VALUE) \
X(ADD) \
X(MINUS) \
X(MUL) \
X(DIV) X(LT) X(LE) X(GT) X(GE) X(EQ) X(NE) X(CAND) X(COR) X(NOT) X(UMINUS) \
X(UPLUS) X(CALL) X(CHECK) X(VECTOR) X(MMUL) X(MDIV) X(MIDIV) X(MPOWER) \
X(IDIV) X(POWER) X(AND) X(OR) X(CTRANSPOSE) X(TRANSPOSE) X(VCAT) \
X(HCAT) X(VAR) X(CONST) X(DEREF) X(SUB) X(SUB_REF) X(FIELD) \
X(FIELD_REF) X(FIELDCOMP) X(EMPTY_MATRIX) X(ALL) X(ANY) \
X(END) X(SPAN) X(CELL_ARRAY) X(CELL_EMPTY) \
X(CELL_HCAT) X(CELL_VCAT) X(CELL_VAL) X(CELL_REF) \
X(CELL_TO_MATRIX) X(MATRIX) X(AT)
// <snip>
```
Here the _clang-format file used:
```yaml
---
BasedOnStyle: Google
IndentWidth: 4
...
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs