<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/107975>107975</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Incorrect macro expansion post 79f87be6888d13a
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ornata
</td>
</tr>
</table>
<pre>
Given clang >=18: https://godbolt.org/z/vGrv5P4Y8
Clang now sees this `elif` as true in c++14 mode:
```
#elif MY_HAS_STD_ATTRIBUTE(nodiscard) >= 201907L
#define MY_NODISCARD_WITH(...) [[nodiscard(__VA_ARGS__)]]
```
Code in-line for posterity:
```
#include <cstdio>
#if defined(__has_cpp_attribute)
#define MY_HAS_STD_ATTRIBUTE(...) __has_cpp_attribute(__VA_ARGS__)
#elif defined(__has_c_attribute)
#define MY_HAS_STD_ATTRIBUTE(...) __has_c_attribute(__VA_ARGS__)
#else
#define MY_HAS_STD_ATTRIBUTE(...) 0
#endif
#if defined(__clang__) && MY_HAS_STD_ATTRIBUTE(gnu::warn_unused_result)
#define MY_NODISCARD [[gnu::warn_unused_result]]
#elif MY_HAS_STD_ATTRIBUTE(nodiscard) >= 201603L
#define MY_NODISCARD [[nodiscard]]
#else
#define MY_NODISCARD
#endif
#if defined(__clang__) && MY_HAS_STD_ATTRIBUTE(gnu::warn_unused_result) >= 201907L
#define MY_NODISCARD_WITH(...) [[gnu::warn_unused_result(__VA_ARGS__)]]
#define MY_NODISCARD_WITH_IS "gnu::warn_unused_result(__VA_ARGS__)"
#elif MY_HAS_STD_ATTRIBUTE(nodiscard) >= 201907L
#define MY_NODISCARD_WITH(...) [[nodiscard(__VA_ARGS__)]]
#define MY_NODISCARD_WITH_IS "nodiscard(__VA_ARGS__) (got >=201907L)"
#else
#define MY_NODISCARD_WITH(...) MY_NODISCARD
#define MY_NODISCARD_WITH_IS "MY_NODISCARD"
#endif
MY_NODISCARD_WITH("boom")
int boom() noexcept { return 1; }
int main() {
printf("%s\n", MY_NODISCARD_WITH_IS);
return boom();
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVluP4jYU_jUnL9Ygc3J_yEOYLLNI24sG2mqfIic24CrYyHaY3f76yiEzMCzLzraVulI0A4TvdvyZmFkrN0qIAuIZxFXAerfVptBGMceCRvPPxYM8CEXajqkNgfAdhNU0g7AkW-f2FsIScA4432je6M5NtNkAzv8CnB8ezCH-NfqYAa2Alse_9wON0k_ECmGJ20pLIKGik2tIKGGWONMLIhVpAWeAs2lEdpoLr3NGAwkdr-NbDD0D-elj_b5c1stVVZer1eNi9tvqHWCmNJe2ZYYD5mMEgnSa0_TDEU8IIYAhF2uphGf5-ZdqsbwvH6v6j8XqPWA2mUwGsJ_S7Iwvq-vfy7p8fFjWNWAOceWvqx6P-TX36e46L7TWhuy1dcJI9_mbCaVqu54LAuF9ax2X2ic5R2Ao1-SY4ehsy2zd7vc1c87IpnfCO3z-7instZGNea9yXGZ-tQRf6P979bdpW_F95GfVUVyub09yaP-gSAATwORr5BvV-4UMyydmVN2r3gpeG2H7zl2P_9K0sVu3CM7L9Y8an9Dwwxs8nNCXileH_AL_Hyb6X2znmwo3NvgtjXqxJID4XdSIP_Cv2TdIx7xf5yJ-KbUbDT_7vUz93K-3-f-ye29z-Qp3rn9Z22vagNhovfO45w0tlSPHzzJvS2nxqRV7RyCdESNcbxSZQjgjkFbn7B62Y1KNMEhnpxB7I5VbH-UAYwvxvRpe3l9N5a2EZ_BR9WTq5e7Jw-sHTMCLkOdhzgJRTFOM8yjJcgy2RdamLOOt4A1NeU6jGHNs8palcZoloVgHskCKEc2nlMbRNMRJE3PO2yZKGMVMZBwiKnZMdpOuO-z8ASGQ1vaimNI0T-OgY43o7HAAQVTiiQx3fdi4CkzhQXdNv7EQ0U5aZ080TrpOFAvVamNE64fZGk3Epz1TVmo1PFtJmq-ztBFJlmV8GrKgN11xcXSRbts3k9bPau7Jx393e6P_FK0DnA-WLOB89Hwo8O8AAAD__14Zozo">