File: annot.c

package info (click to toggle)
why 2.13-2
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 12,608 kB
  • ctags: 16,817
  • sloc: ml: 102,672; java: 7,173; ansic: 4,439; makefile: 1,409; sh: 585
file content (47 lines) | stat: -rw-r--r-- 760 bytes parent folder | download | duplicates (4)
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

/* Annotations in C programs */

/*W logic p : int -> prop */

/*@ requires x == 0 ensures \result == 1 */
int f(int x) {
  return x+1;
}


/*W external h : int -> int */

int g();

/*@ ensures \result > 0 */
int g() {
  int s = 0;
  int i = 0;
  /*@ assert s == 0 */;
  /*@ invariant 0 <= i <= 10 variant 10 - i */ 
  while (i < 10) 
  {
    s += i++;
  }
}

/* recursive function with a variant */

/*@ ensures n >= 0 // variant n 
  @*/
int fact(int n) {
  return n == 0 ? 1 : n * fact(n-1);
}

void h() {
  int i = 1000;
  /*@ invariant i >= 0 variant i */ 
  do i--; while (i > 0);
  { 
    int j = 0;
    /*@ assert j == 0 */;
    /*@ invariant i >= 0 variant i */ 
    for (; j < 10; j++) i += j; 
  }
}