<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/145658>145658</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] Implement P2843R3 - Preprocessing is never undefined
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang,
c++26
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
cor3ntin
</td>
</tr>
</table>
<pre>
Here are some test cases for this paper.
The limitations on line numbers may be a bit restrictive, show we ask WG21 to make that implementation defined?
We currently do not diagnose directives in arguments of function macros, so this should
probably comes with an opt-out mechanism
```cpp
// [cpp.include]: nothing to do
#define FOO invalid
#include FOO
// expected-error@-1 {{expected "FILENAME" or <FILENAME>}}
// [cpp.cond]
#define DEFINED defined
#if DEFINED(bar) // Should be an error
#endif
// [cpp.replace.general]
#define FUNCTION_MACRO(...)
FUNCTION_MACRO(
#if 0 // should diagnose
#endif
)
// [cpp.stringize]: nothing to do
#define STR(x) # x
const char* a = STR(\o{999});
// [cpp.concat]: nothing to do
#define CONCAT(A, B) A ## B
CONCAT(=, >)
// expected-error@-1 {{pasting formed '=>', an invalid preprocessing token}}
// [cpp.predefined]
#undef defined
// expected-error@-1 {{error: 'defined' cannot be used as a macro name}}
#undef __DATE__
// expected-warning@-1 {{undefining builtin macro}}
// should be turned into an error by default
// [cpp.line]
#line 0 // should diagnose
#line -1
#line 2147483647
#line 2147483648 // should diagnose ?
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEVU1v4zgM_TXMhUhgS3YcH3JwvnYL7LSDThdzLGSZsbW1JUOS-7G_fiE7SduddgoYMESJj4_kEyWcU7UmWkO6gXQ3E4NvjF1LY7n2Ss9KU72s_yRLKCyhMx2hJ-dRCkcOj8aib5TDXvRkFxAVdw1hqzrlhVdGOzQaW6UJ9dCVZB124gVLQoGl8mjJeaukV48EbIuuMU_4RCjcA_78g8XoDXbigdA3wqPq-pY60hMyVnRUmirgB4gKiIqfhHKwlrRvXxArg9p4rJSotXGElbI0xnGoNApbDwHJoTnicdByROyEtMaNRMyUlWvM0FYQFb01pSjbF5SmI4dPyjcoNJrez83gsSPZCK1chxOX8C2j6ZN9f7KwA7ADQrqRfb9QWrZDRZDugBeBa6N0HRKuzHiWT_nh4eYGlX4Uraom-8kxbLyC0nNP0lM1J2uNhSSaxwjZBrLNeQeBscPVX_vr4tseGENjEfj2YuF7yHbh-4CqNLoKPN_S2u0PV9f73aULE7Xj2Q5sVQoLLMcT1I-xkmPnNY4kcfIhXanjR1Et9a2QtKhJkxUtpDt8X5i_r7d3VzfX99-K7e0NsNVisQCWQ1T8sgNRgYg4MYzOlKbmXiQSDr3lM0L9wiroVdfq368b9-PuFtjqeaoBx2eICml0uDlNqEyBAoHvTscg3RrINnmehx6wHPjmVUn_b4YU_svo25vrbXEHbFUEPW8CizG9QCVAX_aB78KJIIAp468E1QvnQ8yjsd0oqyxABPcsAAl9liv2lnprJDk3cXwg_bnIektnLZ2lNuiKju8U9pXWRwMPiWZnN5ahFDrMgpJwcFShcCimu45adPSe0ino_f2uuNvf338Q9UlYrXT9Nu7oo4IVy0G1Xp1mySv0O8WVhH6wmipU2pvXC1G-hGTF0PpPeh8G6aU641T9jZjPR-bxmwWLkyxZ8WWSfWRcfYKGlyF7mWqzas2rnOdiRus4S6NVksbRatasGctzKdixSmO2XB55IrnkMo2WrOQppXKm1ixiYZ1GeRon2SIukyxOS54v82WcLEtIIuqEahdt-9gtjK1nyrmB1nGSLtPVrBUltW58rhiTrdA1MAZsG1bANsA2bBks6W5m1wFiXg61gyRqlfPuFdQr346v3nbESHd4dX5g8DtbJfyW4xy_v9OwcqjpkSyeOk7VbLDtuvG-d8BP3aqVb4ZyIU0H7BDCnX7z3pp_SHpghzEhB-xwyulxzf4LAAD__2LxRAs">