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

    <tr>
        <th>Summary</th>
        <td>
            Can't use parameter pack llvm::isa inside assert
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:support
      </td>
    </tr>

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

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

<pre>
    I noticed this in #160274, where I had an assert like

```c++
 assert(isa<InsertElementInst>(VecI) ||
           isa<InsertValueInst>(VecI) &&
               "Packed operands must generate an insertelement or insertvalue");
```

But there's a handy version of llvm::isa that uses parameter packs so you can pass multiple types to check against, however this seems to fail when used inside of the assert:

```c++
 assert(isa<InsertElementInst, InsertValueInst>(VecI) &&
 "Packed operands must generate an insertelement or insertvalue");
```

```
llvm-project/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp:3271:35: error: too many arguments provided to function-like macro invocation
 3271 | assert(isa<InsertElementInst, InsertValueInst>(VecI) &&
      | ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:71:9: note: macro 'assert' defined here
   71 | #define assert(e) \
      | ^
llvm-project/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp:3271:5: error: use of undeclared identifier 'assert'
 3271 | assert(isa<InsertElementInst, InsertValueInst>(VecI) &&
      |     ^
2 errors generated.
```

The parameter pack overload works fine outside of the assert. I'm not sure if this specific to the MacOSX toolchain or not. Running into this on clang version 21.1.2, arm64-apple-darwin24.6.0
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0VU2P2zgM_TXKhRjDphN7fPAhkzZAsFhs0RZFr4zMxNrIkiHJGcz--gXttPPRHhbYNmAgW6YkvvdIimI0Z8fcqs2D2rxb0ZR6H1o7Xdg29erou6f2AM4no7mD1JsIxoHCsqhyrNcKd_DYc2A4QE8dkAOKkUMCay6s8q1YlS-mFT6I5dubk8J7E0mVu4OT1_eWB3bp4GJS5XuF919YHxQ2oOqdWL6F59_LhV_ITvyTZViJvVomP4X4gfSFO_AjB3JdhGGKCc7sOFBiQWHmjXmJCHy4TVzlJIWosFHlw0twC9aHKUESPhTWEQh6ct0TXDlE4x34E1h7HVS5VeXWRILUU4IpcoSRAg2cOMBI-hIhenjyE2hyMFKUAG0yo2VITyNHSB50z_oCdCYjwHEHvX_kK4dFpMg8zG4nMlYkcnJOJzBMxxJJ6vmbDOX2fyiFO_iPKvxG3l--CsV3Y_B_s04K9zPjuLfmqHD_OZCLJx-GqHD_hXXywfzD8vzBkvvI2owcMz2OqtyWWBcybFS5BQ7BB3lI3sNA7gkonCcJMsIY_NV0Uh4eTpPTyXh3J_kPA-ngwbir1ySzwoJsKxn9K5ld0rregdq8FzZwvx1Ha5ZDBepX7TvOaBwV7nfeJYlb4f4dX9mKGAr3Hyylb8z8SfqvT1-z8Tb1xvPTuz9eOMXuonA_RflinLZTJ3wu4LJelduZxUa4cz6xjAstCutvFNTQ8ck47mCunRnRjSWF5fLtmS-ewW92P0H-i7V_Lf0U58KZXMfaUpBq6tglczIcXqH57TLP4wwYl_Di9yLqsh-r43PPbxoM-CsH66mDRx8uEWaC_ZR-bA4ZHBTWg2gHcQoM5nTrMCNrczJasl7cl3SQ-rC6J-OkeJ1PGXycnDPuDMbNniaCd6AtufP3xohFVmQoTFAYqvUdjaPlu47Co3G4zqosX3Vt2TVlQytui3pzXzdYFdWqb_O8LMp1feJSk8bNOi-5aehUNEXNWN7nK9Nijpu8kX-ZF1WWN-Wau_sNFfnpqKtKrXMeyNhMsiXz4bwyMU7cFlVe1biydGQb5_sR8da-4zSOXkRFuTNDO6fdcTpHtc6tiSk-75VMstzuyCms517_VonXN8KtPy_cr6Zg2z6lMYoD7hXuzyb10zHTfniR3q-Tfo5ecvwG4NrivwEAAP__J2OA-Q">