Closed
Description
Running clang-format 18 twice produces different results when we have #define statements within an initializer. Running with clang-format 17.0.5 shows no difference on repeated invocations.
Given idempotent_define.cpp
int foo(MyType aFooSizeKind) {
static const AType0123456789 table{
#define FOO_SIZE_KIND_2_OP_ROW(row) {GET_SYM_SIZE_KIND(row), GET_OP(row)}
COMMA_LIST_OF(FOO_SIZE_KIND_2_OP_ROW, FOOBAR12_BINOP_SIZE_LIST),
COMMA_LIST_OF(FOO_SIZE_KIND_2_OP_ROW, FOOBAR12_UNARY_SIZE_LIST)};
return table.at(aFooSizeKind);
}
using _clang-format
:
---
BasedOnStyle: Google
IndentWidth: 4
ColumnLimit: 100
...
clang-format 18.1.1 yields the following differences on successive runs. Notice that define flips between being on a single line and multiple lines.
/path/to/llvm-18.1.1/bin/clang-format -style=file idempotent_define.cpp >out.18.1.1.a.cpp 2>&1
/path/to/llvm-18.1.1/bin/clang-format -style=file out.18.1.1.a.cpp >out.18.1.1.b.cpp 2>&1
/path/to/llvm-18.1.1/bin/clang-format -style=file out.18.1.1.b.cpp >out.18.1.1.c.cpp 2>&1
diff -u out.18.1.1.a.cpp out.18.1.1.b.cpp
--- out.18.1.1.a.cpp 2024-03-25 14:02:26.681362489 -0400
+++ out.18.1.1.b.cpp 2024-03-25 14:02:26.697362606 -0400
@@ -1,7 +1,6 @@
int foo(MyType aFooSizeKind) {
static const AType0123456789 table{
-#define FOO_SIZE_KIND_2_OP_ROW(row) \
- { GET_SYM_SIZE_KIND(row), GET_OP(row) }
+#define FOO_SIZE_KIND_2_OP_ROW(row) {GET_SYM_SIZE_KIND(row), GET_OP(row)}
COMMA_LIST_OF(FOO_SIZE_KIND_2_OP_ROW, FOOBAR12_BINOP_SIZE_LIST),
COMMA_LIST_OF(FOO_SIZE_KIND_2_OP_ROW, FOOBAR12_UNARY_SIZE_LIST)};
diff -u out.18.1.1.b.cpp out.18.1.1.c.cpp
--- out.18.1.1.b.cpp 2024-03-25 14:02:26.697362606 -0400
+++ out.18.1.1.c.cpp 2024-03-25 14:02:26.715362737 -0400
@@ -1,6 +1,7 @@
int foo(MyType aFooSizeKind) {
static const AType0123456789 table{
-#define FOO_SIZE_KIND_2_OP_ROW(row) {GET_SYM_SIZE_KIND(row), GET_OP(row)}
+#define FOO_SIZE_KIND_2_OP_ROW(row) \
+ { GET_SYM_SIZE_KIND(row), GET_OP(row) }
COMMA_LIST_OF(FOO_SIZE_KIND_2_OP_ROW, FOOBAR12_BINOP_SIZE_LIST),
COMMA_LIST_OF(FOO_SIZE_KIND_2_OP_ROW, FOOBAR12_UNARY_SIZE_LIST)};
diff -u out.18.1.1.a.cpp out.18.1.1.c.cpp
Metadata
Metadata
Assignees
Type
Projects
Status
Done