blob: 372c0deb13af91881c28ca165d87b6b95e24c790 [file] [log] [blame]
// test that assumed constexpr contracts that reference defined entities, or
// undefined entities in unevaluated context, cause constexpr eval failure when
// the predicate is constexpr false
// { dg-do compile }
// { dg-options "-std=c++2a -fcontracts" }
constexpr int f(int t)
{
return -1;
}
constexpr int dummy()
{
[[ assert assume: f(1) > 0 ]];
return -1;
}
constexpr int undef(int t);
constexpr int dummy2()
{
[[ assert assume: sizeof(decltype(undef(1))) < 0 ]];
return -1;
}
int main()
{
constexpr int n = dummy(); // { dg-message "in .constexpr. expansion" }
// { dg-error "contract predicate" "" { target *-*-* } 14 }
constexpr int m = dummy2(); // { dg-message "in .constexpr. expansion" }
// { dg-error "contract predicate" "" { target *-*-* } 22 }
return 0;
}