-// test that assumed constexpr contracts that reference defined entities cause
-// constexpr eval failure when the predicate is constexpr false
-// test that assumed constexpr contracts that reference undefined entities in
-// an unevaluated context cause constexpr eval failure
+// 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 dummy2()
{
- [[ assert assume: sizeof(decltype(f(1))) < 0 ]];
+ [[ 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 *-*-* } 15 }
+ // { dg-error "contract predicate" "" { target *-*-* } 14 }
constexpr int m = dummy2(); // { dg-message "in .constexpr. expansion" }
- // { dg-error "contract predicate" "" { target *-*-* } 23 }
+ // { dg-error "contract predicate" "" { target *-*-* } 22 }
return 0;
}