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