<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/122087>122087</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-format] Mismatch in output from clang-format 18.1.3 and 18.1.4+ (including 19.x)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-format
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
KSAdk
</td>
</tr>
</table>
<pre>
Save the following content in a file named `foo.h`:
```cpp
namespace services {
struct HttpServer {
virtual ~HttpServer(){};
};
} // namespace services
```
Running clang-format 18.1.4 yields the following result:
```console
$ "/c/Program Files/LLVM-18-1-4/bin/clang-format.exe" --dry-run foo.h
foo.h:4:24: warning: code should be clang-formatted [-Wclang-format-violations]
virtual ~HttpServer(){};
^
```
Adapting `foo.h` to 18-1-4 yields the following problem when running clang-format 18.1.3:
```console
$ "/c/Program Files/LLVM-18-1-4/bin/clang-format.exe" -i foo.h
$ "/c/Program Files/LLVM-18-1-3/bin/clang-format.exe" --dry-run foo.h
foo.h:4:24: warning: code should be clang-formatted [-Wclang-format-violations]
virtual ~HttpServer() {};
^
```
A similar problem occurs with the following code snippet
```cpp
#define RPC_VOID_ENTRY(NAME) \
{ \
"Get" #NAME, \
std::bind( \
&call_void_rpc<ep::NAME>, \
std::function<grpc::Status(ep::EndpointDevice::Stub *)>( \
std::bind(&ep::EndpointDevice::StubInterface::Get##NAME, \
std::placeholders::_1, std::placeholders::_2)), \
std::placeholders::_1) \
}
```
In 18.1.4 the above will look like this:
```cpp
#define RPC_VOID_ENTRY(NAME) \
{"Get" #NAME, \
std::bind(&call_void_rpc<ep::NAME>, \
std::function<grpc::Status(ep::EndpointDevice::Stub *)>( \
std::bind(&ep::EndpointDevice::StubInterface::Get##NAME, \
std::placeholders::_1, std::placeholders::_2)), \
std::placeholders::_1)}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUVk1v4zYQ_TXjy0CGREq2fNBBjuM26Ga7SIotegoocWyxoUmBpJzNpb-9oJwPJ_F-FdiiFQSbGA4fZ948DSm8V1tDVEGxhGI1EUPorKt-ua7l7aSx8r66FnvC0BFurNb2TpktttYEMgGVQYEbpQmN2JFEmKUba6cdzFLgNaTjO0sPb9v3kNbR0feiJfTk9qoljzBfQlr74IY24M8h9Nfk9uQe7JDWiHvlwiA0_vU8DawEtog-8xXw0fNpMI4R2BrYGt_ueBzVwf1qMGZMTAuzTTbW7UTArJxm0xzvFWnpXzHgyA86nEjSGm81RRPLERgDtm6BrT84u3Vih2ulyQNbv3v38TLJyiRLcmDrRpnod7T5lD4RMIZJIt194gaDB2LT-vDP6xx4zeIP3gkXg4_D1kpC39lBS2zoRToh1qdYJr8fG5O9sloEZY2HYhWp_iam8fQDxflbamsp-hApOxIHBouH5E-z2zvbaNrhXUcG3Wdrw_8F_tUT8d-Byf8nNcV_XFT0aqe0cE-lsm07OI93KnRvmkWM36i-p3CyJQDjkjbKEF59OLv5-OvF6ub8_W9XfwAr39eX5zHO73-gOIs5wXz5OIxGxn6iEGsAjB-wz46m4-ODjKridaOMBFa-mj6gzFqh9c3eKnnj-hb4GfWHRSMmP4Z9wtsMpo1FAX62HRdF43UQYfDAykeAcyN7q0xYUexUj05Dg8Dq-BFG7PJtmq-jBjb7GuKFCeQ24tE08sKPaDmN32vRUme1JOcPlpssen_JgcXA4_ua6xd8n0ZePC2JOn2jwwvz2KWj5kRj94R3SmvU1t6iVrfx5FL-c4fRNyjvefvll9VzogT_FZX8YJH8cI18VSSvtDGRFZcLvhATqrI5n3GelWU-6aqNbIhmTcsELYhnMy4KPi9YS2VWiFbwiapYyoo0S8ssZXmeTxdy0TBR5huxmKXzgiBPaSeUnmq9302t206U9wNVGWNpOZ9o0ZD2412KseOmHE-NYjVxVVyXNMPWQ55q5YN_Rgoq6PEe9mJhscJL5XcitF28b9kh9EPAjbO7UyciCiMfPglgSwRWKtPqQcZGnC2mn4AtJoPTVRdCPzI43pG2KnRDM23tDtg6xvPwl_TO_kltALYe04yn3EOm-4r9HQAA__9pBO7f">