- Notifications
You must be signed in to change notification settings - Fork 15.3k
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.cppMetadata
Metadata
Assignees
Labels
Type
Projects
Status
Done