<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/136369>136369</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-format] AlignAfterOpenBracket and Cpp11BracedListStyle option combination leads to inconsistent formatting
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-format
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mrizaln
</td>
</tr>
</table>
<pre>
Given a C++ file with following content
```cpp
struct S {
int a;
int b;
};
int aaa(S s);
int bbbb(S s);
namespace f {
int a(S s);
int bb(S s);
} // namespace f
int main() {
auto a = S{ 1, 2 };
aaa({ 1, 2 });
bbbb({ 1, 2 });
f::a({ 1, 2 });
f::bb({ 1, 2 });
aaa({
1,
2,
});
auto i = aaa({
.a = 1,
.b = 2,
});
bbbb({
1,
2,
});
auto j = bbbb({
.a = 1,
.b = 2,
});
f::a({
1,
2,
});
auto k = f::a({
.a = 1,
.b = 2,
});
f::bb({
1,
2,
});
auto l = f::bb({
.a = 1,
.b = 2,
});
}
```
when it is formatted using clang-format (20.1.2) with the following config file,
```yml
AlignAfterOpenBracket: BlockIndent
Cpp11BracedListStyle: false
```
the result of the formatting is inconsistent:
```cpp
struct S {
int a;
int b;
};
int aaa(S s);
int bbbb(S s);
namespace f {
int a(S s);
int bb(S s);
} // namespace f
int main() {
auto a = S{ 1, 2 };
aaa({ 1, 2 });
bbbb({ 1, 2 });
f::a({ 1, 2 });
f::bb({ 1, 2 });
aaa({
1,
2,
});
auto i =
aaa({
.a = 1,
.b = 2,
});
bbbb(
{
1,
2,
}
);
auto j = bbbb(
{
.a = 1,
.b = 2,
}
);
f::a(
{
1,
2,
}
);
auto k = f::a(
{
.a = 1,
.b = 2,
}
);
f::bb(
{
1,
2,
}
);
auto l = f::bb(
{
.a = 1,
.b = 2,
}
);
}
```
The bug only happen specifically when setting `AlignAfterOpenBracket` to `BlockIndent` and `Cpp11BracedListStyle` to false, also happen when setting `AlignAfterOpenBracket` to `AlwaysBreak` and `Cpp11BracedListStyle` to false, though the result is different:
```cpp
struct S {
int a;
int b;
};
int aa(S s);
int bbbb(S s);
namespace f {
int a(S s);
int bb(S s);
} // namespace f
int main() {
auto a = S{ 1, 2 };
aa({ 1, 2 });
bbbb({ 1, 2 });
f::a({ 1, 2 });
f::bb({ 1, 2 });
aa({
1,
2,
});
auto i =
aa({
.a = 1,
.b = 2,
});
bbbb(
{
1,
2,
});
auto j = bbbb(
{
.a = 1,
.b = 2,
});
f::a(
{
1,
2,
});
auto k = f::a(
{
.a = 1,
.b = 2,
});
f::bb(
{
1,
2,
});
auto l = f::bb(
{
.a = 1,
.b = 2,
});
}
```
The expected result should be the same as the input.
Tested on clang-format 20.1.2 (Fedora 20.1.2-3.fc42)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsmF9vszYUxj-NuTkqMiZAcsEFaZRp0qRddF_AgAG_NTbCpl326Scb2oYG3v6NtklDkQK2z3OeY8U_jkK15rVkLEXRHkUHjw6mUX3a9vwvKqSXq_KU_sIfmAQKt4jsEdlDxQWDR24aqJQQ6pHLGgolDZMG4cx-Yjx-iq5DONOmHwoDd4CSPcIZAJcGKApfHvLxASWH6QZnbg2liGzvQCOyGyfc4jzPXw0jnEnaMt3RgkE15RmzLMW_jk4OgMgRkSOcqbzYaCmXiGwR2T1XQAejgAIKD3CHkj0EiNwCgecCYPL-au4pIzwVsTpfoTBDYfZTjWnNz4TmVuyTXeRG7UWeHi5jbIHcFTgLd5c_Vj6T8nM39qR4IfhS8HPIR6z8cOoLIu_wcik5391PGbp3KVaEvmJqdZveMCTODX1mm2ayyeH8HI-JHhsmgRvgGirVt9QYVsKg3fEXVNY34yggsiXYD3xiT4zjhGnYnBUVrx1GxtTnqU6tQDjLBK9lVhnW_94xue9pcc8MCjPYC1Xc_yrLkTW3XRcEdpaVv3Ft7sxJMLuqokKzywKsjZ7pQRhQ1WTK1WFdcQ1cFkpqrh3Jwux_mL0PZv8Yyz5yPBzLnoMuZdYOydLRtdcq4F4WzMUvVC_k7Bl8i3xr6u-0PqWBdRx-yf5cd4WTXyxhfbtmv6FvrGOVr1epZIm8fzQM8qEGJcUJGtp1TILuWMErXlAhTuDQrNlIMhTjZX7GGIyy0-cUjTFQWdrRRZqOMSNQyS1QodWTgw8mzcQjPel9z-j9B5OaRg31-BaZ8M01lLyqWH8dUv-HQf3vaTrf01y9j9WfR_UVKH1lQi_necXP73D9Jpi_w_DilnzG7RXp-yZ52Z8dK2yvO8FHN2oQJeTMEUnTlgHV7p7LbjC-DWPaBig574zHttg2yEdWqp5OAzehXxUb2y57ZRqWu3BHPZYGySbCAQ6j0GtSTBgNdjSotpsSb3ZBlOAkTLblpqLbvIyxx1OCSYQ3wZYEOIpCv4gTXG62cVzFFd0lFdpg1lIufCEeWl_1tce1HlgahHEY7zxBcya0-xuAkHPTiBAUHbw-tXE3-VBrtMGCa6NflAw3wv2FMAuMDrD4SnDoX-I-qM5wu2eqzbmk7l4wWmr7Njhvzs_6dm_oRdoY02n723A8rblphtwvVIvI0Xqcvm66Xv1ghUHk6ErXiByn6h9S8ncAAAD__yygMZE">