tree 52b8e7953a800901f35b37ed553bfaf25343b75a
parent 6c1bb48cc45396894597c8cb897c31205d1bdeb6
author JJ Marr <168750718+jj-marr@users.noreply.github.com> 1747205258 -0400
committer GitHub <noreply@github.com> 1747205258 +0200
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsFcBAABCAAQBQJoJDyKCRC1aQ7uu5UhlAAAEJMQAJjD7lwi51MLxjfRAKu5cKEu
 hUES9+NH4CwsHszWs3pT2vIIxpnRO3ePmEe6cCcIqr6+mBhGcVVcaHUWxj5rsb7K
 I/qN80OEww5R13DAzEi7D5Md1Hk5PV/ihOITYViB782zUQP5Ifgpbpykqhsir1J/
 l/Mq/1d+DUGqpHJ9UGUNn76khOPLGDCw8q4St+BD1W84ub2pDDH1Hn866ln1w70V
 ZbeuXh7bCa74aw2aaTp6J1SbqeMwZvKXSoOVVxZuyg6afqJ+vD5ApvQvRsqsmvzo
 qjGK7H25wUW8VMV27XqO4b2c6Z3SbjBMvVMxNfDoigiN1ME4tBsGw/UARkF/IPQ2
 YvkFEmrOK3T8AXD1Vzc77V3oe9aw9KtMPKGPKKHwpgmwPDhjTalPeUO0vKkecuJt
 bttgxL7ZaMw3PbneZkEGebyLSh5a5anfSc+ZRMvGg3NxPBC5AgLujsE6RZGM56N6
 IAAJ1w1s+glQG/i1qvNpYj56oB54To6cW7D/RD5DaVEPz5TzIlFFEoCUQIBCoGd1
 FiSkP//QsdtZZDcsvy6NH7Tu7I//9HIfRYLidbZj361FoRU/a853yWx7dLBpkJmE
 JpF521bFlQ+wM/HXzmQC80Q8JrEmcJ89pvJV4Xujy5R0Rd4z3hljwVDHQbBcM86P
 212dosd8q6+5wcSS3aZo
 =QfNw
 -----END PGP SIGNATURE-----
 

Better diagnostics when assertion fails in `consteval` (#130458)

Take this piece of code:
```cpp
#include <cassert>

consteval int square(int x) {
  int result = x * x;
  assert(result == 42);
  return result;
}

void test() {
  auto val = square(2);
}
```
The assertion will fail, and `clang++` will output
(https://godbolt.org/z/hjz3KbTTv):
```cpp
<source>:10:14: error: call to consteval function 'square' is not a constant expression
   10 |   auto val = square(2);
      |              ^
<source>:5:3: note: non-constexpr function '__assert_fail' cannot be used in a constant expression
    5 |   assert(result == 42);
      |   ^
/usr/include/assert.h:95:9: note: expanded from macro 'assert'
   95 |       : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
      |         ^
<source>:10:14: note: in call to 'square(2)'
   10 |   auto val = square(2);
      |              ^~~~~~~~~
/usr/include/assert.h:69:13: note: declared here
   69 | extern void __assert_fail (const char *__assertion, const char *__file,
      |             ^
1 error generated.
Compiler returned: 1
```
This is confusing because it implies that the issue was using an
assertion in a constant-evaluted context, and not that the assertion
failed (`assert()` is OK in constant evaluation). This PR changes the
error message to:
```cpp
test.cpp:10:14: error: call to consteval function 'square' is not a constant expression
   10 |   auto val = square(2);
      |              ^
test.cpp:5:3: note: assertion failed in consteval context: 'result == 42'
    5 |   assert(result == 42);
      |   ^
/nix/store/lw21wr626v5sdcaxxkv2k4zf1121hfc9-glibc-2.40-36-dev/include/assert.h:102:9: note: expanded from macro 'assert'
  102 |       : __assert_fail (#expr, __ASSERT_FILE, __ASSERT_LINE,             \
      |         ^
test.cpp:10:14: note: in call to 'square(2)'
   10 |   auto val = square(2);
      |              ^~~~~~~~~
1 error generated.```