Skip to content
Snippets Groups Projects
Commit 68f96c89 authored by Jan Rochel's avatar Jan Rochel
Browse files

[alias] add example jfla_running_ex.c

parent 91cb4306
No related branches found
No related tags found
No related merge requests found
int* jfla (int *fst, int *snd, int **i1, int **i2, int bo) {
*snd = *fst;
if (bo) { fst = *i1; return *i2; }
else { fst = *i2; return *i1; }
}
void main(void) {
int u = 11, v = 12, t[3] = {0,1,2};
int *a = &t[1], *b = &u, *c = &v;
int **x = &a, **y = &b, **z = &c;
struct str_t {int *fst; int *snd; } s = { c , t }, *s1 = &s, *s2 = &s;
c = jfla(s1->fst, s1->snd, x, y, 0);
a = jfla(s2->fst, s2->snd, y, z, 1);
}
[kernel] Parsing jfla_running_ex.c (with preprocessing)
[alias] analysing function: jfla
[alias] analysing instruction: *snd = *fst;
[alias] May-aliases after instruction *snd = *fst; are <none>
[alias] May-alias graph after instruction *snd = *fst; is <empty>
[alias] analysing instruction: fst = *i1;
[alias] May-aliases after instruction fst = *i1; are { *i1; fst }
[alias] May-alias graph after instruction fst = *i1; is
0:{ *i1; fst } → 1:{ } 2:{ i1 } → 0:{ *i1; fst }
[alias] analysing instruction: __retres = *i2;
[alias] May-aliases after instruction __retres = *i2; are
{ *i1; fst } { *i2; __retres }
[alias] May-alias graph after instruction __retres = *i2; is
0:{ *i1; fst } → 1:{ } 2:{ i1 } → 0:{ *i1; fst }
4:{ *i2; __retres } → 5:{ } 6:{ i2 } → 4:{ *i2; __retres }
[alias] analysing instruction: fst = *i2;
[alias] May-aliases after instruction fst = *i2; are { *i2; fst }
[alias] May-alias graph after instruction fst = *i2; is
8:{ *i2; fst } → 9:{ } 10:{ i2 } → 8:{ *i2; fst }
[alias] analysing instruction: __retres = *i1;
[alias] May-aliases after instruction __retres = *i1; are
{ *i2; fst } { *i1; __retres }
[alias] May-alias graph after instruction __retres = *i1; is
8:{ *i2; fst } → 9:{ } 10:{ i2 } → 8:{ *i2; fst }
12:{ *i1; __retres } → 13:{ } 14:{ i1 } → 12:{ *i1; __retres }
[alias] May-aliases at the end of function jfla:
{ i1; i2 } { *i1; *i2; fst; __retres }
[alias] May-alias graph at the end of function jfla:
0:{ *i1; *i2; fst; __retres } → 1:{ }
2:{ i1 } → 0:{ *i1; *i2; fst; __retres }
6:{ i2 } → 0:{ *i1; *i2; fst; __retres }
[alias] Summary of function jfla:
formals: fst snd i1→{ *i1; *i2; fst; __retres }
i2→{ *i1; *i2; fst; __retres } bo
locals: __retres returns: __retres
state: { i1; i2 } { *i1; *i2; fst; __retres }
[alias] analysing function: main
[alias] analysing instruction: int u = 11;
[alias] May-aliases after instruction int u = 11; are <none>
[alias] May-alias graph after instruction int u = 11; is <empty>
[alias] analysing instruction: int v = 12;
[alias] May-aliases after instruction int v = 12; are <none>
[alias] May-alias graph after instruction int v = 12; is <empty>
[alias] analysing instruction: int t[3] = {0, 1, 2};
[alias] May-aliases after instruction int t[3] = {0, 1, 2}; are <none>
[alias] May-alias graph after instruction int t[3] = {0, 1, 2}; is <empty>
[alias] analysing instruction: int *a = & t[1];
[alias] May-aliases after instruction int *a = & t[1]; are <none>
[alias] May-alias graph after instruction int *a = & t[1]; is
16:{ a } → 17:{ t[0..] }
[alias] analysing instruction: int *b = & u;
[alias] May-aliases after instruction int *b = & u; are <none>
[alias] May-alias graph after instruction int *b = & u; is
16:{ a } → 17:{ t[0..] } 20:{ b } → 21:{ u }
[alias] analysing instruction: int *c = & v;
[alias] May-aliases after instruction int *c = & v; are <none>
[alias] May-alias graph after instruction int *c = & v; is
16:{ a } → 17:{ t[0..] } 20:{ b } → 21:{ u } 24:{ c } → 25:{ v }
[alias] analysing instruction: int **x = & a;
[alias] May-aliases after instruction int **x = & a; are { *x; a }
[alias] May-alias graph after instruction int **x = & a; is
20:{ b } → 21:{ u } 24:{ c } → 25:{ v } 28:{ x } → 29:{ a }
29:{ a } → 17:{ t[0..] }
[alias] analysing instruction: int **y = & b;
[alias] May-aliases after instruction int **y = & b; are { *x; a } { *y; b }
[alias] May-alias graph after instruction int **y = & b; is
24:{ c } → 25:{ v } 28:{ x } → 29:{ a } 29:{ a } → 17:{ t[0..] }
31:{ y } → 32:{ b } 32:{ b } → 21:{ u }
[alias] analysing instruction: int **z = & c;
[alias] May-aliases after instruction int **z = & c; are
{ *x; a } { *y; b } { *z; c }
[alias] May-alias graph after instruction int **z = & c; is
28:{ x } → 29:{ a } 29:{ a } → 17:{ t[0..] } 31:{ y } → 32:{ b }
32:{ b } → 21:{ u } 34:{ z } → 35:{ c } 35:{ c } → 25:{ v }
[alias] analysing instruction: struct str_t s = {.fst = c, .snd = t};
[alias] May-aliases after instruction struct str_t s = {.fst = c, .snd = t}; are
{ *x; a } { *y; b } { *z; c; s.fst }
[alias] May-alias graph after instruction struct str_t s = {.fst = c, .snd = t};
is
28:{ x } → 29:{ a } 29:{ a } → 17:{ t[0..] } 31:{ y } → 32:{ b }
32:{ b } → 21:{ u } 34:{ z } → 37:{ c; s.fst }
37:{ c; s.fst } → 25:{ v } 38:{ s.snd } → 39:{ t }
[alias] analysing instruction: struct str_t *s1 = & s;
[alias] May-aliases after instruction struct str_t *s1 = & s; are
{ *x; a } { *y; b } { *z; c; s.fst }
[alias] May-alias graph after instruction struct str_t *s1 = & s; is
28:{ x } → 29:{ a } 29:{ a } → 17:{ t[0..] } 31:{ y } → 32:{ b }
32:{ b } → 21:{ u } 34:{ z } → 37:{ c; s.fst }
37:{ c; s.fst } → 25:{ v } 38:{ s.snd } → 39:{ t }
41:{ s1 } → 42:{ s }
[alias] analysing instruction: struct str_t *s2 = & s;
[alias] May-aliases after instruction struct str_t *s2 = & s; are
{ *x; a } { *y; b } { *z; c; s.fst } { s1; s2 }
[alias] May-alias graph after instruction struct str_t *s2 = & s; is
28:{ x } → 29:{ a } 29:{ a } → 17:{ t[0..] } 31:{ y } → 32:{ b }
32:{ b } → 21:{ u } 34:{ z } → 37:{ c; s.fst }
37:{ c; s.fst } → 25:{ v } 38:{ s.snd } → 39:{ t }
41:{ s1 } → 46:{ s } 45:{ s2 } → 46:{ s }
[alias] analysing instruction: c = jfla(s1->fst,s1->snd,x,y,0);
[alias] May-aliases after instruction c = jfla(s1->fst,s1->snd,x,y,0); are
{ *x; *y; *z; s1->fst; a; b; c; s.fst } { x; y } { s1; s2 }
[alias] May-alias graph after instruction c = jfla(s1->fst,s1->snd,x,y,0); is
28:{ x } → 29:{ a; b } 29:{ a; b } → 17:{ u; v; t[0..] }
31:{ y } → 29:{ a; b } 34:{ z } → 37:{ c; s.fst }
37:{ c; s.fst } → 17:{ u; v; t[0..] } 38:{ s.snd } → 39:{ t }
41:{ s1 } → 46:{ s } 45:{ s2 } → 46:{ s }
55:{ s1->fst } → 17:{ u; v; t[0..] }
[alias] analysing instruction: a = jfla(s2->fst,s2->snd,y,z,1);
[alias] May-aliases after instruction a = jfla(s2->fst,s2->snd,y,z,1); are
{ *x; *y; *z; s1->fst; s2->fst; a; b; c; s.fst } { x; y; z } { s1; s2 }
[alias] May-alias graph after instruction a = jfla(s2->fst,s2->snd,y,z,1); is
28:{ x } → 29:{ a; b; c; s.fst }
29:{ a; b; c; s.fst } → 17:{ u; v; t[0..] }
31:{ y } → 29:{ a; b; c; s.fst } 34:{ z } → 29:{ a; b; c; s.fst }
38:{ s.snd } → 39:{ t } 41:{ s1 } → 46:{ s } 45:{ s2 } → 46:{ s }
55:{ s1->fst } → 17:{ u; v; t[0..] }
63:{ s2->fst } → 17:{ u; v; t[0..] }
[alias] May-aliases at the end of function main:
{ *x; *y; *z; s1->fst; s2->fst; a; b; c; s.fst } { x; y; z } { s1; s2 }
[alias] May-alias graph at the end of function main:
28:{ x } → 29:{ a; b; c; s.fst }
29:{ a; b; c; s.fst } → 17:{ u; v; t[0..] }
31:{ y } → 29:{ a; b; c; s.fst } 34:{ z } → 29:{ a; b; c; s.fst }
38:{ s.snd } → 39:{ t } 41:{ s1 } → 46:{ s } 45:{ s2 } → 46:{ s }
55:{ s1->fst } → 17:{ u; v; t[0..] }
63:{ s2->fst } → 17:{ u; v; t[0..] }
[alias] Summary of function main:
formals:
locals: u v t a→{ u; v; t[0..] } b→{ u; v; t[0..] }
c→{ u; v; t[0..] } x→{ a; b; c; s.fst } y→{ a; b; c; s.fst }
z→{ a; b; c; s.fst } s s1→{ s } s2→{ s }
returns: <none>
state: { *x; *y; *z; s1->fst; s2->fst; a; b; c; s.fst } { x; y; z }
{ s1; s2 }
[alias] Analysis complete
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment