File: contracts-deduced2.C

package info (click to toggle)
gcc-arm-none-eabi 15%3A14.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,099,328 kB
  • sloc: cpp: 3,627,108; ansic: 2,571,498; ada: 834,230; f90: 235,082; makefile: 79,231; asm: 74,984; xml: 51,692; exp: 39,736; sh: 33,298; objc: 15,629; python: 15,069; fortran: 14,429; pascal: 7,003; awk: 5,070; perl: 3,106; ml: 285; lisp: 253; lex: 204; haskell: 135
file content (84 lines) | stat: -rw-r--r-- 1,793 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// check that contracts work around deduced return types
// { dg-do run }
// { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on" }

auto g0(int a) [[ pre: a < 0 ]] [[ post r: r > 0 ]]
{
  return -a * 1.2;
}

int g1(int m) [[ post r: r == m ]];

int g1(int n) [[ post s: s == n ]]
{
  return -n;
}

int g2(int z)
{
  return -z;
}

int g3(int z)
  [[ pre: sizeof(decltype(g2(5))) > 4 ]]
{
  return -z;
}

auto g4(int m) [[ post: m ]];

auto g4(int m) [[ post: m ]]
{
  return -m;
}

auto g5(int m) [[ pre: m ]];

auto g5(int m) [[ pre: m ]]
{
  return -m;
}

template<typename T>
auto g6(T t) [[ post r: r == t ]];

template<typename S>
auto g6(S s) [[ post q: q == s ]]
{
  return -s;
}

// template<typename T>
// T g7(T t) [[ post r: r == t ]];

template<typename S>
S g7(S s) [[ post q: q == s ]]
{
  return -s;
}

int main(int, char**) {
  g0(5);
  g1(6);
  g2(1);
  g3(1);
  g4(0);
  g5(0);
  g6(5);
  g6(5.5);
  g7(5);
  g7(6.6);
  return 0;
}

// { dg-output "contract violation in function g0 at .*.C:5: .*(\n|\r\n|\r)" }
// { dg-output "contract violation in function g0 at .*.C:5: .*(\n|\r\n|\r)" }
// { dg-output "contract violation in function g1 at .*.C:12: .*(\n|\r\n|\r)" }
// { dg-output "contract violation in function g3 at .*.C:23: .*(\n|\r\n|\r)" }
// { dg-output "contract violation in function g4 at .*.C:30: .*(\n|\r\n|\r)" }
// { dg-output "contract violation in function g5 at .*.C:37: .*(\n|\r\n|\r)" }
// { dg-output "contract violation in function g6<int> at .*.C:46: .*(\n|\r\n|\r)" }
// { dg-output "contract violation in function g6<double> at .*.C:46: .*(\n|\r\n|\r)" }
// { dg-output "contract violation in function g7<int> at .*.C:55: .*(\n|\r\n|\r)" }
// { dg-output "contract violation in function g7<double> at .*.C:55: .*(\n|\r\n|\r)" }