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