Improve error reporting for constexpr "assume" violation
Improve the error reported during constexpr evaluation for a fully defined contract with the assume
condition which is out of contract. This may fall out of splitting after constexpr time.
constexpr int g(int a)
{
return -1;
}
constexpr int f(int a)
{
[[ assert assume: g(a) > 0 ]];
return -a;
}
int main(int, char**)
{
constexpr int z = f(-10);
return 0;
}
generates:
constexpr_assume2.cpp: In function ‘int main(int, char**)’:
constexpr_assume2.cpp:15:22: in ‘constexpr’ expansion of ‘f(-10)’
constexpr_assume2.cpp:15:26: error: ‘__builtin_unreachable()’ is not a constant expression
15 | constexpr int z = f(-10);
| ^