<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/138100>138100</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang] `clang diagnostic` breaks `_Pragma`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Eisenwave
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/bsjasnK8T
```cpp
#define DO_PRAGMA_(...) _Pragma(#__VA_ARGS__)
#define DO_PRAGMA(...) DO_PRAGMA_(__VA_ARGS__)

#define DIAGNOSTIC_IGNORED(...) DO_PRAGMA(clang diagnostic ignored __VA_ARGS__)

DIAGNOSTIC_IGNORED(-Wdeprecated)
```
This doesn't work and produces the error:
```
clang++: warning: argument unused during compilation: '-S' [-Wunused-command-line-argument]
<source>:6:1: error: expected string literal in pragma diagnostic
    6 | DIAGNOSTIC_IGNORED(-Wdeprecated)
      | ^
<source>:4:33: note: expanded from macro 'DIAGNOSTIC_IGNORED'
    4 | #define DIAGNOSTIC_IGNORED(...) DO_PRAGMA(clang diagnostic ignored __VA_ARGS__)
      | ^
<source>:2:24: note: expanded from macro 'DO_PRAGMA'
    2 | #define DO_PRAGMA(...) DO_PRAGMA_(__VA_ARGS__)
      | ^
<source>:1:25: note: expanded from macro 'DO_PRAGMA_'
    1 | #define DO_PRAGMA_(...) _Pragma(#__VA_ARGS__)
      | ^
<scratch space>:5:27: note: expanded from here
    5 |  clang diagnostic ignored -Wdeprecated
      |
```
If we instead write
```cpp
#define DIAGNOSTIC_IGNORED(...) DO_PRAGMA(lmao __VA_ARGS__)
```
The code is preprocessed as expected, and the `-E` output is:
```cpp
#pragma lmao -Wdeprecated
```
Such uses of `_Pragma` ough to be valid.

The error is specific to `clang diagnostic` inside `_Pragma`. If we write `clang dogs` instead, it works.

GCC accepts this code (with `GCC diagnostic` of course).
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0lV9vozgXxj-Nc3MURAwkcMEFzT9Vr97pqK12LpGxT8AzYCPbNLv76VcmZNqk6U7nYiOiBMnnOT-f4_OYWStrhZiT5I4kmxkbXKNNvpUW1ZG94KzS4q-8ca63JCoI3RG6q7WodOsCbWpCd38Tuqvsd2bV_9JnEhZkGZ4e3vf-lUYCD1IhbB7Kr4_F_v9FSWgaBAGhGZRfDas7RmhKaFSWfxRl8bh_KktCs9uxr6EXcu9DL6Lvi_2Xh6fn-3V5v__y8Ljd3JAhNOUtUzUIyWqlrZMcZK20QQG35G-Kzr8J7A1y5lBMK8_lIGHx3EgLQqNVhK4cHLX5AUwJ6I0WA0cLrkFAY7Txtb6MHdkIvfNPVMCRGSVV7f8yUw8dKgeDGiwKEIORqgauu162zEmt_CpCV_MnQldAkrv5t9PSOdddx5SYt1Lh_KxDko3PHa2tHgxHEm1JVCxJVCy8zhkP8M8euUMB1o35WunQsBakgn5s6ptCkrAAAFgCWa1vd-N94WD8-ACSbN8DxSQqosiDKO1wAmJKoICD0R10jBvtd30r3WrSj0_6_-FB-cUuqP_Gn9nFa_YzPL2G_90Z-QWbbzdNfoetfIVbfAT36eG_RccNc7wB27MzpOejq48hGzQ4iSWjGHzYu4sj-Cb_1SDeH-CIIJV1yAQcjXT4r673ySPVdkzf8JkL90DgWiBIC73B3miO1g88sz-HkdD16CjeSMgynG_JMgQ9uH5wIO2Vq_xEneZ1RLiqwluAp4E3MFi0oA9e_dy_MUXdgNNQIbywVorg5JHPZz_zzLZHLg-S-3U--1UfvIxUVgq81A7gVPGx0m8CdW2nEN8Iv3F5slQ7Jd-v18A4x955Y5X2VDxC06N0jRfyCy7z6wNwPRiLhGbBTOSRyKKMzTBfrOJlmGbZKp41eZyKJKqSOMUqZlVaVRFLssUyZYvogAfOZjKnIU3CJFyEaZJFUVBVaRUvKaWHLOUrzkgcYsdkG7TtS-fv0Zm0dsB8EaWLMJy1rMLWjlcypZPxU387m9wHzKuhtiQOW2mdfZVw0rXjPX6KSDYfVbkyyH7YyyrPBtNeX_PSNUMVcN0RuvNZpp95b_R35I7Q3UhtCd1N4C85_ScAAP__LpV3gw">