]>
Commit | Line | Data |
---|---|---|
885824d3 | 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 | } |