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

    <tr>
        <th>Summary</th>
        <td>
            Problems in token pasting
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    The token pasting code gets several tricky cases wrong.  Consider the following for c++23:

#define concat1 \ ## Udeadbeef
concat1
#define concat2 R ## "averylongdelimiter()averylongdelimiter"
concat2
#define concat3 __VA_ARGS_ ## _
concat3
#define concat4 L'b' ## ud_suffix
concat4
#define concat5 R ## "aわ()aわ"
concat5

concat1 is invalid because the UCN is not a valid codepoint.  Clang accepts it.
concat2 should diagnose the long raw literal delimiter.  Clang does not.
concat3 should complain about an invalid use of __VA_ARGS__.  Clang does not.
concat4 is a wide character literal with a user-defined suffix, clang rejects it saying a space is required.  I believe it is valid.
concat5 contains an invalid character in the raw string delimiter, clang accepts it.

I used clang -E --std=c++23
$ clang --version
Apple clang version 16.0.0 (clang-1600.0.26.6)
Target: arm64-apple-darwin24.3.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8VN2K4zgTfRrlpohRJNvpXPgi3Zl8NHwsy2zPsnehLJVtbSuSV5KT6bdf5M5PD4SFQHBVnaNTp0rCGE3viBpWPbNqt8ApDT407x_TNBo1oFu0Xn80bwNB8u_kYMSYjOtBeU3QU4oQ6UQBLaRg1PsHKIwU4Ry86wuAF--i0RQgDQSdt9afM7rzARQTz0w8C8nklvH5J6SmzjgC5Z3CtAJWvQATkgkJPzShbok6xreX9AOIgO9XABMCTxQ-rHe9JmuOJlFg4omJzaO4uPGKB7wSDoc_t4ft9__9cbgecLgh5ANECf9nYt0ysb7WT_oQp64zP2-48gGu-rUD9k2yJ8Ge9hflX77viqtP_66umQjGndAaDS0pnCLN9v94-S2nnE-A8JnOUxy9cSmPyqLrAZWiMUUwqbgbAnHwk9WgDfbOX-iyfxDwDDYbiBZuZt7ItKf5vDuVvFIpfxwtGgfY-ikBupvkLNd3X_w-_AdfmTtCOBtNoAYMqBKFm6KzSQNgZgzLT5M1XEYgXkDNnIH-JjU3DBE_8nIixBEVZeZA_0wmkC4AXqEla-hEudLETwPvQqo8voTGxa-93CUZN5uW_Yop5GO-7N5Vy6_mM759zdr1Jbv8BstlTJrJ3f3u5AUqrwXLE4VovGN8ux1HS5f4JQqruuAFByae5vhyVXNe8ELURc3EhvHtG4aeEpNbwHCsyyVmkqXGcDZOlIUseC4aAqGGo9dkc-no47zSry4mtJb0zoQcZ2KfRRiFyXgXmdj_ldetwHFkYv_iXSKXcnhHJ7J-zEbs37y3asg2Xut31OFkU_FTpWuOif0Uc3VrcqsL3Ui9kRtcULNal6KWdVlVi6HZrDus1i1K5Ju15nwjW7lZVatSigpbWS9MI7iouBSCb0pelUVdt1rj6kl1m7aTNbKS0xGNLaw9HQsf-oWJcaJmJUUlq4XFlmyc304hHJ1hzuabWe0WocmgZTv1kZXcmpjinSaZZKn5PfjW0jHO2_H1eV1MwTZDSmPMj6PYM7HvTRqmtlD-yMQ-81z-lmPweYOZ2M-nZ-Mu8k6N-DcAAP__fVzqrA">