]> andersk Git - splint.git/blob - test/alias3.c
Pushed back constraintResolve.c to the previous version.
[splint.git] / test / alias3.c
1 /*
2 ** tests aliasing of arrays, structs and unions
3 */
4
5 # include "alias3.lh"
6
7 st gst;
8 ut *gu;
9
10 void model (int ia[])
11 {
12   int *ip;
13
14   ip = &(ia[6]);
15   *ip = 3;
16   gst.a = 3; /* 1. Suspect modification of gst.a */
17   gu->a = 5; /* 2. Suspect modification of gu->a */
18 }
19
20 void modst (st s1)
21 {
22   s1.a = 3;
23   *(s1.b) = 6;
24 }
25
26 void modu (ut *u)
27 {
28   u->a = 5;
29 }
30
31 int f (int ia[], st s1, ut *u1)
32 {
33   int *ip;
34   st   sl;
35   ut   *ul;
36
37   ip = &(ia[3]);
38   *ip = 7; /* modifies ia[3] */
39
40   ip = &(ia[*ip]);
41
42   *ip = 8; /* modifies ia[?] */
43
44   model(ia); /* modifies ia[6] */
45   ip = ia;
46   model(ip); /* modifies ia[6] */
47
48   s1.a = 3;    /* okay */
49   *(s1.b) = 7; /* modifies *(s1.b) */
50   
51   sl = s1;     /* okay (sl is NOT an alias for s1) */
52   modst(sl);   /* was: does not modify anything --- structure is passed by value */
53                /* NOT TRUE: does modify sl since *s1.b is the same reference */
54   sl.a = 3;    /* okay */
55   ip = s1.b;   /* okay, ip aliases s1.b */
56   *(s1.b) = 3; /* modifies s1.b */
57   *ip = 6;     /* modifies s1.b */
58   *(sl.b) = 3; /* okay */
59
60   ul = u1;     /* ul aliases u1 */
61   modu(ul);    /* okay */
62   ul->a = 3;   /* modifies u1->a */
63   sl = ul->s;  /* okay */
64   sl.a = 3;    /* okay */
65   *(sl.b) = 6; /* modifies *(u1->s.b) through alias */
66   return 5;
67 }
This page took 0.04195 seconds and 5 git commands to generate.