File: alias5.c

package info (click to toggle)
splint 3.1.2.dfsg1-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 14,732 kB
  • ctags: 16,317
  • sloc: ansic: 150,320; yacc: 3,463; sh: 3,003; makefile: 2,153; lex: 412
file content (33 lines) | stat: -rw-r--r-- 658 bytes parent folder | download | duplicates (11)
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
typedef struct 
{
  /*@only@*/ int *x;
  /*@only@*/ int *y;
} *pair;  

# include "alias5.lh"

void incx1 (pair p)
{
  pair p2 = p;

  p2->x++; /* 1. Suspect modification of p->x through alias p2->x: p2->x++ */
}

void incx2 (pair p)
{
  pair p2 = p;

  p2 = pair_create ();
  p2->x++;
} /* 2. Fresh storage p2 not released before return */

void incx3 (pair p)
{
  pair p2 = pair_create ();
  p2->x = p->x; /* 3. Only storage p2->x not released before assignment: p2->x = p->x */
  *(p2->x) = 3; /* 4. Suspect modification of *(p->x) through alias *(p2->x): */
  pair_free (p2);
} /* 5. Storage p->x reachable from parameter is kept (should be only) */