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

    <tr>
        <th>Summary</th>
        <td>
            consteval calls in default args
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    Consteval calls in default args do not work
```
consteval int here() { return 5; }
void error(int location = here()) { }
void bob () { error(); }
```
The problem here is we markused the consteval fn, which causes us to emit an error about taking the address of the consteval fn.  I patched up EvaluatedExprMarker, called from Sema::CheckCXXDefaultArgExpr to skip such consteval calls, but we then ICE in code emission, trying to emit a consteval fn body.  

https://bugs.llvm.org/show_bug.cgi?id=5810 seems relevant, as that's mentioned in the comment in CheckCXXDefaultArgExpr:
  // FIXME: We should really be rebuilding the default argument with new
  // bound temporaries; see the comment in PR5810.
  // We don't need to do that with block decls, though, because
  // blocks in default argument expression can never capture anything.

5810 includes the ominous note:
One could imagine rebuilding the AST nodes with new CXXTemporary pointers, although that's going to require a lot of code :(

Notice that because of __source_location(), which is different on every evaluation, we can't just morph the original defaultArgExpr as is held in the ParamDecl.  We have to clone and evaluate at each use, I think.

(this default arg pattern is used in the source_location header to get the location corresponding to the caller of the source_location ctor, not the location of the ctor itself)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx9VdFu6jgQ_ZrwMloEIRT6wEMLrdSHu3u1t9L2rXLiIfHFsbO2U5a_32OHtMBdrRRBnNgzZ845MymtPG221vjAH0JTJbT2pAxJ3oteBxKu9iQtGRvoaN0hm-2y2UN2NztfaVl9nlcmUMOOs3yd5feUrR7JceidoWW2eMR6N5z4sEoSO2cddsZD2lYiKGsoW-wuIoxBrg-WtqSLDGOcuP8yyQ3K14apc7bU3KYMpDwdmVrhDr1nSQHvvyrZmyzf0rFRVQNWsMFT7ylY4laBFjNkJVHaPlAQB2XqFEFI6dh7svtfAk6JXqgToWqQre_oCY97EVg-_dO5b4DBLuaMGmDD3tmWfnArssUDrm3D1WH79rYbhHlwdTwVAfmD6sj3Eee1jjFYCXQoElAMvWyforSVlRyr8B58xz3BnRL6sbYr0CBbnoD8TGn6bULofISVP-Mq-9pPtf5op9bVWPvGHt_xcFrVKls8KwlJl-v5jDxz6-EHjdAmxMwCjDYCtytPLZtoAFQOjAN1bXwWl_9dfESQ8ABdQkLPL2_fnvCY_mICjF5LpAMVJyoZd2WvtByFunB4n_IcVWjI8PEmJgQ2MAe3nXXCKfbRYyjlFuP3P2OR05vTACIjy6uA0NFkNnZTLHrIV8L4B2CpBrkCQNdNEo6T627BxO23DTrAZzDCSVOob5Dtgx3uOnQfXGlOoUHl00sZkyjKVLqX7FM5tlXGwubodv5k9w8T64xcqlbUyvzC5MOPV5yIMUYKCVq9nhk7UWfR4exSgUIPJX7pXtuz-Rz_3auIFcMgxP5JRk02W1_C_t0GVfHA4ZmluPv93dveVfw-jpJxgoxdjHaXar9H54MtsBQJOhEPTXhuBbQKyEty_ex9oNa6rhmocQq1oyXkdQPCwgjcsP707XfhRLuDougayN-ID47lVRrmhhByTIkFVBNAFnVG8heKGh2uNEIReOgv5Y4jBHSamDcNrnPem_KBSUhOE6LmkHZ8vqqsg1c6a-SZ--TlOHfcOLhuo1XBpukUPwRXscZBh_ekgme9B-sTuVnI-8W9mAQVNG-q___CTHqnN9dTpYaV-nKKBsMiTpfz328Y4T-5gneeMcF6tGP-vCxWRTFpNndFebde5PflupiXizu559m94Fmxyue8LKrVRIuStd9ky8dsuZuoTT7L81kxK-br-WpRTHMW6ztelnM5k3K1XmfFDPNX6c_pNnGbhCGOPLzUyoev0TcR6L4aXT7GFz287jb4-gmY1UwS3k0C-y8KZ31i">