ipa-cp: Perform operations in the appropriate types (PR 118097)
[gcc.git] / gcc / testsuite / g++.dg / contracts / contracts-assume6.C
blob931c4d0c19c8f5f9bc9434261087fb6dfe7b2cb1
1 // ensure that non-defined entities in assume contracts do not error
2 // { dg-do compile }
3 // { dg-options "-std=c++2a -fcontracts" }
5 template<typename T>
6 T id2(T n);
8 int fun(int n)
9   [[ pre assume: id2(n) > 0 ]]
10   [[ pre: n > 0 ]]
12   return -n;
15 template<typename T>
16 T tfun(T n)
17   [[ pre assume: id2(n) > 0 ]]
18   [[ pre: n > 0 ]]
20   return -n;
23 template<typename T>
24 constexpr T id(T n); // { dg-warning "used but never defined" }
26 template<typename T>
27 constexpr T cfun(T n)
28   [[ pre assume: id(n) > 0 ]]
29   [[ pre: id(n) > 0 ]] // { dg-error "used before its definition" }
31   return -n;
34 template<typename T>
35 constexpr T id3(T n)
37   return n;
40 template<typename T>
41 constexpr T cfun2(T n)
42   [[ pre assume: id3(n) > 0 ]] // { dg-error "contract predicate" }
44   return -n;
47 template<typename T>
48 constexpr T cfun3(T n)
49   [[ pre: id3(n) > 0 ]] // { dg-error "contract predicate" }
51   return -n;
54 int main() {
55   constexpr int n = cfun(-5);
56   constexpr int n2 = cfun2(-5);
57   constexpr int n3 = cfun3(-5);
58   fun(-5);
59   tfun(-5);