<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">