<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55360>55360</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-format] Bad interaction between AlignConsecutiveAssignments.Enabled=true and BinPackArguments=false
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
cha5on
</td>
</tr>
</table>
<pre>
### Description
`AlignConsecutiveAssignments` doesn't align properly if `BinPackArguments = false`.
First noticed with clang-format 14.0.0, but present in current main branch.
Proposed fix is at https://reviews.llvm.org/D125162 .
### Example 1
`.clang-format` for this example:
```
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignConsecutiveAssignments: Consecutive
BinPackArguments: false
BinPackParameters: false
```
Expected:
```
struct A {
int a;
int b;
int c;
};
struct B {
A a1;
A a2;
A a3;
};
int a_long_name = 1;
int an_even_longer_name_for_wrap = 1;
auto b = B{{a_long_name, a_long_name, a_long_name},
{an_even_longer_name_for_wrapping,
an_even_longer_name_for_wrapping,
an_even_longer_name_for_wrapping}};
```
Actual:
```
struct A {
int a;
int b;
int c;
};
struct B {
A a1;
A a2;
A a3;
};
int a_long_name = 1;
int an_even_longer_name_for_wrap = 1;
auto b = B{{a_long_name, a_long_name, a_long_name},
{an_even_longer_name_for_wrapping,
an_even_longer_name_for_wrapping,
an_even_longer_name_for_wrapping}};
```
### Example 2
A slightly smaller case with a reduced column limit.
`.clang-format` for this example:
```
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignConsecutiveAssignments: Consecutive
BinPackArguments: false
BinPackParameters: false
ColumnLimit: 50
```
Expected:
```
struct A {
int a;
int b;
};
struct B {
A a1;
A a2;
};
int a_longer_name_for_wrap = 1;
// comment to prevent alignment
int a_long_name = 1;
auto b = B({a_long_name, a_long_name},
{a_longer_name_for_wrap,
a_longer_name_for_wrap});
```
Actual:
```
struct A {
int a;
int b;
};
struct B {
A a1;
A a2;
};
int a_longer_name_for_wrap = 1;
// comment to prevent alignment
int a_long_name = 1;
auto b = B({a_long_name, a_long_name},
{a_longer_name_for_wrap,
a_longer_name_for_wrap});
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztF8tu2zjwa-TLwIIekR0ffPAjPaVogAX2apDUWOaWogSSspO_71ByHcl2tQu03T1sBMHmcN5PirzK35ZBknYvbNEKI2snKx1E2yBanX9n0UrJQm8qbVE0Th5xZS1tlKidJSzkFVodJHMHzBNCbaoajXoDuQfCr6V-YeLryhRNywJBuoU9UxYJGfZVfZLGOtCVkwJzOEl3AKGYLqb7ypTMQfwQRmEUJBvgjSM1aEkeSA2iMcYvS0YAN0yLw0DwC1lUWZK5l68gLZCsg3O1DdJVkHyi1-BR4smGSh3LsDIFbW3jJItnCQwEvUfr6ZWVtUKIr2IV9i320aEVuAMpxY7D6xyynN8WnE6n3eKZpDSs8ORwfjZ1fbEC1oz8-aL_cG-qo3l-_vNzh14JgdZ-rnK5l2i-7PcWnSeZJmf8SDqJrIfp6K8T6Im6_PXRL8ywEh2aa_yVh93v02uNwmH-Ho0hlXWmEQ5WEMzX3Q5QoqnCgnQA8ytYXOBgvr2sz9LWfWkrYHGPmcBkCKZ3RbVG7FSli50mf-Hm8dUdD8n1Do-oWyY0LduOqmJ3Mqy-ImeNq4DfCh1IX3sv5uueFb4lRkAyP9n0oz-ioKeKVIxYXktdXMT-I4Gjgfgd4sjvXubu1uFKuIap8Z78qMUfFMivrsX_RcXdHiHJoCDB0ng-ODo-bcmUQgOCRn13GjIwmDf-cBSVakoNSpbShVe1-3EEXeM3bbSefbC-O5NFIzm6PZ1-zVz4mTlwv_H_poe7rxuqltKHDaih6avp6Jftp5rfvD9KxkdB1_nJ43jn91r97vj4znztw3hT_oDHK1v8F7P-I6f_Uion-TLNF-mCTZx0CpdBth4MuozsZ7nPDhom_DUGOLoTooaRcRM-acaVb_UtJQ9pxOdwO2227TCZNEYthxeHgsZyw0NKBgH-9nD-m9Il6C-aIQRKaxu0tMiylLw4LBMUPBJ89shEFnHk6Uw84OOjmM_SOV9wMVGMo7LewSBJNJ6gFUFr8nEil0mUJFEWLeLFQ5zF4V7QPWW-5wvkJC_iwUOEdBFSl8vMxCxbk3hTWEIqad37TWfC2lhgG08vn-riUJmlOLCs0pNW87K1_BuviQOX">