From 56d3b4ef0dfb6d211fb4df3ae61afa785a1baeac Mon Sep 17 00:00:00 2001
From: Jan Rochel <jan.rochel@cea.fr>
Date: Wed, 1 Nov 2023 02:33:10 +0100
Subject: [PATCH] [alias] print graphs in tests

---
 .../tests/basic/oracle/addrof.res.oracle      |  22 +
 .../tests/basic/oracle/assignment1.res.oracle |  15 +
 .../tests/basic/oracle/assignment2.res.oracle |  20 +
 .../tests/basic/oracle/assignment3.res.oracle |  14 +
 .../tests/basic/oracle/assignment4.res.oracle |  23 +
 .../tests/basic/oracle/assignment5.res.oracle |  23 +
 .../alias/tests/basic/oracle/cast1.res.oracle |  15 +
 .../basic/oracle/conditional1.res.oracle      |  14 +
 .../basic/oracle/conditional2.res.oracle      |  20 +
 .../basic/oracle/conditional3.res.oracle      |  34 ++
 .../tests/basic/oracle/function1.res.oracle   |  32 ++
 .../tests/basic/oracle/function2.res.oracle   | 137 ++++++
 .../tests/basic/oracle/function3.res.oracle   |  30 ++
 .../tests/basic/oracle/function4.res.oracle   |  19 +
 .../tests/basic/oracle/function5.res.oracle   |  23 +
 .../tests/basic/oracle/function6.res.oracle   |  24 +
 .../tests/basic/oracle/globctr.res.oracle     |  15 +
 .../alias/tests/basic/oracle/loop.res.oracle  |  19 +
 .../tests/basic/oracle/steensgaard.res.oracle |  24 +
 .../tests/basic/oracle/switch1.res.oracle     |  17 +
 .../tests/basic/oracle/switch2.res.oracle     |  19 +
 .../tests/basic/oracle/while_for1.res.oracle  | 125 +++++
 .../tests/basic/oracle/while_for2.res.oracle  |  11 +
 .../tests/basic/oracle/while_for3.res.oracle  |  14 +
 .../fixed_bugs/oracle/empty_nodes.res.oracle  |  21 +
 .../fixed_bugs/oracle/gzip124.res.oracle      |  15 +
 .../tests/fixed_bugs/oracle/origin.res.oracle |  11 +
 .../fixed_bugs/oracle/origin_simpl.res.oracle |   7 +
 .../tests/fixed_bugs/oracle/semver.res.oracle |  10 +
 .../tests/fixed_bugs/oracle/tkn-2.res.oracle  |   9 +
 .../fixed_bugs/oracle/union_vmap.res.oracle   |  24 +
 .../tests/offsets/oracle/array1.res.oracle    |  17 +
 .../tests/offsets/oracle/array2.res.oracle    |  14 +
 .../tests/offsets/oracle/array3.res.oracle    | 129 +++++
 .../tests/offsets/oracle/collapse1.res.oracle |  14 +
 .../tests/offsets/oracle/collapse2.res.oracle |  12 +
 .../tests/offsets/oracle/collapse3.res.oracle |  12 +
 .../tests/offsets/oracle/nested1.res.oracle   | 187 ++++++++
 .../tests/offsets/oracle/nested2.res.oracle   | 151 ++++++
 .../offsets/oracle/structure1.res.oracle      |  20 +
 .../offsets/oracle/structure2.res.oracle      |  17 +
 .../offsets/oracle/structure3.res.oracle      |  29 ++
 .../offsets/oracle/structure4.res.oracle      | 134 ++++++
 .../offsets/oracle/structure5.res.oracle      | 153 ++++++
 .../real_world/oracle/example1.res.oracle     | 434 +++++++++++++++++
 .../real_world/oracle/example2.res.oracle     | 454 ++++++++++++++++++
 .../real_world/oracle/function1_v2.res.oracle | 137 ++++++
 src/plugins/alias/tests/test_config           |   2 +-
 48 files changed, 2721 insertions(+), 1 deletion(-)

diff --git a/src/plugins/alias/tests/basic/oracle/addrof.res.oracle b/src/plugins/alias/tests/basic/oracle/addrof.res.oracle
index c721b21001c..c2b1c63088a 100644
--- a/src/plugins/alias/tests/basic/oracle/addrof.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/addrof.res.oracle
@@ -2,16 +2,38 @@
 [alias] analysing function: main
 [alias] analysing instruction: a = & x;
 [alias] May-aliases after instruction  a = & x;  are  { *a; x }
+[alias] May-alias graph after instruction  a = & x;  is
+  0:{ a } → 1:{ x }   1:{ x } → 3:{  }
 [alias] analysing instruction: b = & y;
 [alias] May-aliases after instruction  b = & y;  are  { *a; x }  { *b; y }
+[alias] May-alias graph after instruction  b = & y;  is
+  0:{ a } → 1:{ x }   1:{ x } → 3:{  }   5:{ b } → 6:{ y }
+  6:{ y } → 8:{  }
 [alias] analysing instruction: y = & z;
 [alias] May-aliases after instruction  y = & z;  are
   { *a; x }  { *b; y }  { *(*b); *y; z }
+[alias] May-alias graph after instruction  y = & z;  is
+  0:{ a } → 1:{ x }   1:{ x } → 3:{  }   5:{ b } → 6:{ y }
+  6:{ y } → 8:{ z }   8:{ z } → 11:{  }
 [alias] analysing instruction: *y = x;
 [alias] May-aliases after instruction  *y = x;  are
   { *(*b); *a; *y; x }  { *b; a; y }
+[alias] May-alias graph after instruction  *y = x;  is
+  0:{ a } → 8:{ *y; x }   5:{ b } → 6:{ y }   6:{ y } → 8:{ *y; x }
+  8:{ *y; x } → 3:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are
   { *b; a; y }  { *(*b); *a; *y; x; z }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a } → 1:{ *y; x; z }   1:{ *y; x; z } → 3:{  }
+  5:{ b } → 6:{ y }   6:{ y } → 1:{ *y; x; z }
 [alias] May-aliases at the end of function main:
   { *b; a; y }  { *(*b); *a; *y; x; z }
+[alias] May-alias graph at the end of function main:
+  0:{ a } → 1:{ *y; x; z }   1:{ *y; x; z } → 3:{  }
+  5:{ b } → 6:{ y }   6:{ y } → 1:{ *y; x; z }
+[alias] Summary of function main:
+  formals: 
+  locals: a→{ *y; x; z }  b→{ y }  y→{ *y; x; z }  x  z  p  __retres
+  returns: __retres    state: { *b; a; y }  { *(*b); *a; *y; x; z }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/assignment1.res.oracle b/src/plugins/alias/tests/basic/oracle/assignment1.res.oracle
index 0a62f46e5b1..4c31afc87e8 100644
--- a/src/plugins/alias/tests/basic/oracle/assignment1.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/assignment1.res.oracle
@@ -2,18 +2,33 @@
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: int *d = (int *)0;
 [alias] May-aliases after instruction  int *d = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *d = (int *)0;  is    <empty>
 [alias] analysing instruction: a = b;
 [alias] May-aliases after instruction  a = b;  are  { a; b }
+[alias] May-alias graph after instruction  a = b;  is    0:{ a; b } → 1:{  }
 [alias] analysing instruction: b = c;
 [alias] May-aliases after instruction  b = c;  are  { a; b; c }
+[alias] May-alias graph after instruction  b = c;  is    0:{ a; b; c } → 1:{  }
 [alias] analysing instruction: a = d;
 [alias] May-aliases after instruction  a = d;  are  { a; b; c; d }
+[alias] May-alias graph after instruction  a = d;  is    0:{ a; b; c; d } → 1:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b; c; d }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a; b; c; d } → 1:{  }
 [alias] May-aliases at the end of function main: { a; b; c; d }
+[alias] May-alias graph at the end of function main:
+  0:{ a; b; c; d } → 1:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  c  d  __retres    returns: __retres
+  state: { a; b; c; d }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/assignment2.res.oracle b/src/plugins/alias/tests/basic/oracle/assignment2.res.oracle
index 02b7661040b..1481782c779 100644
--- a/src/plugins/alias/tests/basic/oracle/assignment2.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/assignment2.res.oracle
@@ -2,18 +2,38 @@
 [alias] analysing function: main
 [alias] analysing instruction: int **a = (int **)0;
 [alias] May-aliases after instruction  int **a = (int **)0;  are  <none>
+[alias] May-alias graph after instruction  int **a = (int **)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int **c = (int **)0;
 [alias] May-aliases after instruction  int **c = (int **)0;  are  <none>
+[alias] May-alias graph after instruction  int **c = (int **)0;  is    <empty>
 [alias] analysing instruction: int *d = (int *)0;
 [alias] May-aliases after instruction  int *d = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *d = (int *)0;  is    <empty>
 [alias] analysing instruction: *a = b;
 [alias] May-aliases after instruction  *a = b;  are  { *a; b }
+[alias] May-alias graph after instruction  *a = b;  is
+  0:{ a } → 1:{ *a; b }   1:{ *a; b } → 3:{  }
 [alias] analysing instruction: *c = d;
 [alias] May-aliases after instruction  *c = d;  are  { *a; b }  { *c; d }
+[alias] May-alias graph after instruction  *c = d;  is
+  0:{ a } → 1:{ *a; b }   1:{ *a; b } → 3:{  }   4:{ c } → 5:{ *c; d }
+  5:{ *c; d } → 7:{  }
 [alias] analysing instruction: a = c;
 [alias] May-aliases after instruction  a = c;  are  { a; c }  { *a; *c; b; d }
+[alias] May-alias graph after instruction  a = c;  is
+  0:{ a; c } → 1:{ *a; *c; b; d }   1:{ *a; *c; b; d } → 3:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; c }  { *a; *c; b; d }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a; c } → 1:{ *a; *c; b; d }   1:{ *a; *c; b; d } → 3:{  }
 [alias] May-aliases at the end of function main: { a; c }  { *a; *c; b; d }
+[alias] May-alias graph at the end of function main:
+  0:{ a; c } → 1:{ *a; *c; b; d }   1:{ *a; *c; b; d } → 3:{  }
+[alias] Summary of function main:
+  formals: 
+  locals: a→{ *a; *c; b; d }  b  c→{ *a; *c; b; d }  d  __retres
+  returns: __retres    state: { a; c }  { *a; *c; b; d }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/assignment3.res.oracle b/src/plugins/alias/tests/basic/oracle/assignment3.res.oracle
index 38afe15b985..1a83b4c75ed 100644
--- a/src/plugins/alias/tests/basic/oracle/assignment3.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/assignment3.res.oracle
@@ -2,14 +2,28 @@
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int b = 0;
 [alias] May-aliases after instruction  int b = 0;  are  <none>
+[alias] May-alias graph after instruction  int b = 0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: a = & b;
 [alias] May-aliases after instruction  a = & b;  are  <none>
+[alias] May-alias graph after instruction  a = & b;  is    0:{ a } → 1:{ b }
 [alias] analysing instruction: c = & b;
 [alias] May-aliases after instruction  c = & b;  are  { a; c }
+[alias] May-alias graph after instruction  c = & b;  is
+  0:{ a } → 5:{ b }   4:{ c } → 5:{ b }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; c }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a } → 5:{ b }   4:{ c } → 5:{ b }
 [alias] May-aliases at the end of function main: { a; c }
+[alias] May-alias graph at the end of function main:
+  0:{ a } → 5:{ b }   4:{ c } → 5:{ b }
+[alias] Summary of function main:
+  formals:     locals: a→{ b }  b  c→{ b }  __retres
+  returns: __retres    state: { a; c }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/assignment4.res.oracle b/src/plugins/alias/tests/basic/oracle/assignment4.res.oracle
index 8d9d3556197..e526142c5b4 100644
--- a/src/plugins/alias/tests/basic/oracle/assignment4.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/assignment4.res.oracle
@@ -2,18 +2,41 @@
 [alias] analysing function: main
 [alias] analysing instruction: int **a = (int **)0;
 [alias] May-aliases after instruction  int **a = (int **)0;  are  <none>
+[alias] May-alias graph after instruction  int **a = (int **)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int **c = (int **)0;
 [alias] May-aliases after instruction  int **c = (int **)0;  are  <none>
+[alias] May-alias graph after instruction  int **c = (int **)0;  is    <empty>
 [alias] analysing instruction: int *d = (int *)0;
 [alias] May-aliases after instruction  int *d = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *d = (int *)0;  is    <empty>
 [alias] analysing instruction: *a = b;
 [alias] May-aliases after instruction  *a = b;  are  { *a; b }
+[alias] May-alias graph after instruction  *a = b;  is
+  0:{ a } → 1:{ *a; b }   1:{ *a; b } → 3:{  }
 [alias] analysing instruction: *c = d;
 [alias] May-aliases after instruction  *c = d;  are  { *a; b }  { *c; d }
+[alias] May-alias graph after instruction  *c = d;  is
+  0:{ a } → 1:{ *a; b }   1:{ *a; b } → 3:{  }   4:{ c } → 5:{ *c; d }
+  5:{ *c; d } → 7:{  }
 [alias] analysing instruction: b = d;
 [alias] May-aliases after instruction  b = d;  are  { a; c }  { *a; *c; b; d }
+[alias] May-alias graph after instruction  b = d;  is
+  0:{ a } → 1:{ *a; *c; b; d }   1:{ *a; *c; b; d } → 3:{  }
+  4:{ c } → 1:{ *a; *c; b; d }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; c }  { *a; *c; b; d }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a } → 1:{ *a; *c; b; d }   1:{ *a; *c; b; d } → 3:{  }
+  4:{ c } → 1:{ *a; *c; b; d }
 [alias] May-aliases at the end of function main: { a; c }  { *a; *c; b; d }
+[alias] May-alias graph at the end of function main:
+  0:{ a } → 1:{ *a; *c; b; d }   1:{ *a; *c; b; d } → 3:{  }
+  4:{ c } → 1:{ *a; *c; b; d }
+[alias] Summary of function main:
+  formals: 
+  locals: a→{ *a; *c; b; d }  b  c→{ *a; *c; b; d }  d  __retres
+  returns: __retres    state: { a; c }  { *a; *c; b; d }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/assignment5.res.oracle b/src/plugins/alias/tests/basic/oracle/assignment5.res.oracle
index 023e852d039..dbf7dc9fa16 100644
--- a/src/plugins/alias/tests/basic/oracle/assignment5.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/assignment5.res.oracle
@@ -2,20 +2,43 @@
 [alias] analysing function: main
 [alias] analysing instruction: int ***a = (int ***)0;
 [alias] May-aliases after instruction  int ***a = (int ***)0;  are  <none>
+[alias] May-alias graph after instruction  int ***a = (int ***)0;  is    <empty>
 [alias] analysing instruction: int **b = (int **)0;
 [alias] May-aliases after instruction  int **b = (int **)0;  are  <none>
+[alias] May-alias graph after instruction  int **b = (int **)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: int *d = (int *)0;
 [alias] May-aliases after instruction  int *d = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *d = (int *)0;  is    <empty>
 [alias] analysing instruction: *a = b;
 [alias] May-aliases after instruction  *a = b;  are  { *a; b }
+[alias] May-alias graph after instruction  *a = b;  is
+  0:{ a } → 1:{ *a; b }   1:{ *a; b } → 3:{  }
 [alias] analysing instruction: *b = c;
 [alias] May-aliases after instruction  *b = c;  are  { *a; b }  { *(*a); *b; c }
+[alias] May-alias graph after instruction  *b = c;  is
+  0:{ a } → 1:{ *a; b }   1:{ *a; b } → 3:{ *b; c }
+  3:{ *b; c } → 5:{  }
 [alias] analysing instruction: d = *(*a);
 [alias] May-aliases after instruction  d = *(*a);  are
   { *a; b }  { *(*a); *b; c; d }
+[alias] May-alias graph after instruction  d = *(*a);  is
+  0:{ a } → 1:{ *a; b }   1:{ *a; b } → 6:{ *(*a); *b; c; d }
+  6:{ *(*a); *b; c; d } → 7:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are
   { *a; b }  { *(*a); *b; c; d }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a } → 1:{ *a; b }   1:{ *a; b } → 6:{ *(*a); *b; c; d }
+  6:{ *(*a); *b; c; d } → 7:{  }
 [alias] May-aliases at the end of function main: { *a; b }  { *(*a); *b; c; d }
+[alias] May-alias graph at the end of function main:
+  0:{ a } → 1:{ *a; b }   1:{ *a; b } → 6:{ *(*a); *b; c; d }
+  6:{ *(*a); *b; c; d } → 7:{  }
+[alias] Summary of function main:
+  formals: 
+  locals: a→{ *a; b }  b→{ *(*a); *b; c; d }  c  d  __retres
+  returns: __retres    state: { *a; b }  { *(*a); *b; c; d }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/cast1.res.oracle b/src/plugins/alias/tests/basic/oracle/cast1.res.oracle
index 8a1dd1b9c58..2ff8f37ad86 100644
--- a/src/plugins/alias/tests/basic/oracle/cast1.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/cast1.res.oracle
@@ -2,18 +2,33 @@
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: float *c = (float *)0;
 [alias] May-aliases after instruction  float *c = (float *)0;  are  <none>
+[alias] May-alias graph after instruction  float *c = (float *)0;  is    <empty>
 [alias] analysing instruction: float *d = (float *)0;
 [alias] May-aliases after instruction  float *d = (float *)0;  are  <none>
+[alias] May-alias graph after instruction  float *d = (float *)0;  is    <empty>
 [alias] analysing instruction: a = (int *)c;
 [alias:unsafe-cast] cast1.c:10: Warning: unsafe cast from float * to int *
 [alias] May-aliases after instruction  a = (int *)c;  are  { a; c }
+[alias] May-alias graph after instruction  a = (int *)c;  is    0:{ a; c } → 1:{  }
 [alias] analysing instruction: d = (float *)b;
 [alias:unsafe-cast] cast1.c:11: Warning: unsafe cast from int * to float *
 [alias] May-aliases after instruction  d = (float *)b;  are  { a; c }  { b; d }
+[alias] May-alias graph after instruction  d = (float *)b;  is
+  0:{ a; c } → 1:{  }   4:{ b; d } → 5:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; c }  { b; d }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a; c } → 1:{  }   4:{ b; d } → 5:{  }
 [alias] May-aliases at the end of function main: { a; c }  { b; d }
+[alias] May-alias graph at the end of function main:
+  0:{ a; c } → 1:{  }   4:{ b; d } → 5:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  c  d  __retres    returns: __retres
+  state: { a; c }  { b; d }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/conditional1.res.oracle b/src/plugins/alias/tests/basic/oracle/conditional1.res.oracle
index 878ffd6070b..ede3b2e36f8 100644
--- a/src/plugins/alias/tests/basic/oracle/conditional1.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/conditional1.res.oracle
@@ -2,16 +2,30 @@
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: a = b;
 [alias] May-aliases after instruction  a = b;  are  { a; b }
+[alias] May-alias graph after instruction  a = b;  is    0:{ a; b } → 1:{  }
 [alias] analysing instruction: a = c;
 [alias] May-aliases after instruction  a = c;  are  { a; c }
+[alias] May-alias graph after instruction  a = c;  is    4:{ a; c } → 5:{  }
 [alias] analysing instruction: *a = 4;
 [alias] May-aliases after instruction  *a = 4;  are  { a; b; c }
+[alias] May-alias graph after instruction  *a = 4;  is    0:{ a; b; c } → 1:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b; c }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a; b; c } → 1:{  }
 [alias] May-aliases at the end of function main: { a; b; c }
+[alias] May-alias graph at the end of function main:
+  0:{ a; b; c } → 1:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  c  __retres    returns: __retres
+  state: { a; b; c }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/conditional2.res.oracle b/src/plugins/alias/tests/basic/oracle/conditional2.res.oracle
index 74a6ebea0fc..e89a21d4d30 100644
--- a/src/plugins/alias/tests/basic/oracle/conditional2.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/conditional2.res.oracle
@@ -2,18 +2,38 @@
 [alias] analysing function: main
 [alias] analysing instruction: b = & c;
 [alias] May-aliases after instruction  b = & c;  are  { *b; c }
+[alias] May-alias graph after instruction  b = & c;  is
+  0:{ b } → 1:{ c }   1:{ c } → 3:{  }
 [alias] analysing instruction: c = & d;
 [alias] May-aliases after instruction  c = & d;  are  { *b; c }  { *(*b); *c; d }
+[alias] May-alias graph after instruction  c = & d;  is
+  0:{ b } → 1:{ c }   1:{ c } → 3:{ d }   3:{ d } → 6:{  }
 [alias] analysing instruction: d = & e;
 [alias] May-aliases after instruction  d = & e;  are  { *b; c }  { *(*b); *c; d }
+[alias] May-alias graph after instruction  d = & e;  is
+  0:{ b } → 1:{ c }   1:{ c } → 3:{ d }   3:{ d } → 6:{ e }
 [alias] analysing instruction: a = b;
 [alias] May-aliases after instruction  a = b;  are
   { *a; *b; c }  { *(*a); *(*b); *c; d }  { a; b }
+[alias] May-alias graph after instruction  a = b;  is
+  3:{ d } → 6:{ e }   10:{ a; b } → 11:{ c }   11:{ c } → 3:{ d }
 [alias] analysing instruction: a = & c;
 [alias] May-aliases after instruction  a = & c;  are
   { *a; *b; c }  { *(*a); *(*b); *c; d }  { a; b }
+[alias] May-alias graph after instruction  a = & c;  is
+  0:{ b } → 13:{ c }   3:{ d } → 6:{ e }   12:{ a } → 13:{ c }
+  13:{ c } → 3:{ d }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are
   { *a; *b; c }  { *(*a); *(*b); *c; d }  { a; b }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  3:{ d } → 6:{ e }   10:{ a; b } → 11:{ c }   11:{ c } → 3:{ d }
 [alias] May-aliases at the end of function main:
   { *a; *b; c }  { *(*a); *(*b); *c; d }  { a; b }
+[alias] May-alias graph at the end of function main:
+  3:{ d } → 6:{ e }   10:{ a; b } → 11:{ c }   11:{ c } → 3:{ d }
+[alias] Summary of function main:
+  formals: 
+  locals: a→{ c }  b→{ c }  c→{ d }  d→{ e }  e  __retres
+  returns: __retres    state: { *a; *b; c }  { *(*a); *(*b); *c; d }  { a; b }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/conditional3.res.oracle b/src/plugins/alias/tests/basic/oracle/conditional3.res.oracle
index d91937c0431..8cc6d480f52 100644
--- a/src/plugins/alias/tests/basic/oracle/conditional3.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/conditional3.res.oracle
@@ -2,34 +2,68 @@
 [alias] analysing function: main
 [alias] analysing instruction: a = b;
 [alias] May-aliases after instruction  a = b;  are  { a; b }
+[alias] May-alias graph after instruction  a = b;  is    0:{ a; b } → 1:{  }
 [alias] analysing instruction: b = & i;
 [alias] May-aliases after instruction  b = & i;  are  { a; b }  { *a; *b; i }
+[alias] May-alias graph after instruction  b = & i;  is
+  0:{ a; b } → 1:{ i }   1:{ i } → 5:{  }
 [alias] analysing instruction: i = & x;
 [alias] May-aliases after instruction  i = & x;  are
   { a; b }  { *a; *b; i }  { *(*a); *(*b); *i; x }
+[alias] May-alias graph after instruction  i = & x;  is
+  0:{ a; b } → 1:{ i }   1:{ i } → 5:{ x }   5:{ x } → 8:{  }
 [alias] analysing instruction: x = & t;
 [alias] May-aliases after instruction  x = & t;  are
   { a; b }  { *a; *b; i }  { *(*a); *(*b); *i; x }
   { *(*(*a)); *(*(*b)); *(*i); *x; t }
+[alias] May-alias graph after instruction  x = & t;  is
+  0:{ a; b } → 1:{ i }   1:{ i } → 5:{ x }   5:{ x } → 8:{ t }
+  8:{ t } → 11:{  }
 [alias] analysing instruction: a = c;
 [alias] May-aliases after instruction  a = c;  are  { a; c }
+[alias] May-alias graph after instruction  a = c;  is    13:{ a; c } → 14:{  }
 [alias] analysing instruction: c = & j;
 [alias] May-aliases after instruction  c = & j;  are  { a; c }  { *a; *c; j }
+[alias] May-alias graph after instruction  c = & j;  is
+  13:{ a; c } → 14:{ j }   14:{ j } → 18:{  }
 [alias] analysing instruction: j = & y;
 [alias] May-aliases after instruction  j = & y;  are
   { a; c }  { *a; *c; j }  { *(*a); *(*c); *j; y }
+[alias] May-alias graph after instruction  j = & y;  is
+  13:{ a; c } → 14:{ j }   14:{ j } → 18:{ y }   18:{ y } → 21:{  }
 [alias] analysing instruction: y = & u;
 [alias] May-aliases after instruction  y = & u;  are
   { a; c }  { *a; *c; j }  { *(*a); *(*c); *j; y }
   { *(*(*a)); *(*(*c)); *(*j); *y; u }
+[alias] May-alias graph after instruction  y = & u;  is
+  13:{ a; c } → 14:{ j }   14:{ j } → 18:{ y }   18:{ y } → 21:{ u }
+  21:{ u } → 24:{  }
 [alias] analysing instruction: p = 0;
 [alias] May-aliases after instruction  p = 0;  are
   { a; b; c }  { *a; *b; *c; i; j }  { *(*a); *(*b); *(*c); *i; *j; x; y }
   { *(*(*a)); *(*(*b)); *(*(*c)); *(*i); *(*j); *x; *y; t; u }
+[alias] May-alias graph after instruction  p = 0;  is
+  0:{ a; b; c } → 1:{ i; j }   1:{ i; j } → 5:{ x; y }
+  5:{ x; y } → 8:{ t; u }   8:{ t; u } → 11:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are
   { a; b; c }  { *a; *b; *c; i; j }  { *(*a); *(*b); *(*c); *i; *j; x; y }
   { *(*(*a)); *(*(*b)); *(*(*c)); *(*i); *(*j); *x; *y; t; u }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a; b; c } → 1:{ i; j }   1:{ i; j } → 5:{ x; y }
+  5:{ x; y } → 8:{ t; u }   8:{ t; u } → 11:{  }
 [alias] May-aliases at the end of function main:
   { a; b; c }  { *a; *b; *c; i; j }  { *(*a); *(*b); *(*c); *i; *j; x; y }
   { *(*(*a)); *(*(*b)); *(*(*c)); *(*i); *(*j); *x; *y; t; u }
+[alias] May-alias graph at the end of function main:
+  0:{ a; b; c } → 1:{ i; j }   1:{ i; j } → 5:{ x; y }
+  5:{ x; y } → 8:{ t; u }   8:{ t; u } → 11:{  }
+[alias] Summary of function main:
+  formals: 
+  locals: a→{ i; j }  b→{ i; j }  c→{ i; j }  i→{ x; y }  j→{ x; y }
+           x→{ t; u }  y→{ t; u }  t  u  p  __retres
+  returns: __retres
+  state: { a; b; c }  { *a; *b; *c; i; j }
+         { *(*a); *(*b); *(*c); *i; *j; x; y }
+         { *(*(*a)); *(*(*b)); *(*(*c)); *(*i); *(*j); *x; *y; t; u }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/function1.res.oracle b/src/plugins/alias/tests/basic/oracle/function1.res.oracle
index d97b433f717..53a681adaf7 100644
--- a/src/plugins/alias/tests/basic/oracle/function1.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/function1.res.oracle
@@ -2,30 +2,62 @@
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: int *d = (int *)0;
 [alias] May-aliases after instruction  int *d = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *d = (int *)0;  is    <empty>
 [alias] analysing instruction: swap(a,b);
 [alias] analysing function: swap
 [alias] analysing instruction: int *z = (int *)0;
 [alias] May-aliases after instruction  int *z = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *z = (int *)0;  is    <empty>
 [alias] analysing instruction: z = x;
 [alias] May-aliases after instruction  z = x;  are  { x; z }
+[alias] May-alias graph after instruction  z = x;  is    0:{ x; z } → 1:{  }
 [alias] analysing instruction: x = y;
 [alias] May-aliases after instruction  x = y;  are  { x; y; z }
+[alias] May-alias graph after instruction  x = y;  is    0:{ x; y; z } → 1:{  }
 [alias] analysing instruction: y = z;
 [alias] May-aliases after instruction  y = z;  are  { x; y; z }
+[alias] May-alias graph after instruction  y = z;  is    0:{ x; y; z } → 1:{  }
 [alias] May-aliases at the end of function swap: { x; y; z }
+[alias] May-alias graph at the end of function swap:
+  0:{ x; y; z } → 1:{  }
+[alias] Summary of function swap:
+  formals: x  y    locals: z    returns: <none>    state: { x; y; z }
 [alias] May-aliases after instruction  swap(a,b);  are  { a; b }
+[alias] May-alias graph after instruction  swap(a,b);  is
+  8:{ a } → 7:{  }   10:{ b } → 7:{  }
 [alias] analysing instruction: swap(c,d);
 [alias] May-aliases after instruction  swap(c,d);  are  { a; b }  { c; d }
+[alias] May-alias graph after instruction  swap(c,d);  is
+  8:{ a } → 7:{  }   10:{ b } → 7:{  }   14:{ c } → 13:{  }
+  16:{ d } → 13:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b }  { c; d }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  8:{ a } → 7:{  }   10:{ b } → 7:{  }   14:{ c } → 13:{  }
+  16:{ d } → 13:{  }
 [alias] May-aliases at the end of function main: { a; b }  { c; d }
+[alias] May-alias graph at the end of function main:
+  8:{ a } → 7:{  }   10:{ b } → 7:{  }   14:{ c } → 13:{  }
+  16:{ d } → 13:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  c  d  __retres    returns: __retres
+  state: { a; b }  { c; d }
 [alias] analysing function: swap
 [alias] analysing instruction: int *z = (int *)0;
 [alias] May-aliases after instruction  int *z = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *z = (int *)0;  is    <empty>
 [alias] May-aliases at the end of function swap: { x; y; z }
+[alias] May-alias graph at the end of function swap:
+  0:{ x; y; z } → 1:{  }
+[alias] Summary of function swap:
+  formals: x  y    locals: z    returns: <none>    state: { x; y; z }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/function2.res.oracle b/src/plugins/alias/tests/basic/oracle/function2.res.oracle
index 1e4decb3e43..bf75d622971 100644
--- a/src/plugins/alias/tests/basic/oracle/function2.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/function2.res.oracle
@@ -1,136 +1,273 @@
 [kernel] Parsing function2.c (with preprocessing)
 [alias] analysing function: _Exit
 [alias] May-aliases at the end of function _Exit: ⊥
+[alias] May-alias graph at the end of function _Exit:
+  ⊥
 [alias] analysing function: abort
 [alias] May-aliases at the end of function abort: ⊥
+[alias] May-alias graph at the end of function abort:
+  ⊥
 [alias] analysing function: abs
 [alias] May-aliases at the end of function abs: ⊥
+[alias] May-alias graph at the end of function abs:
+  ⊥
 [alias] analysing function: at_quick_exit
 [alias] May-aliases at the end of function at_quick_exit: ⊥
+[alias] May-alias graph at the end of function at_quick_exit:
+  ⊥
 [alias] analysing function: atexit
 [alias] May-aliases at the end of function atexit: ⊥
+[alias] May-alias graph at the end of function atexit:
+  ⊥
 [alias] analysing function: atof
 [alias] May-aliases at the end of function atof: ⊥
+[alias] May-alias graph at the end of function atof:
+  ⊥
 [alias] analysing function: atoi
 [alias] May-aliases at the end of function atoi: ⊥
+[alias] May-alias graph at the end of function atoi:
+  ⊥
 [alias] analysing function: atol
 [alias] May-aliases at the end of function atol: ⊥
+[alias] May-alias graph at the end of function atol:
+  ⊥
 [alias] analysing function: atoll
 [alias] May-aliases at the end of function atoll: ⊥
+[alias] May-alias graph at the end of function atoll:
+  ⊥
 [alias] analysing function: bsearch
 [alias] May-aliases at the end of function bsearch: ⊥
+[alias] May-alias graph at the end of function bsearch:
+  ⊥
 [alias] analysing function: calloc
 [alias] May-aliases at the end of function calloc: ⊥
+[alias] May-alias graph at the end of function calloc:
+  ⊥
 [alias] analysing function: div
 [alias] May-aliases at the end of function div: ⊥
+[alias] May-alias graph at the end of function div:
+  ⊥
 [alias] analysing function: drand48
 [alias] May-aliases at the end of function drand48: ⊥
+[alias] May-alias graph at the end of function drand48:
+  ⊥
 [alias] analysing function: erand48
 [alias] May-aliases at the end of function erand48: ⊥
+[alias] May-alias graph at the end of function erand48:
+  ⊥
 [alias] analysing function: exit
 [alias] May-aliases at the end of function exit: ⊥
+[alias] May-alias graph at the end of function exit:
+  ⊥
 [alias] analysing function: free
 [alias] May-aliases at the end of function free: ⊥
+[alias] May-alias graph at the end of function free:
+  ⊥
 [alias] analysing function: getenv
 [alias] May-aliases at the end of function getenv: ⊥
+[alias] May-alias graph at the end of function getenv:
+  ⊥
 [alias] analysing function: jrand48
 [alias] May-aliases at the end of function jrand48: ⊥
+[alias] May-alias graph at the end of function jrand48:
+  ⊥
 [alias] analysing function: labs
 [alias] May-aliases at the end of function labs: ⊥
+[alias] May-alias graph at the end of function labs:
+  ⊥
 [alias] analysing function: lcong48
 [alias] May-aliases at the end of function lcong48: ⊥
+[alias] May-alias graph at the end of function lcong48:
+  ⊥
 [alias] analysing function: ldiv
 [alias] May-aliases at the end of function ldiv: ⊥
+[alias] May-alias graph at the end of function ldiv:
+  ⊥
 [alias] analysing function: llabs
 [alias] May-aliases at the end of function llabs: ⊥
+[alias] May-alias graph at the end of function llabs:
+  ⊥
 [alias] analysing function: lldiv
 [alias] May-aliases at the end of function lldiv: ⊥
+[alias] May-alias graph at the end of function lldiv:
+  ⊥
 [alias] analysing function: lrand48
 [alias] May-aliases at the end of function lrand48: ⊥
+[alias] May-alias graph at the end of function lrand48:
+  ⊥
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: a = my_malloc(2);
 [alias] analysing function: my_malloc
 [alias] analysing instruction: int *res = (int *)0;
 [alias] May-aliases after instruction  int *res = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *res = (int *)0;  is    <empty>
 [alias] analysing instruction: res = (int *)malloc((size_t)size);
 [alias] May-aliases after instruction  res = (int *)malloc((size_t)size);  are
   <none>
+[alias] May-alias graph after instruction  res = (int *)malloc((size_t)size);  is
+  0:{ res } → 1:{  }
 [alias] May-aliases at the end of function my_malloc: <none>
+[alias] May-alias graph at the end of function my_malloc:
+  0:{ res } → 1:{  }
+[alias] Summary of function my_malloc:
+  formals: size    locals: res    returns: res    state: <none>
 [alias] May-aliases after instruction  a = my_malloc(2);  are  <none>
+[alias] May-alias graph after instruction  a = my_malloc(2);  is
+  4:{ a } → 3:{  }
 [alias] analysing instruction: b = my_malloc(3);
 [alias] May-aliases after instruction  b = my_malloc(3);  are  <none>
+[alias] May-alias graph after instruction  b = my_malloc(3);  is
+  4:{ a } → 3:{  }   8:{ b } → 7:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is
+  4:{ a } → 3:{  }   8:{ b } → 7:{  }
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  4:{ a } → 3:{  }   8:{ b } → 7:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  __retres    returns: __retres    state: <none>
 [alias] analysing function: malloc
 [alias] May-aliases at the end of function malloc: ⊥
+[alias] May-alias graph at the end of function malloc:
+  ⊥
 [alias] analysing function: mblen
 [alias] May-aliases at the end of function mblen: ⊥
+[alias] May-alias graph at the end of function mblen:
+  ⊥
 [alias] analysing function: mbstowcs
 [alias] May-aliases at the end of function mbstowcs: ⊥
+[alias] May-alias graph at the end of function mbstowcs:
+  ⊥
 [alias] analysing function: mbtowc
 [alias] May-aliases at the end of function mbtowc: ⊥
+[alias] May-alias graph at the end of function mbtowc:
+  ⊥
 [alias] analysing function: mkstemp
 [alias] May-aliases at the end of function mkstemp: ⊥
+[alias] May-alias graph at the end of function mkstemp:
+  ⊥
 [alias] analysing function: mkstemps
 [alias] May-aliases at the end of function mkstemps: ⊥
+[alias] May-alias graph at the end of function mkstemps:
+  ⊥
 [alias] analysing function: mrand48
 [alias] May-aliases at the end of function mrand48: ⊥
+[alias] May-alias graph at the end of function mrand48:
+  ⊥
 [alias] analysing function: my_malloc
 [alias] analysing instruction: int *res = (int *)0;
 [alias] May-aliases after instruction  int *res = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *res = (int *)0;  is    <empty>
 [alias] May-aliases at the end of function my_malloc: <none>
+[alias] May-alias graph at the end of function my_malloc:
+  0:{ res } → 1:{  }
+[alias] Summary of function my_malloc:
+  formals: size    locals: res    returns: res    state: <none>
 [alias] analysing function: nrand48
 [alias] May-aliases at the end of function nrand48: ⊥
+[alias] May-alias graph at the end of function nrand48:
+  ⊥
 [alias] analysing function: posix_memalign
 [alias] May-aliases at the end of function posix_memalign: ⊥
+[alias] May-alias graph at the end of function posix_memalign:
+  ⊥
 [alias] analysing function: putenv
 [alias] May-aliases at the end of function putenv: ⊥
+[alias] May-alias graph at the end of function putenv:
+  ⊥
 [alias] analysing function: qsort
 [alias] May-aliases at the end of function qsort: ⊥
+[alias] May-alias graph at the end of function qsort:
+  ⊥
 [alias] analysing function: quick_exit
 [alias] May-aliases at the end of function quick_exit: ⊥
+[alias] May-alias graph at the end of function quick_exit:
+  ⊥
 [alias] analysing function: rand
 [alias] May-aliases at the end of function rand: ⊥
+[alias] May-alias graph at the end of function rand:
+  ⊥
 [alias] analysing function: random
 [alias] May-aliases at the end of function random: ⊥
+[alias] May-alias graph at the end of function random:
+  ⊥
 [alias] analysing function: realloc
 [alias] May-aliases at the end of function realloc: ⊥
+[alias] May-alias graph at the end of function realloc:
+  ⊥
 [alias] analysing function: reallocarray
 [alias] May-aliases at the end of function reallocarray: ⊥
+[alias] May-alias graph at the end of function reallocarray:
+  ⊥
 [alias] analysing function: seed48
 [alias] May-aliases at the end of function seed48: ⊥
+[alias] May-alias graph at the end of function seed48:
+  ⊥
 [alias] analysing function: setenv
 [alias] May-aliases at the end of function setenv: ⊥
+[alias] May-alias graph at the end of function setenv:
+  ⊥
 [alias] analysing function: srand
 [alias] May-aliases at the end of function srand: ⊥
+[alias] May-alias graph at the end of function srand:
+  ⊥
 [alias] analysing function: srand48
 [alias] May-aliases at the end of function srand48: ⊥
+[alias] May-alias graph at the end of function srand48:
+  ⊥
 [alias] analysing function: srandom
 [alias] May-aliases at the end of function srandom: ⊥
+[alias] May-alias graph at the end of function srandom:
+  ⊥
 [alias] analysing function: strtod
 [alias] May-aliases at the end of function strtod: ⊥
+[alias] May-alias graph at the end of function strtod:
+  ⊥
 [alias] analysing function: strtof
 [alias] May-aliases at the end of function strtof: ⊥
+[alias] May-alias graph at the end of function strtof:
+  ⊥
 [alias] analysing function: strtol
 [alias] May-aliases at the end of function strtol: ⊥
+[alias] May-alias graph at the end of function strtol:
+  ⊥
 [alias] analysing function: strtold
 [alias] May-aliases at the end of function strtold: ⊥
+[alias] May-alias graph at the end of function strtold:
+  ⊥
 [alias] analysing function: strtoll
 [alias] May-aliases at the end of function strtoll: ⊥
+[alias] May-alias graph at the end of function strtoll:
+  ⊥
 [alias] analysing function: strtoul
 [alias] May-aliases at the end of function strtoul: ⊥
+[alias] May-alias graph at the end of function strtoul:
+  ⊥
 [alias] analysing function: strtoull
 [alias] May-aliases at the end of function strtoull: ⊥
+[alias] May-alias graph at the end of function strtoull:
+  ⊥
 [alias] analysing function: system
 [alias] May-aliases at the end of function system: ⊥
+[alias] May-alias graph at the end of function system:
+  ⊥
 [alias] analysing function: unsetenv
 [alias] May-aliases at the end of function unsetenv: ⊥
+[alias] May-alias graph at the end of function unsetenv:
+  ⊥
 [alias] analysing function: wcstombs
 [alias] May-aliases at the end of function wcstombs: ⊥
+[alias] May-alias graph at the end of function wcstombs:
+  ⊥
 [alias] analysing function: wctomb
 [alias] May-aliases at the end of function wctomb: ⊥
+[alias] May-alias graph at the end of function wctomb:
+  ⊥
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/function3.res.oracle b/src/plugins/alias/tests/basic/oracle/function3.res.oracle
index b45284aa949..4acd7896168 100644
--- a/src/plugins/alias/tests/basic/oracle/function3.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/function3.res.oracle
@@ -2,26 +2,56 @@
 [alias] analysing function: f1
 [alias] analysing instruction: int *tmp = x;
 [alias] May-aliases after instruction  int *tmp = x;  are  { x; tmp }
+[alias] May-alias graph after instruction  int *tmp = x;  is
+  0:{ x; tmp } → 1:{  }
 [alias] analysing instruction: x = y;
 [alias] May-aliases after instruction  x = y;  are  { x; y; tmp }
+[alias] May-alias graph after instruction  x = y;  is    0:{ x; y; tmp } → 1:{  }
 [alias] analysing instruction: y = tmp;
 [alias] May-aliases after instruction  y = tmp;  are  { x; y; tmp }
+[alias] May-alias graph after instruction  y = tmp;  is    0:{ x; y; tmp } → 1:{  }
 [alias] analysing instruction: __retres = (void *)0;
 [alias] May-aliases after instruction  __retres = (void *)0;  are  { x; y; tmp }
+[alias] May-alias graph after instruction  __retres = (void *)0;  is
+  0:{ x; y; tmp } → 1:{  }
 [alias] May-aliases at the end of function f1: { x; y; tmp }
+[alias] May-alias graph at the end of function f1:
+  0:{ x; y; tmp } → 1:{  }
+[alias] Summary of function f1:
+  formals: x  y    locals: tmp  __retres    returns: __retres
+  state: { x; y; tmp }
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: int *d = (int *)0;
 [alias] May-aliases after instruction  int *d = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *d = (int *)0;  is    <empty>
 [alias] analysing instruction: f1(a,b);
 [alias] May-aliases after instruction  f1(a,b);  are  { a; b }
+[alias] May-alias graph after instruction  f1(a,b);  is
+  16:{ a } → 9:{  }   18:{ b } → 9:{  }
 [alias] analysing instruction: f1(c,d);
 [alias] May-aliases after instruction  f1(c,d);  are  { a; b }  { c; d }
+[alias] May-alias graph after instruction  f1(c,d);  is
+  16:{ a } → 9:{  }   18:{ b } → 9:{  }   28:{ c } → 21:{  }
+  30:{ d } → 21:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b }  { c; d }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  16:{ a } → 9:{  }   18:{ b } → 9:{  }   28:{ c } → 21:{  }
+  30:{ d } → 21:{  }
 [alias] May-aliases at the end of function main: { a; b }  { c; d }
+[alias] May-alias graph at the end of function main:
+  16:{ a } → 9:{  }   18:{ b } → 9:{  }   28:{ c } → 21:{  }
+  30:{ d } → 21:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  c  d  __retres    returns: __retres
+  state: { a; b }  { c; d }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/function4.res.oracle b/src/plugins/alias/tests/basic/oracle/function4.res.oracle
index fb629f9683c..8dbe90ab465 100644
--- a/src/plugins/alias/tests/basic/oracle/function4.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/function4.res.oracle
@@ -1,17 +1,36 @@
 [kernel] Parsing function4.c (with preprocessing)
 [alias] analysing function: addr
 [alias] May-aliases at the end of function addr: <none>
+[alias] May-alias graph at the end of function addr:
+  <empty>
+[alias] Summary of function addr:
+  formals: x    locals:     returns: x    state: <none>
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int c = 0;
 [alias] May-aliases after instruction  int c = 0;  are  <none>
+[alias] May-alias graph after instruction  int c = 0;  is    <empty>
 [alias] analysing instruction: a = addr(& c);
 [alias] May-aliases after instruction  a = addr(& c);  are  <none>
+[alias] May-alias graph after instruction  a = addr(& c);  is
+  4:{ a } → 3:{ c }   7:{  } → 3:{ c }
 [alias] analysing instruction: b = & c;
 [alias] May-aliases after instruction  b = & c;  are  { a; b }
+[alias] May-alias graph after instruction  b = & c;  is
+  4:{ a } → 9:{ c }   7:{  } → 9:{ c }   8:{ b } → 9:{ c }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  4:{ a } → 9:{ c }   7:{  } → 9:{ c }   8:{ b } → 9:{ c }
 [alias] May-aliases at the end of function main: { a; b }
+[alias] May-alias graph at the end of function main:
+  4:{ a } → 9:{ c }   7:{  } → 9:{ c }   8:{ b } → 9:{ c }
+[alias] Summary of function main:
+  formals:     locals: a→{ c }  b→{ c }  c  __retres
+  returns: __retres    state: { a; b }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/function5.res.oracle b/src/plugins/alias/tests/basic/oracle/function5.res.oracle
index 53362c373d1..c7d33151e1a 100644
--- a/src/plugins/alias/tests/basic/oracle/function5.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/function5.res.oracle
@@ -2,20 +2,43 @@
 [alias] analysing function: choice
 [alias] analysing instruction: int c = 0;
 [alias] May-aliases after instruction  int c = 0;  are  <none>
+[alias] May-alias graph after instruction  int c = 0;  is    <empty>
 [alias] analysing instruction: __retres = x;
 [alias] May-aliases after instruction  __retres = x;  are  { x; __retres }
+[alias] May-alias graph after instruction  __retres = x;  is
+  0:{ x; __retres } → 1:{  }
 [alias] analysing instruction: __retres = y;
 [alias] May-aliases after instruction  __retres = y;  are  { y; __retres }
+[alias] May-alias graph after instruction  __retres = y;  is
+  4:{ y; __retres } → 5:{  }
 [alias] May-aliases at the end of function choice: { x; y; __retres }
+[alias] May-alias graph at the end of function choice:
+  0:{ x; y; __retres } → 1:{  }
+[alias] Summary of function choice:
+  formals: x  y    locals: c  __retres    returns: __retres
+  state: { x; y; __retres }
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: c = choice(a,b);
 [alias] May-aliases after instruction  c = choice(a,b);  are  { a; b; c }
+[alias] May-alias graph after instruction  c = choice(a,b);  is
+  10:{ c } → 9:{  }   12:{ a } → 9:{  }   14:{ b } → 9:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b; c }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  10:{ c } → 9:{  }   12:{ a } → 9:{  }   14:{ b } → 9:{  }
 [alias] May-aliases at the end of function main: { a; b; c }
+[alias] May-alias graph at the end of function main:
+  10:{ c } → 9:{  }   12:{ a } → 9:{  }   14:{ b } → 9:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  c  __retres    returns: __retres
+  state: { a; b; c }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/function6.res.oracle b/src/plugins/alias/tests/basic/oracle/function6.res.oracle
index 4d8f8fa4a01..74f1dd62b95 100644
--- a/src/plugins/alias/tests/basic/oracle/function6.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/function6.res.oracle
@@ -2,30 +2,54 @@
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: int *d = (int *)0;
 [alias] May-aliases after instruction  int *d = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *d = (int *)0;  is    <empty>
 [alias] analysing instruction: swap(a,b);
 [alias] analysing function: swap
 [alias] analysing instruction: int z = 0;
 [alias] May-aliases after instruction  int z = 0;  are  <none>
+[alias] May-alias graph after instruction  int z = 0;  is    <empty>
 [alias] analysing instruction: z = *x;
 [alias] May-aliases after instruction  z = *x;  are  <none>
+[alias] May-alias graph after instruction  z = *x;  is    <empty>
 [alias] analysing instruction: *x = *y;
 [alias] May-aliases after instruction  *x = *y;  are  <none>
+[alias] May-alias graph after instruction  *x = *y;  is    <empty>
 [alias] analysing instruction: *y = z;
 [alias] May-aliases after instruction  *y = z;  are  <none>
+[alias] May-alias graph after instruction  *y = z;  is    <empty>
 [alias] May-aliases at the end of function swap: <none>
+[alias] May-alias graph at the end of function swap:
+  <empty>
+[alias] Summary of function swap:
 [alias] May-aliases after instruction  swap(a,b);  are  <none>
+[alias] May-alias graph after instruction  swap(a,b);  is    <empty>
 [alias] analysing instruction: swap(c,d);
 [alias] May-aliases after instruction  swap(c,d);  are  <none>
+[alias] May-alias graph after instruction  swap(c,d);  is    <empty>
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is    <empty>
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  <empty>
+[alias] Summary of function main:
+  formals:     locals: a  b  c  d  __retres    returns: __retres
+  state: <none>
 [alias] analysing function: swap
 [alias] analysing instruction: int z = 0;
 [alias] May-aliases after instruction  int z = 0;  are  <none>
+[alias] May-alias graph after instruction  int z = 0;  is    <empty>
 [alias] May-aliases at the end of function swap: <none>
+[alias] May-alias graph at the end of function swap:
+  <empty>
+[alias] Summary of function swap:
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/globctr.res.oracle b/src/plugins/alias/tests/basic/oracle/globctr.res.oracle
index 64f2826db29..e5df545b132 100644
--- a/src/plugins/alias/tests/basic/oracle/globctr.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/globctr.res.oracle
@@ -2,18 +2,33 @@
 [alias] analysing function: f
 [alias] analysing instruction: int y = 0;
 [alias] May-aliases after instruction  int y = 0;  are  <none>
+[alias] May-alias graph after instruction  int y = 0;  is    <empty>
 [alias] analysing instruction: *x = y;
 [alias] May-aliases after instruction  *x = y;  are  <none>
+[alias] May-alias graph after instruction  *x = y;  is    <empty>
 [alias] May-aliases at the end of function f: <none>
+[alias] May-alias graph at the end of function f:
+  <empty>
+[alias] Summary of function f:
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: f(a);
 [alias] May-aliases after instruction  f(a);  are  <none>
+[alias] May-alias graph after instruction  f(a);  is    <empty>
 [alias] analysing instruction: f(b);
 [alias] May-aliases after instruction  f(b);  are  <none>
+[alias] May-alias graph after instruction  f(b);  is    <empty>
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is    <empty>
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  <empty>
+[alias] Summary of function main:
+  formals:     locals: a  b  __retres    returns: __retres    state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/loop.res.oracle b/src/plugins/alias/tests/basic/oracle/loop.res.oracle
index 9ef827f6daf..3bc56d48778 100644
--- a/src/plugins/alias/tests/basic/oracle/loop.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/loop.res.oracle
@@ -2,18 +2,37 @@
 [alias] analysing function: main
 [alias] analysing instruction: int l[1] = {0};
 [alias] May-aliases after instruction  int l[1] = {0};  are  <none>
+[alias] May-alias graph after instruction  int l[1] = {0};  is    <empty>
 [alias] analysing instruction: int *n_0 = & l[1];
 [alias] May-aliases after instruction  int *n_0 = & l[1];  are  <none>
+[alias] May-alias graph after instruction  int *n_0 = & l[1];  is
+  0:{ n_0 } → 1:{ l[0..] }
 [alias] analysing instruction: n_0 = & l[1] + 0;
 [alias] May-aliases after instruction  n_0 = & l[1] + 0;  are  <none>
+[alias] May-alias graph after instruction  n_0 = & l[1] + 0;  is
+  0:{ n_0 } → 1:{ l[0..] }
 [alias] analysing instruction: int w = 0;
 [alias] May-aliases after instruction  int w = 0;  are  <none>
+[alias] May-alias graph after instruction  int w = 0;  is
+  0:{ n_0 } → 1:{ l[0..] }
 [alias] analysing instruction: l[0] = *(& l[1] + 0);
 [alias] May-aliases after instruction  l[0] = *(& l[1] + 0);  are  <none>
+[alias] May-alias graph after instruction  l[0] = *(& l[1] + 0);  is
+  0:{ n_0 } → 1:{ l[0..] }
 [alias] analysing instruction: int l[1] = {0};
 [alias] May-aliases after instruction  int l[1] = {0};  are  <none>
+[alias] May-alias graph after instruction  int l[1] = {0};  is
+  0:{ n_0 } → 1:{ l[0..] }
 [alias] analysing instruction: int *n_0 = & l[1];
 [alias] May-aliases after instruction  int *n_0 = & l[1];  are  <none>
+[alias] May-alias graph after instruction  int *n_0 = & l[1];  is
+  0:{ n_0 } → 1:{ l[0..] }
 [alias:no-return] loop.c:4: Warning: 
   function main does not return; analysis may be unsound
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  <empty>
+[alias] Summary of function main:
+  formals:     locals: l  n_0  w  __retres    returns: __retres
+  state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/steensgaard.res.oracle b/src/plugins/alias/tests/basic/oracle/steensgaard.res.oracle
index fdb1f8f1ce3..fd9b99fe183 100644
--- a/src/plugins/alias/tests/basic/oracle/steensgaard.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/steensgaard.res.oracle
@@ -2,16 +2,40 @@
 [alias] analysing function: main
 [alias] analysing instruction: a = & x;
 [alias] May-aliases after instruction  a = & x;  are  <none>
+[alias] May-alias graph after instruction  a = & x;  is    0:{ a } → 1:{ x }
 [alias] analysing instruction: b = & y;
 [alias] May-aliases after instruction  b = & y;  are  { *b; y }
+[alias] May-alias graph after instruction  b = & y;  is
+  0:{ a } → 1:{ x }   4:{ b } → 5:{ y }   5:{ y } → 7:{  }
 [alias] analysing instruction: y = & z;
 [alias] May-aliases after instruction  y = & z;  are  { *b; y }
+[alias] May-alias graph after instruction  y = & z;  is
+  0:{ a } → 1:{ x }   4:{ b } → 5:{ y }   5:{ y } → 7:{ z }
 [alias] analysing instruction: y = & x;
 [alias] May-aliases after instruction  y = & x;  are  { *b; a; y }
+[alias] May-alias graph after instruction  y = & x;  is
+  0:{ a } → 7:{ x }   4:{ b } → 5:{ y }   5:{ y } → 7:{ x }
 [alias] analysing instruction: c = & y;
 [alias] May-aliases after instruction  c = & y;  are  { *b; *c; a; y }  { b; c }
+[alias] May-alias graph after instruction  c = & y;  is
+  0:{ a } → 1:{ x; z }   4:{ b } → 13:{ y }   12:{ c } → 13:{ y }
+  13:{ y } → 1:{ x; z }
 [alias] analysing instruction: *y = 4;
 [alias] May-aliases after instruction  *y = 4;  are  { *b; *c; a; y }  { b; c }
+[alias] May-alias graph after instruction  *y = 4;  is
+  0:{ a } → 1:{ x; z }   4:{ b } → 13:{ y }   12:{ c } → 13:{ y }
+  13:{ y } → 1:{ x; z }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { *b; *c; a; y }  { b; c }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a } → 1:{ x; z }   4:{ b } → 13:{ y }   12:{ c } → 13:{ y }
+  13:{ y } → 1:{ x; z }
 [alias] May-aliases at the end of function main: { *b; *c; a; y }  { b; c }
+[alias] May-alias graph at the end of function main:
+  0:{ a } → 1:{ x; z }   4:{ b } → 13:{ y }   12:{ c } → 13:{ y }
+  13:{ y } → 1:{ x; z }
+[alias] Summary of function main:
+  formals: 
+  locals: a→{ x; z }  b→{ y }  c→{ y }  y→{ x; z }  x  z  p  __retres
+  returns: __retres    state: { *b; *c; a; y }  { b; c }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/switch1.res.oracle b/src/plugins/alias/tests/basic/oracle/switch1.res.oracle
index 1d3c1881fa9..5d4e7565c29 100644
--- a/src/plugins/alias/tests/basic/oracle/switch1.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/switch1.res.oracle
@@ -2,18 +2,35 @@
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: int *d = (int *)0;
 [alias] May-aliases after instruction  int *d = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *d = (int *)0;  is    <empty>
 [alias] analysing instruction: int e = 0;
 [alias] May-aliases after instruction  int e = 0;  are  <none>
+[alias] May-alias graph after instruction  int e = 0;  is    <empty>
 [alias] analysing instruction: case 1: a = d;
 [alias] May-aliases after instruction  case 1: a = d;  are  { a; d }
+[alias] May-alias graph after instruction  case 1: a = d;  is
+  0:{ a; d } → 1:{  }
 [alias] analysing instruction: case 2: b = d;
 [alias] May-aliases after instruction  case 2: b = d;  are  { b; d }
+[alias] May-alias graph after instruction  case 2: b = d;  is
+  4:{ b; d } → 5:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b; d }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a; b; d } → 1:{  }
 [alias] May-aliases at the end of function main: { a; b; d }
+[alias] May-alias graph at the end of function main:
+  0:{ a; b; d } → 1:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  c  d  e  __retres    returns: __retres
+  state: { a; b; d }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/switch2.res.oracle b/src/plugins/alias/tests/basic/oracle/switch2.res.oracle
index 8097b1a0db5..35c8cb7b5d7 100644
--- a/src/plugins/alias/tests/basic/oracle/switch2.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/switch2.res.oracle
@@ -2,20 +2,39 @@
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: int *d = (int *)0;
 [alias] May-aliases after instruction  int *d = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *d = (int *)0;  is    <empty>
 [alias] analysing instruction: int e = 0;
 [alias] May-aliases after instruction  int e = 0;  are  <none>
+[alias] May-alias graph after instruction  int e = 0;  is    <empty>
 [alias] analysing instruction: case 1: a = d;
 [alias] May-aliases after instruction  case 1: a = d;  are  { a; d }
+[alias] May-alias graph after instruction  case 1: a = d;  is
+  0:{ a; d } → 1:{  }
 [alias] analysing instruction: case 2: b = d;
 [alias] May-aliases after instruction  case 2: b = d;  are  { b; d }
+[alias] May-alias graph after instruction  case 2: b = d;  is
+  4:{ b; d } → 5:{  }
 [alias] analysing instruction: default: c = d;
 [alias] May-aliases after instruction  default: c = d;  are  { c; d }
+[alias] May-alias graph after instruction  default: c = d;  is
+  8:{ c; d } → 9:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b; c; d }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ a; b; c; d } → 1:{  }
 [alias] May-aliases at the end of function main: { a; b; c; d }
+[alias] May-alias graph at the end of function main:
+  0:{ a; b; c; d } → 1:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  c  d  e  __retres    returns: __retres
+  state: { a; b; c; d }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/while_for1.res.oracle b/src/plugins/alias/tests/basic/oracle/while_for1.res.oracle
index 228274eef6f..b79b50e7195 100644
--- a/src/plugins/alias/tests/basic/oracle/while_for1.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/while_for1.res.oracle
@@ -1,127 +1,252 @@
 [kernel] Parsing while_for1.c (with preprocessing)
 [alias] analysing function: _Exit
 [alias] May-aliases at the end of function _Exit: ⊥
+[alias] May-alias graph at the end of function _Exit:
+  ⊥
 [alias] analysing function: abort
 [alias] May-aliases at the end of function abort: ⊥
+[alias] May-alias graph at the end of function abort:
+  ⊥
 [alias] analysing function: abs
 [alias] May-aliases at the end of function abs: ⊥
+[alias] May-alias graph at the end of function abs:
+  ⊥
 [alias] analysing function: at_quick_exit
 [alias] May-aliases at the end of function at_quick_exit: ⊥
+[alias] May-alias graph at the end of function at_quick_exit:
+  ⊥
 [alias] analysing function: atexit
 [alias] May-aliases at the end of function atexit: ⊥
+[alias] May-alias graph at the end of function atexit:
+  ⊥
 [alias] analysing function: atof
 [alias] May-aliases at the end of function atof: ⊥
+[alias] May-alias graph at the end of function atof:
+  ⊥
 [alias] analysing function: atoi
 [alias] May-aliases at the end of function atoi: ⊥
+[alias] May-alias graph at the end of function atoi:
+  ⊥
 [alias] analysing function: atol
 [alias] May-aliases at the end of function atol: ⊥
+[alias] May-alias graph at the end of function atol:
+  ⊥
 [alias] analysing function: atoll
 [alias] May-aliases at the end of function atoll: ⊥
+[alias] May-alias graph at the end of function atoll:
+  ⊥
 [alias] analysing function: bsearch
 [alias] May-aliases at the end of function bsearch: ⊥
+[alias] May-alias graph at the end of function bsearch:
+  ⊥
 [alias] analysing function: calloc
 [alias] May-aliases at the end of function calloc: ⊥
+[alias] May-alias graph at the end of function calloc:
+  ⊥
 [alias] analysing function: div
 [alias] May-aliases at the end of function div: ⊥
+[alias] May-alias graph at the end of function div:
+  ⊥
 [alias] analysing function: drand48
 [alias] May-aliases at the end of function drand48: ⊥
+[alias] May-alias graph at the end of function drand48:
+  ⊥
 [alias] analysing function: erand48
 [alias] May-aliases at the end of function erand48: ⊥
+[alias] May-alias graph at the end of function erand48:
+  ⊥
 [alias] analysing function: exit
 [alias] May-aliases at the end of function exit: ⊥
+[alias] May-alias graph at the end of function exit:
+  ⊥
 [alias] analysing function: free
 [alias] May-aliases at the end of function free: ⊥
+[alias] May-alias graph at the end of function free:
+  ⊥
 [alias] analysing function: getenv
 [alias] May-aliases at the end of function getenv: ⊥
+[alias] May-alias graph at the end of function getenv:
+  ⊥
 [alias] analysing function: jrand48
 [alias] May-aliases at the end of function jrand48: ⊥
+[alias] May-alias graph at the end of function jrand48:
+  ⊥
 [alias] analysing function: labs
 [alias] May-aliases at the end of function labs: ⊥
+[alias] May-alias graph at the end of function labs:
+  ⊥
 [alias] analysing function: lcong48
 [alias] May-aliases at the end of function lcong48: ⊥
+[alias] May-alias graph at the end of function lcong48:
+  ⊥
 [alias] analysing function: ldiv
 [alias] May-aliases at the end of function ldiv: ⊥
+[alias] May-alias graph at the end of function ldiv:
+  ⊥
 [alias] analysing function: llabs
 [alias] May-aliases at the end of function llabs: ⊥
+[alias] May-alias graph at the end of function llabs:
+  ⊥
 [alias] analysing function: lldiv
 [alias] May-aliases at the end of function lldiv: ⊥
+[alias] May-alias graph at the end of function lldiv:
+  ⊥
 [alias] analysing function: lrand48
 [alias] May-aliases at the end of function lrand48: ⊥
+[alias] May-alias graph at the end of function lrand48:
+  ⊥
 [alias] analysing function: main
 [alias] analysing instruction: int *s = (int *)0;
 [alias] May-aliases after instruction  int *s = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *s = (int *)0;  is    <empty>
 [alias] analysing instruction: int idx = 0;
 [alias] May-aliases after instruction  int idx = 0;  are  <none>
+[alias] May-alias graph after instruction  int idx = 0;  is    <empty>
 [alias] analysing instruction: s = (int *)malloc((size_t)idx);
 [alias] May-aliases after instruction  s = (int *)malloc((size_t)idx);  are  <none>
+[alias] May-alias graph after instruction  s = (int *)malloc((size_t)idx);  is
+  0:{ s } → 1:{  }
 [alias] analysing instruction: idx ++;
 [alias] May-aliases after instruction  idx ++;  are  <none>
+[alias] May-alias graph after instruction  idx ++;  is    0:{ s } → 1:{  }
 [alias] analysing instruction: s = (int *)malloc((size_t)idx);
 [alias] May-aliases after instruction  s = (int *)malloc((size_t)idx);  are  <none>
+[alias] May-alias graph after instruction  s = (int *)malloc((size_t)idx);  is
+  0:{ s } → 1:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is    0:{ s } → 1:{  }
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  0:{ s } → 1:{  }
+[alias] Summary of function main:
+  formals:     locals: s  idx  __retres    returns: __retres    state: <none>
 [alias] analysing function: malloc
 [alias] May-aliases at the end of function malloc: ⊥
+[alias] May-alias graph at the end of function malloc:
+  ⊥
 [alias] analysing function: mblen
 [alias] May-aliases at the end of function mblen: ⊥
+[alias] May-alias graph at the end of function mblen:
+  ⊥
 [alias] analysing function: mbstowcs
 [alias] May-aliases at the end of function mbstowcs: ⊥
+[alias] May-alias graph at the end of function mbstowcs:
+  ⊥
 [alias] analysing function: mbtowc
 [alias] May-aliases at the end of function mbtowc: ⊥
+[alias] May-alias graph at the end of function mbtowc:
+  ⊥
 [alias] analysing function: mkstemp
 [alias] May-aliases at the end of function mkstemp: ⊥
+[alias] May-alias graph at the end of function mkstemp:
+  ⊥
 [alias] analysing function: mkstemps
 [alias] May-aliases at the end of function mkstemps: ⊥
+[alias] May-alias graph at the end of function mkstemps:
+  ⊥
 [alias] analysing function: mrand48
 [alias] May-aliases at the end of function mrand48: ⊥
+[alias] May-alias graph at the end of function mrand48:
+  ⊥
 [alias] analysing function: nrand48
 [alias] May-aliases at the end of function nrand48: ⊥
+[alias] May-alias graph at the end of function nrand48:
+  ⊥
 [alias] analysing function: posix_memalign
 [alias] May-aliases at the end of function posix_memalign: ⊥
+[alias] May-alias graph at the end of function posix_memalign:
+  ⊥
 [alias] analysing function: putenv
 [alias] May-aliases at the end of function putenv: ⊥
+[alias] May-alias graph at the end of function putenv:
+  ⊥
 [alias] analysing function: qsort
 [alias] May-aliases at the end of function qsort: ⊥
+[alias] May-alias graph at the end of function qsort:
+  ⊥
 [alias] analysing function: quick_exit
 [alias] May-aliases at the end of function quick_exit: ⊥
+[alias] May-alias graph at the end of function quick_exit:
+  ⊥
 [alias] analysing function: rand
 [alias] May-aliases at the end of function rand: ⊥
+[alias] May-alias graph at the end of function rand:
+  ⊥
 [alias] analysing function: random
 [alias] May-aliases at the end of function random: ⊥
+[alias] May-alias graph at the end of function random:
+  ⊥
 [alias] analysing function: realloc
 [alias] May-aliases at the end of function realloc: ⊥
+[alias] May-alias graph at the end of function realloc:
+  ⊥
 [alias] analysing function: reallocarray
 [alias] May-aliases at the end of function reallocarray: ⊥
+[alias] May-alias graph at the end of function reallocarray:
+  ⊥
 [alias] analysing function: seed48
 [alias] May-aliases at the end of function seed48: ⊥
+[alias] May-alias graph at the end of function seed48:
+  ⊥
 [alias] analysing function: setenv
 [alias] May-aliases at the end of function setenv: ⊥
+[alias] May-alias graph at the end of function setenv:
+  ⊥
 [alias] analysing function: srand
 [alias] May-aliases at the end of function srand: ⊥
+[alias] May-alias graph at the end of function srand:
+  ⊥
 [alias] analysing function: srand48
 [alias] May-aliases at the end of function srand48: ⊥
+[alias] May-alias graph at the end of function srand48:
+  ⊥
 [alias] analysing function: srandom
 [alias] May-aliases at the end of function srandom: ⊥
+[alias] May-alias graph at the end of function srandom:
+  ⊥
 [alias] analysing function: strtod
 [alias] May-aliases at the end of function strtod: ⊥
+[alias] May-alias graph at the end of function strtod:
+  ⊥
 [alias] analysing function: strtof
 [alias] May-aliases at the end of function strtof: ⊥
+[alias] May-alias graph at the end of function strtof:
+  ⊥
 [alias] analysing function: strtol
 [alias] May-aliases at the end of function strtol: ⊥
+[alias] May-alias graph at the end of function strtol:
+  ⊥
 [alias] analysing function: strtold
 [alias] May-aliases at the end of function strtold: ⊥
+[alias] May-alias graph at the end of function strtold:
+  ⊥
 [alias] analysing function: strtoll
 [alias] May-aliases at the end of function strtoll: ⊥
+[alias] May-alias graph at the end of function strtoll:
+  ⊥
 [alias] analysing function: strtoul
 [alias] May-aliases at the end of function strtoul: ⊥
+[alias] May-alias graph at the end of function strtoul:
+  ⊥
 [alias] analysing function: strtoull
 [alias] May-aliases at the end of function strtoull: ⊥
+[alias] May-alias graph at the end of function strtoull:
+  ⊥
 [alias] analysing function: system
 [alias] May-aliases at the end of function system: ⊥
+[alias] May-alias graph at the end of function system:
+  ⊥
 [alias] analysing function: unsetenv
 [alias] May-aliases at the end of function unsetenv: ⊥
+[alias] May-alias graph at the end of function unsetenv:
+  ⊥
 [alias] analysing function: wcstombs
 [alias] May-aliases at the end of function wcstombs: ⊥
+[alias] May-alias graph at the end of function wcstombs:
+  ⊥
 [alias] analysing function: wctomb
 [alias] May-aliases at the end of function wctomb: ⊥
+[alias] May-alias graph at the end of function wctomb:
+  ⊥
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/while_for2.res.oracle b/src/plugins/alias/tests/basic/oracle/while_for2.res.oracle
index c7c4c865fea..d6cd6b220b4 100644
--- a/src/plugins/alias/tests/basic/oracle/while_for2.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/while_for2.res.oracle
@@ -2,12 +2,23 @@
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: a = b;
 [alias] May-aliases after instruction  a = b;  are  { a; b }
+[alias] May-alias graph after instruction  a = b;  is    0:{ a; b } → 1:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b }
+[alias] May-alias graph after instruction  __retres = 0;  is    0:{ a; b } → 1:{  }
 [alias] May-aliases at the end of function main: { a; b }
+[alias] May-alias graph at the end of function main:
+  0:{ a; b } → 1:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  c  __retres    returns: __retres
+  state: { a; b }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/basic/oracle/while_for3.res.oracle b/src/plugins/alias/tests/basic/oracle/while_for3.res.oracle
index 40720eb3def..24560b86f6e 100644
--- a/src/plugins/alias/tests/basic/oracle/while_for3.res.oracle
+++ b/src/plugins/alias/tests/basic/oracle/while_for3.res.oracle
@@ -2,18 +2,32 @@
 [alias] analysing function: main
 [alias] analysing instruction: int *a = (int *)0;
 [alias] May-aliases after instruction  int *a = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *a = (int *)0;  is    <empty>
 [alias] analysing instruction: int *b = (int *)0;
 [alias] May-aliases after instruction  int *b = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *b = (int *)0;  is    <empty>
 [alias] analysing instruction: int *c = (int *)0;
 [alias] May-aliases after instruction  int *c = (int *)0;  are  <none>
+[alias] May-alias graph after instruction  int *c = (int *)0;  is    <empty>
 [alias] analysing instruction: int i = 0;
 [alias] May-aliases after instruction  int i = 0;  are  <none>
+[alias] May-alias graph after instruction  int i = 0;  is    <empty>
 [alias] analysing instruction: a = b;
 [alias] May-aliases after instruction  a = b;  are  { a; b }
+[alias] May-alias graph after instruction  a = b;  is    0:{ a; b } → 1:{  }
 [alias] analysing instruction: __Cont: i ++;
 [alias] May-aliases after instruction  __Cont: i ++;  are  { a; b }
+[alias] May-alias graph after instruction  __Cont: i ++;  is    0:{ a; b } → 1:{  }
 [alias] analysing instruction: a = b;
 [alias] May-aliases after instruction  a = b;  are  { a; b }
+[alias] May-alias graph after instruction  a = b;  is    0:{ a; b } → 1:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b }
+[alias] May-alias graph after instruction  __retres = 0;  is    0:{ a; b } → 1:{  }
 [alias] May-aliases at the end of function main: { a; b }
+[alias] May-alias graph at the end of function main:
+  0:{ a; b } → 1:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  c  i  __retres    returns: __retres
+  state: { a; b }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/fixed_bugs/oracle/empty_nodes.res.oracle b/src/plugins/alias/tests/fixed_bugs/oracle/empty_nodes.res.oracle
index 3f911591f73..443ae47d142 100644
--- a/src/plugins/alias/tests/fixed_bugs/oracle/empty_nodes.res.oracle
+++ b/src/plugins/alias/tests/fixed_bugs/oracle/empty_nodes.res.oracle
@@ -2,13 +2,34 @@
 [alias] analysing function: f
 [alias] analysing instruction: *y = t + (*y - *x);
 [alias] May-aliases after instruction  *y = t + (*y - *x);  are  { *y; t }
+[alias] May-alias graph after instruction  *y = t + (*y - *x);  is
+  0:{ y } → 1:{ *y; t }   1:{ *y; t } → 3:{  }
 [alias] analysing instruction: *z = t + (*z - *x);
 [alias] May-aliases after instruction  *z = t + (*z - *x);  are
   { *y; *z; t }  { y; z }
+[alias] May-alias graph after instruction  *z = t + (*z - *x);  is
+  0:{ y } → 5:{ *y; *z; t }   4:{ z } → 5:{ *y; *z; t }
+  5:{ *y; *z; t } → 3:{  }
 [alias] analysing instruction: *x = t;
 [alias] May-aliases after instruction  *x = t;  are  { *x; *y; *z; t }  { x; y; z }
+[alias] May-alias graph after instruction  *x = t;  is
+  0:{ y } → 7:{ *x; *y; *z; t }   4:{ z } → 7:{ *x; *y; *z; t }
+  6:{ x } → 7:{ *x; *y; *z; t }   7:{ *x; *y; *z; t } → 3:{  }
 [alias] May-aliases at the end of function f: { *x; *y; *z; t }  { x; y; z }
+[alias] May-alias graph at the end of function f:
+  0:{ y } → 7:{ *x; *y; *z; t }   4:{ z } → 7:{ *x; *y; *z; t }
+  6:{ x } → 7:{ *x; *y; *z; t }   7:{ *x; *y; *z; t } → 3:{  }
+[alias] Summary of function f:
+  formals: x→{ *x; *y; *z; t }  y→{ *x; *y; *z; t }  z→{ *x; *y; *z; t }
+  locals: t    returns: <none>    state: { *x; *y; *z; t }  { x; y; z }
 [alias] analysing function: g
 [alias] analysing instruction: f(a,a,a);
 [alias] May-aliases after instruction  f(a,a,a);  are  <none>
+[alias] May-alias graph after instruction  f(a,a,a);  is
+  15:{  } → 11:{  }   16:{ a } → 15:{  }
 [alias] May-aliases at the end of function g: <none>
+[alias] May-alias graph at the end of function g:
+  15:{  } → 11:{  }   16:{ a } → 15:{  }
+[alias] Summary of function g:
+  formals: a    locals:     returns: <none>    state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/fixed_bugs/oracle/gzip124.res.oracle b/src/plugins/alias/tests/fixed_bugs/oracle/gzip124.res.oracle
index fd9878fef65..e612a89c586 100644
--- a/src/plugins/alias/tests/fixed_bugs/oracle/gzip124.res.oracle
+++ b/src/plugins/alias/tests/fixed_bugs/oracle/gzip124.res.oracle
@@ -2,14 +2,29 @@
 [alias] analysing function: main
 [alias] analysing instruction: short tmp_0 = (short)0;
 [alias] May-aliases after instruction  short tmp_0 = (short)0;  are  <none>
+[alias] May-alias graph after instruction  short tmp_0 = (short)0;  is    <empty>
 [alias] analysing instruction: *(& prev[1] + 0) = tmp_0;
 [alias] May-aliases after instruction  *(& prev[1] + 0) = tmp_0;  are  <none>
+[alias] May-alias graph after instruction  *(& prev[1] + 0) = tmp_0;  is    <empty>
 [alias] analysing instruction: prev[0] = (short)0;
 [alias] May-aliases after instruction  prev[0] = (short)0;  are  <none>
+[alias] May-alias graph after instruction  prev[0] = (short)0;  is    <empty>
 [alias] analysing instruction: p = & prev[1] + (int)*p;
 [alias] May-aliases after instruction  p = & prev[1] + (int)*p;  are  <none>
+[alias] May-alias graph after instruction  p = & prev[1] + (int)*p;  is
+  0:{ p } → 1:{ prev[0..] }
 [alias] analysing instruction: p = & prev[*p];
 [alias] May-aliases after instruction  p = & prev[*p];  are  <none>
+[alias] May-alias graph after instruction  p = & prev[*p];  is
+  4:{ p } → 5:{ prev[0..] }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ p } → 1:{ prev[0..] }
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  0:{ p } → 1:{ prev[0..] }
+[alias] Summary of function main:
+  formals:     locals: __retres  prev  p→{ prev[0..] }  tmp_0
+  returns: __retres    state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/fixed_bugs/oracle/origin.res.oracle b/src/plugins/alias/tests/fixed_bugs/oracle/origin.res.oracle
index 5804eca90b4..3b78e81856d 100644
--- a/src/plugins/alias/tests/fixed_bugs/oracle/origin.res.oracle
+++ b/src/plugins/alias/tests/fixed_bugs/oracle/origin.res.oracle
@@ -4,11 +4,22 @@
 [alias] analysing function: f
 [alias] analysing instruction: tmp = & f;
 [alias] May-aliases after instruction  tmp = & f;  are  <none>
+[alias] May-alias graph after instruction  tmp = & f;  is    0:{ tmp } → 1:{ f }
 [alias] analysing instruction: tmp = (void (*)(void))*((char *)(v.t));
 [alias:unsafe-cast] origin.c:8: Warning: unsafe cast from char to void (*)(void)
 [alias:unsafe-cast] origin.c:8: Warning: unsafe cast from int * to char *
 [alias] May-aliases after instruction  tmp = (void (*)(void))*((char *)(v.t));  are
   { v.t; tmp }
+[alias] May-alias graph after instruction  tmp = (void (*)(void))*((char *)(v.t));
+  is    0:{ v.t; tmp } → 1:{ f }
 [alias] analysing instruction: int g = (int)tmp;
 [alias] May-aliases after instruction  int g = (int)tmp;  are  { v.t; tmp }
+[alias] May-alias graph after instruction  int g = (int)tmp;  is
+  0:{ v.t; tmp } → 1:{ f }
 [alias] May-aliases at the end of function f: { v.t; tmp }
+[alias] May-alias graph at the end of function f:
+  0:{ v.t; tmp } → 1:{ f }
+[alias] Summary of function f:
+  formals:     locals: g  tmp→{ f }    returns: <none>
+  state: { v.t; tmp }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/fixed_bugs/oracle/origin_simpl.res.oracle b/src/plugins/alias/tests/fixed_bugs/oracle/origin_simpl.res.oracle
index e0e7350e8bb..cc580d0c444 100644
--- a/src/plugins/alias/tests/fixed_bugs/oracle/origin_simpl.res.oracle
+++ b/src/plugins/alias/tests/fixed_bugs/oracle/origin_simpl.res.oracle
@@ -4,4 +4,11 @@
 [alias:unsafe-cast] origin_simpl.c:9: Warning: unsafe cast from int to void *
 [alias:unsafe-cast] origin_simpl.c:9: Warning: unsafe cast from char * to int *
 [alias] May-aliases after instruction  tmp = (void *)*((int *)(t));  are  { t; tmp }
+[alias] May-alias graph after instruction  tmp = (void *)*((int *)(t));  is
+  0:{ t; tmp } → 1:{  }
 [alias] May-aliases at the end of function f: { t; tmp }
+[alias] May-alias graph at the end of function f:
+  0:{ t; tmp } → 1:{  }
+[alias] Summary of function f:
+  formals:     locals: tmp    returns: <none>    state: { t; tmp }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/fixed_bugs/oracle/semver.res.oracle b/src/plugins/alias/tests/fixed_bugs/oracle/semver.res.oracle
index bdc3f9de654..14786295a9e 100644
--- a/src/plugins/alias/tests/fixed_bugs/oracle/semver.res.oracle
+++ b/src/plugins/alias/tests/fixed_bugs/oracle/semver.res.oracle
@@ -1,12 +1,22 @@
 [kernel] Parsing semver.c (with preprocessing)
 [alias] analysing function: f
 [alias] May-aliases at the end of function f: <none>
+[alias] May-alias graph at the end of function f:
+  <empty>
+[alias] Summary of function f:
 [alias] analysing function: main
 [alias] analysing instruction: f((int *)*("1" + 2));
 [alias:unsafe-cast] semver.c:6: Warning: unsafe cast from char to int *
 [alias:unsupported:addr] semver.c:6: Warning: 
   unsupported feature: explicit pointer address: (int *)*("1" + 2); analysis may be unsound
 [alias] May-aliases after instruction  f((int *)*("1" + 2));  are  <none>
+[alias] May-alias graph after instruction  f((int *)*("1" + 2));  is    <empty>
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is    <empty>
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  <empty>
+[alias] Summary of function main:
+  formals:     locals: __retres    returns: __retres    state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/fixed_bugs/oracle/tkn-2.res.oracle b/src/plugins/alias/tests/fixed_bugs/oracle/tkn-2.res.oracle
index 7843cab1557..6718bf0c370 100644
--- a/src/plugins/alias/tests/fixed_bugs/oracle/tkn-2.res.oracle
+++ b/src/plugins/alias/tests/fixed_bugs/oracle/tkn-2.res.oracle
@@ -4,6 +4,15 @@
 [alias:unsafe-cast] tkn-2.c:6: Warning: unsafe cast from int ** to int *
 [alias] tkn-2.c:6: Warning: ignoring assignment of the form: a = (int *)(& a)
 [alias] May-aliases after instruction  a = (int *)(& a);  are  <none>
+[alias] May-alias graph after instruction  a = (int *)(& a);  is
+  0:{ a } → 1:{  }   2:{  } → 0:{ a }
 [alias] analysing instruction: __retres = *a;
 [alias] May-aliases after instruction  __retres = *a;  are  <none>
+[alias] May-alias graph after instruction  __retres = *a;  is
+  0:{ a } → 1:{  }   2:{  } → 0:{ a }
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  0:{ a } → 1:{  }   2:{  } → 0:{ a }
+[alias] Summary of function main:
+  formals:     locals: a  __retres    returns: __retres    state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/fixed_bugs/oracle/union_vmap.res.oracle b/src/plugins/alias/tests/fixed_bugs/oracle/union_vmap.res.oracle
index 7ea35d5b5b0..901bb8dd000 100644
--- a/src/plugins/alias/tests/fixed_bugs/oracle/union_vmap.res.oracle
+++ b/src/plugins/alias/tests/fixed_bugs/oracle/union_vmap.res.oracle
@@ -3,19 +3,43 @@
 [alias] analysing instruction: char *s2 = CPS_SplitWord((char *)"a");
 [alias] analysing function: CPS_SplitWord
 [alias] May-aliases at the end of function CPS_SplitWord: <none>
+[alias] May-alias graph at the end of function CPS_SplitWord:
+  <empty>
+[alias] Summary of function CPS_SplitWord:
+  formals: line    locals:     returns: line    state: <none>
 [alias:unsafe-cast] union_vmap.c:11: Warning: 
   unsafe cast from char const * to char *
 [alias] May-aliases after instruction  char *s2 = CPS_SplitWord((char *)"a");  are
   <none>
+[alias] May-alias graph after instruction  char *s2 = CPS_SplitWord((char *)"a");
+  is    4:{ s2 } → 3:{  }
 [alias] analysing instruction: char *s3 = CPS_SplitWord((char *)"b");
 [alias:unsafe-cast] union_vmap.c:12: Warning: 
   unsafe cast from char const * to char *
 [alias] May-aliases after instruction  char *s3 = CPS_SplitWord((char *)"b");  are
   <none>
+[alias] May-alias graph after instruction  char *s3 = CPS_SplitWord((char *)"b");
+  is    4:{ s2 } → 3:{  }   8:{ s3 } → 7:{  }
 [alias] analysing instruction: *key = s3;
 [alias] May-aliases after instruction  *key = s3;  are  { *key; s3 }
+[alias] May-alias graph after instruction  *key = s3;  is
+  4:{ s2 } → 3:{  }   10:{ key } → 11:{ *key; s3 }
+  11:{ *key; s3 } → 7:{  }
 [alias] analysing instruction: *key = s2;
 [alias] May-aliases after instruction  *key = s2;  are  { *key; s2 }
+[alias] May-alias graph after instruction  *key = s2;  is
+  8:{ s3 } → 7:{  }   12:{ key } → 13:{ *key; s2 }
+  13:{ *key; s2 } → 3:{  }
 [alias] May-aliases at the end of function CPS_ParseKey: { *key; s2; s3 }
+[alias] May-alias graph at the end of function CPS_ParseKey:
+  4:{ *key; s2; s3 } → 3:{  }   10:{ key } → 4:{ *key; s2; s3 }
+[alias] Summary of function CPS_ParseKey:
+  formals:     locals: key→{ *key; s2; s3 }  s2  s3    returns: <none>
+  state: { *key; s2; s3 }
 [alias] analysing function: CPS_SplitWord
 [alias] May-aliases at the end of function CPS_SplitWord: <none>
+[alias] May-alias graph at the end of function CPS_SplitWord:
+  <empty>
+[alias] Summary of function CPS_SplitWord:
+  formals: line    locals:     returns: line    state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/array1.res.oracle b/src/plugins/alias/tests/offsets/oracle/array1.res.oracle
index d49ca85c658..c821849b395 100644
--- a/src/plugins/alias/tests/offsets/oracle/array1.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/array1.res.oracle
@@ -2,16 +2,33 @@
 [alias] analysing function: main
 [alias] analysing instruction: tab[0] = 0;
 [alias] May-aliases after instruction  tab[0] = 0;  are  <none>
+[alias] May-alias graph after instruction  tab[0] = 0;  is    <empty>
 [alias] analysing instruction: tab[1] = 1;
 [alias] May-aliases after instruction  tab[1] = 1;  are  <none>
+[alias] May-alias graph after instruction  tab[1] = 1;  is    <empty>
 [alias] analysing instruction: tab[2] = tab[1] + 1;
 [alias] May-aliases after instruction  tab[2] = tab[1] + 1;  are  <none>
+[alias] May-alias graph after instruction  tab[2] = tab[1] + 1;  is    <empty>
 [alias] analysing instruction: int *x = & tab[1];
 [alias] May-aliases after instruction  int *x = & tab[1];  are  <none>
+[alias] May-alias graph after instruction  int *x = & tab[1];  is
+  0:{ x } → 1:{ tab[0..] }
 [alias] analysing instruction: int *y = & tab[2];
 [alias] May-aliases after instruction  int *y = & tab[2];  are  { x; y }
+[alias] May-alias graph after instruction  int *y = & tab[2];  is
+  0:{ x } → 5:{ tab[0..] }   4:{ y } → 5:{ tab[0..] }
 [alias] analysing instruction: tab[3] = *x + *y;
 [alias] May-aliases after instruction  tab[3] = *x + *y;  are  { x; y }
+[alias] May-alias graph after instruction  tab[3] = *x + *y;  is
+  0:{ x } → 5:{ tab[0..] }   4:{ y } → 5:{ tab[0..] }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { x; y }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ x } → 5:{ tab[0..] }   4:{ y } → 5:{ tab[0..] }
 [alias] May-aliases at the end of function main: { x; y }
+[alias] May-alias graph at the end of function main:
+  0:{ x } → 5:{ tab[0..] }   4:{ y } → 5:{ tab[0..] }
+[alias] Summary of function main:
+  formals:     locals: tab  x→{ tab[0..] }  y→{ tab[0..] }  __retres
+  returns: __retres    state: { x; y }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/array2.res.oracle b/src/plugins/alias/tests/offsets/oracle/array2.res.oracle
index 69f16a022f8..bd04a4dd06d 100644
--- a/src/plugins/alias/tests/offsets/oracle/array2.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/array2.res.oracle
@@ -2,12 +2,26 @@
 [alias] analysing function: main
 [alias] analysing instruction: mat[0][0] = 0;
 [alias] May-aliases after instruction  mat[0][0] = 0;  are  <none>
+[alias] May-alias graph after instruction  mat[0][0] = 0;  is    <empty>
 [alias] analysing instruction: mat[0][1] = 1;
 [alias] May-aliases after instruction  mat[0][1] = 1;  are  <none>
+[alias] May-alias graph after instruction  mat[0][1] = 1;  is    <empty>
 [alias] analysing instruction: *x = mat[1];
 [alias] May-aliases after instruction  *x = mat[1];  are  <none>
+[alias] May-alias graph after instruction  *x = mat[1];  is
+  0:{ x } → 1:{ *x }   1:{ *x } → 2:{ mat[0..] }
 [alias] analysing instruction: *y = *(*(x + 0));
 [alias] May-aliases after instruction  *y = *(*(x + 0));  are  <none>
+[alias] May-alias graph after instruction  *y = *(*(x + 0));  is
+  0:{ x } → 1:{ *x }   1:{ *x } → 2:{ mat[0..] }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ x } → 1:{ *x }   1:{ *x } → 2:{ mat[0..] }
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  0:{ x } → 1:{ *x }   1:{ *x } → 2:{ mat[0..] }
+[alias] Summary of function main:
+  formals:     locals: mat  x→{ *x }  y  __retres    returns: __retres
+  state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/array3.res.oracle b/src/plugins/alias/tests/offsets/oracle/array3.res.oracle
index 30544c8240a..151198ba598 100644
--- a/src/plugins/alias/tests/offsets/oracle/array3.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/array3.res.oracle
@@ -1,127 +1,256 @@
 [kernel] Parsing array3.c (with preprocessing)
 [alias] analysing function: _Exit
 [alias] May-aliases at the end of function _Exit: ⊥
+[alias] May-alias graph at the end of function _Exit:
+  ⊥
 [alias] analysing function: abort
 [alias] May-aliases at the end of function abort: ⊥
+[alias] May-alias graph at the end of function abort:
+  ⊥
 [alias] analysing function: abs
 [alias] May-aliases at the end of function abs: ⊥
+[alias] May-alias graph at the end of function abs:
+  ⊥
 [alias] analysing function: at_quick_exit
 [alias] May-aliases at the end of function at_quick_exit: ⊥
+[alias] May-alias graph at the end of function at_quick_exit:
+  ⊥
 [alias] analysing function: atexit
 [alias] May-aliases at the end of function atexit: ⊥
+[alias] May-alias graph at the end of function atexit:
+  ⊥
 [alias] analysing function: atof
 [alias] May-aliases at the end of function atof: ⊥
+[alias] May-alias graph at the end of function atof:
+  ⊥
 [alias] analysing function: atoi
 [alias] May-aliases at the end of function atoi: ⊥
+[alias] May-alias graph at the end of function atoi:
+  ⊥
 [alias] analysing function: atol
 [alias] May-aliases at the end of function atol: ⊥
+[alias] May-alias graph at the end of function atol:
+  ⊥
 [alias] analysing function: atoll
 [alias] May-aliases at the end of function atoll: ⊥
+[alias] May-alias graph at the end of function atoll:
+  ⊥
 [alias] analysing function: bsearch
 [alias] May-aliases at the end of function bsearch: ⊥
+[alias] May-alias graph at the end of function bsearch:
+  ⊥
 [alias] analysing function: calloc
 [alias] May-aliases at the end of function calloc: ⊥
+[alias] May-alias graph at the end of function calloc:
+  ⊥
 [alias] analysing function: div
 [alias] May-aliases at the end of function div: ⊥
+[alias] May-alias graph at the end of function div:
+  ⊥
 [alias] analysing function: drand48
 [alias] May-aliases at the end of function drand48: ⊥
+[alias] May-alias graph at the end of function drand48:
+  ⊥
 [alias] analysing function: erand48
 [alias] May-aliases at the end of function erand48: ⊥
+[alias] May-alias graph at the end of function erand48:
+  ⊥
 [alias] analysing function: exit
 [alias] May-aliases at the end of function exit: ⊥
+[alias] May-alias graph at the end of function exit:
+  ⊥
 [alias] analysing function: free
 [alias] May-aliases at the end of function free: ⊥
+[alias] May-alias graph at the end of function free:
+  ⊥
 [alias] analysing function: getenv
 [alias] May-aliases at the end of function getenv: ⊥
+[alias] May-alias graph at the end of function getenv:
+  ⊥
 [alias] analysing function: jrand48
 [alias] May-aliases at the end of function jrand48: ⊥
+[alias] May-alias graph at the end of function jrand48:
+  ⊥
 [alias] analysing function: labs
 [alias] May-aliases at the end of function labs: ⊥
+[alias] May-alias graph at the end of function labs:
+  ⊥
 [alias] analysing function: lcong48
 [alias] May-aliases at the end of function lcong48: ⊥
+[alias] May-alias graph at the end of function lcong48:
+  ⊥
 [alias] analysing function: ldiv
 [alias] May-aliases at the end of function ldiv: ⊥
+[alias] May-alias graph at the end of function ldiv:
+  ⊥
 [alias] analysing function: llabs
 [alias] May-aliases at the end of function llabs: ⊥
+[alias] May-alias graph at the end of function llabs:
+  ⊥
 [alias] analysing function: lldiv
 [alias] May-aliases at the end of function lldiv: ⊥
+[alias] May-alias graph at the end of function lldiv:
+  ⊥
 [alias] analysing function: lrand48
 [alias] May-aliases at the end of function lrand48: ⊥
+[alias] May-alias graph at the end of function lrand48:
+  ⊥
 [alias] analysing function: main
 [alias] analysing instruction: int *x = malloc((unsigned long)4 * sizeof(int));
 [alias] May-aliases after instruction
   int *x = malloc((unsigned long)4 * sizeof(int));  are  <none>
+[alias] May-alias graph after instruction
+  int *x = malloc((unsigned long)4 * sizeof(int));  is    0:{ x } → 1:{  }
 [alias] analysing instruction: int *y = malloc((unsigned long)4 * sizeof(int));
 [alias] May-aliases after instruction
   int *y = malloc((unsigned long)4 * sizeof(int));  are  <none>
+[alias] May-alias graph after instruction
+  int *y = malloc((unsigned long)4 * sizeof(int));  is
+  0:{ x } → 1:{  }   2:{ y } → 3:{  }
 [alias] analysing instruction: x = mat[0];
 [alias] May-aliases after instruction  x = mat[0];  are  <none>
+[alias] May-alias graph after instruction  x = mat[0];  is
+  0:{ x } → 1:{ mat[0..] }   2:{ y } → 3:{  }
 [alias] analysing instruction: y = mat[1];
 [alias] May-aliases after instruction  y = mat[1];  are  { x; y }
+[alias] May-alias graph after instruction  y = mat[1];  is
+  0:{ x } → 3:{ mat[0..] }   2:{ y } → 3:{ mat[0..] }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { x; y }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ x } → 3:{ mat[0..] }   2:{ y } → 3:{ mat[0..] }
 [alias] May-aliases at the end of function main: { x; y }
+[alias] May-alias graph at the end of function main:
+  0:{ x } → 3:{ mat[0..] }   2:{ y } → 3:{ mat[0..] }
+[alias] Summary of function main:
+  formals:     locals: mat  x→{ mat[0..] }  y→{ mat[0..] }  __retres
+  returns: __retres    state: { x; y }
 [alias] analysing function: malloc
 [alias] May-aliases at the end of function malloc: ⊥
+[alias] May-alias graph at the end of function malloc:
+  ⊥
 [alias] analysing function: mblen
 [alias] May-aliases at the end of function mblen: ⊥
+[alias] May-alias graph at the end of function mblen:
+  ⊥
 [alias] analysing function: mbstowcs
 [alias] May-aliases at the end of function mbstowcs: ⊥
+[alias] May-alias graph at the end of function mbstowcs:
+  ⊥
 [alias] analysing function: mbtowc
 [alias] May-aliases at the end of function mbtowc: ⊥
+[alias] May-alias graph at the end of function mbtowc:
+  ⊥
 [alias] analysing function: mkstemp
 [alias] May-aliases at the end of function mkstemp: ⊥
+[alias] May-alias graph at the end of function mkstemp:
+  ⊥
 [alias] analysing function: mkstemps
 [alias] May-aliases at the end of function mkstemps: ⊥
+[alias] May-alias graph at the end of function mkstemps:
+  ⊥
 [alias] analysing function: mrand48
 [alias] May-aliases at the end of function mrand48: ⊥
+[alias] May-alias graph at the end of function mrand48:
+  ⊥
 [alias] analysing function: nrand48
 [alias] May-aliases at the end of function nrand48: ⊥
+[alias] May-alias graph at the end of function nrand48:
+  ⊥
 [alias] analysing function: posix_memalign
 [alias] May-aliases at the end of function posix_memalign: ⊥
+[alias] May-alias graph at the end of function posix_memalign:
+  ⊥
 [alias] analysing function: putenv
 [alias] May-aliases at the end of function putenv: ⊥
+[alias] May-alias graph at the end of function putenv:
+  ⊥
 [alias] analysing function: qsort
 [alias] May-aliases at the end of function qsort: ⊥
+[alias] May-alias graph at the end of function qsort:
+  ⊥
 [alias] analysing function: quick_exit
 [alias] May-aliases at the end of function quick_exit: ⊥
+[alias] May-alias graph at the end of function quick_exit:
+  ⊥
 [alias] analysing function: rand
 [alias] May-aliases at the end of function rand: ⊥
+[alias] May-alias graph at the end of function rand:
+  ⊥
 [alias] analysing function: random
 [alias] May-aliases at the end of function random: ⊥
+[alias] May-alias graph at the end of function random:
+  ⊥
 [alias] analysing function: realloc
 [alias] May-aliases at the end of function realloc: ⊥
+[alias] May-alias graph at the end of function realloc:
+  ⊥
 [alias] analysing function: reallocarray
 [alias] May-aliases at the end of function reallocarray: ⊥
+[alias] May-alias graph at the end of function reallocarray:
+  ⊥
 [alias] analysing function: seed48
 [alias] May-aliases at the end of function seed48: ⊥
+[alias] May-alias graph at the end of function seed48:
+  ⊥
 [alias] analysing function: setenv
 [alias] May-aliases at the end of function setenv: ⊥
+[alias] May-alias graph at the end of function setenv:
+  ⊥
 [alias] analysing function: srand
 [alias] May-aliases at the end of function srand: ⊥
+[alias] May-alias graph at the end of function srand:
+  ⊥
 [alias] analysing function: srand48
 [alias] May-aliases at the end of function srand48: ⊥
+[alias] May-alias graph at the end of function srand48:
+  ⊥
 [alias] analysing function: srandom
 [alias] May-aliases at the end of function srandom: ⊥
+[alias] May-alias graph at the end of function srandom:
+  ⊥
 [alias] analysing function: strtod
 [alias] May-aliases at the end of function strtod: ⊥
+[alias] May-alias graph at the end of function strtod:
+  ⊥
 [alias] analysing function: strtof
 [alias] May-aliases at the end of function strtof: ⊥
+[alias] May-alias graph at the end of function strtof:
+  ⊥
 [alias] analysing function: strtol
 [alias] May-aliases at the end of function strtol: ⊥
+[alias] May-alias graph at the end of function strtol:
+  ⊥
 [alias] analysing function: strtold
 [alias] May-aliases at the end of function strtold: ⊥
+[alias] May-alias graph at the end of function strtold:
+  ⊥
 [alias] analysing function: strtoll
 [alias] May-aliases at the end of function strtoll: ⊥
+[alias] May-alias graph at the end of function strtoll:
+  ⊥
 [alias] analysing function: strtoul
 [alias] May-aliases at the end of function strtoul: ⊥
+[alias] May-alias graph at the end of function strtoul:
+  ⊥
 [alias] analysing function: strtoull
 [alias] May-aliases at the end of function strtoull: ⊥
+[alias] May-alias graph at the end of function strtoull:
+  ⊥
 [alias] analysing function: system
 [alias] May-aliases at the end of function system: ⊥
+[alias] May-alias graph at the end of function system:
+  ⊥
 [alias] analysing function: unsetenv
 [alias] May-aliases at the end of function unsetenv: ⊥
+[alias] May-alias graph at the end of function unsetenv:
+  ⊥
 [alias] analysing function: wcstombs
 [alias] May-aliases at the end of function wcstombs: ⊥
+[alias] May-alias graph at the end of function wcstombs:
+  ⊥
 [alias] analysing function: wctomb
 [alias] May-aliases at the end of function wctomb: ⊥
+[alias] May-alias graph at the end of function wctomb:
+  ⊥
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/collapse1.res.oracle b/src/plugins/alias/tests/offsets/oracle/collapse1.res.oracle
index 9b588f2f8f2..e4249a441ad 100644
--- a/src/plugins/alias/tests/offsets/oracle/collapse1.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/collapse1.res.oracle
@@ -2,18 +2,32 @@
 [alias] analysing function: main
 [alias] analysing instruction: tab[0] = 0;
 [alias] May-aliases after instruction  tab[0] = 0;  are  <none>
+[alias] May-alias graph after instruction  tab[0] = 0;  is    <empty>
 [alias] analysing instruction: tab[1] = 1;
 [alias] May-aliases after instruction  tab[1] = 1;  are  <none>
+[alias] May-alias graph after instruction  tab[1] = 1;  is    <empty>
 [alias] analysing instruction: tab[2] = tab[1] + 1;
 [alias] May-aliases after instruction  tab[2] = tab[1] + 1;  are  <none>
+[alias] May-alias graph after instruction  tab[2] = tab[1] + 1;  is    <empty>
 [alias] analysing instruction: int x = 0;
 [alias] May-aliases after instruction  int x = 0;  are  <none>
+[alias] May-alias graph after instruction  int x = 0;  is    <empty>
 [alias] analysing instruction: int i = 0;
 [alias] May-aliases after instruction  int i = 0;  are  <none>
+[alias] May-alias graph after instruction  int i = 0;  is    <empty>
 [alias] analysing instruction: x = tab[i];
 [alias] May-aliases after instruction  x = tab[i];  are  <none>
+[alias] May-alias graph after instruction  x = tab[i];  is    <empty>
 [alias] analysing instruction: i ++;
 [alias] May-aliases after instruction  i ++;  are  <none>
+[alias] May-alias graph after instruction  i ++;  is    <empty>
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is    <empty>
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  <empty>
+[alias] Summary of function main:
+  formals:     locals: tab  x  i  __retres    returns: __retres
+  state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/collapse2.res.oracle b/src/plugins/alias/tests/offsets/oracle/collapse2.res.oracle
index 34b8bd11975..07d8fde2b7c 100644
--- a/src/plugins/alias/tests/offsets/oracle/collapse2.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/collapse2.res.oracle
@@ -2,16 +2,28 @@
 [alias] analysing function: main
 [alias] analysing instruction: mat[0][0] = 0;
 [alias] May-aliases after instruction  mat[0][0] = 0;  are  <none>
+[alias] May-alias graph after instruction  mat[0][0] = 0;  is    <empty>
 [alias] analysing instruction: mat[0][1] = 1;
 [alias] May-aliases after instruction  mat[0][1] = 1;  are  <none>
+[alias] May-alias graph after instruction  mat[0][1] = 1;  is    <empty>
 [alias] analysing instruction: int i = 2;
 [alias] May-aliases after instruction  int i = 2;  are  <none>
+[alias] May-alias graph after instruction  int i = 2;  is    <empty>
 [alias] analysing instruction: mat[1][i] = i;
 [alias] May-aliases after instruction  mat[1][i] = i;  are  <none>
+[alias] May-alias graph after instruction  mat[1][i] = i;  is    <empty>
 [alias] analysing instruction: i ++;
 [alias] May-aliases after instruction  i ++;  are  <none>
+[alias] May-alias graph after instruction  i ++;  is    <empty>
 [alias] analysing instruction: mat[1][i] = 2;
 [alias] May-aliases after instruction  mat[1][i] = 2;  are  <none>
+[alias] May-alias graph after instruction  mat[1][i] = 2;  is    <empty>
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is    <empty>
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  <empty>
+[alias] Summary of function main:
+  formals:     locals: mat  i  __retres    returns: __retres    state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/collapse3.res.oracle b/src/plugins/alias/tests/offsets/oracle/collapse3.res.oracle
index 4193c3f90a2..225de1d3417 100644
--- a/src/plugins/alias/tests/offsets/oracle/collapse3.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/collapse3.res.oracle
@@ -2,16 +2,28 @@
 [alias] analysing function: main
 [alias] analysing instruction: mat[0][0] = 0;
 [alias] May-aliases after instruction  mat[0][0] = 0;  are  <none>
+[alias] May-alias graph after instruction  mat[0][0] = 0;  is    <empty>
 [alias] analysing instruction: mat[0][1] = 1;
 [alias] May-aliases after instruction  mat[0][1] = 1;  are  <none>
+[alias] May-alias graph after instruction  mat[0][1] = 1;  is    <empty>
 [alias] analysing instruction: int i = 2;
 [alias] May-aliases after instruction  int i = 2;  are  <none>
+[alias] May-alias graph after instruction  int i = 2;  is    <empty>
 [alias] analysing instruction: mat[i][1] = i;
 [alias] May-aliases after instruction  mat[i][1] = i;  are  <none>
+[alias] May-alias graph after instruction  mat[i][1] = i;  is    <empty>
 [alias] analysing instruction: i ++;
 [alias] May-aliases after instruction  i ++;  are  <none>
+[alias] May-alias graph after instruction  i ++;  is    <empty>
 [alias] analysing instruction: mat[i][1] = 2;
 [alias] May-aliases after instruction  mat[i][1] = 2;  are  <none>
+[alias] May-alias graph after instruction  mat[i][1] = 2;  is    <empty>
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is    <empty>
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  <empty>
+[alias] Summary of function main:
+  formals:     locals: mat  i  __retres    returns: __retres    state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/nested1.res.oracle b/src/plugins/alias/tests/offsets/oracle/nested1.res.oracle
index a5a58748f91..650eac343ab 100644
--- a/src/plugins/alias/tests/offsets/oracle/nested1.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/nested1.res.oracle
@@ -1,168 +1,355 @@
 [kernel] Parsing nested1.c (with preprocessing)
 [alias] analysing function: _Exit
 [alias] May-aliases at the end of function _Exit: ⊥
+[alias] May-alias graph at the end of function _Exit:
+  ⊥
 [alias] analysing function: abort
 [alias] May-aliases at the end of function abort: ⊥
+[alias] May-alias graph at the end of function abort:
+  ⊥
 [alias] analysing function: abs
 [alias] May-aliases at the end of function abs: ⊥
+[alias] May-alias graph at the end of function abs:
+  ⊥
 [alias] analysing function: at_quick_exit
 [alias] May-aliases at the end of function at_quick_exit: ⊥
+[alias] May-alias graph at the end of function at_quick_exit:
+  ⊥
 [alias] analysing function: atexit
 [alias] May-aliases at the end of function atexit: ⊥
+[alias] May-alias graph at the end of function atexit:
+  ⊥
 [alias] analysing function: atof
 [alias] May-aliases at the end of function atof: ⊥
+[alias] May-alias graph at the end of function atof:
+  ⊥
 [alias] analysing function: atoi
 [alias] May-aliases at the end of function atoi: ⊥
+[alias] May-alias graph at the end of function atoi:
+  ⊥
 [alias] analysing function: atol
 [alias] May-aliases at the end of function atol: ⊥
+[alias] May-alias graph at the end of function atol:
+  ⊥
 [alias] analysing function: atoll
 [alias] May-aliases at the end of function atoll: ⊥
+[alias] May-alias graph at the end of function atoll:
+  ⊥
 [alias] analysing function: bsearch
 [alias] May-aliases at the end of function bsearch: ⊥
+[alias] May-alias graph at the end of function bsearch:
+  ⊥
 [alias] analysing function: calloc
 [alias] May-aliases at the end of function calloc: ⊥
+[alias] May-alias graph at the end of function calloc:
+  ⊥
 [alias] analysing function: div
 [alias] May-aliases at the end of function div: ⊥
+[alias] May-alias graph at the end of function div:
+  ⊥
 [alias] analysing function: drand48
 [alias] May-aliases at the end of function drand48: ⊥
+[alias] May-alias graph at the end of function drand48:
+  ⊥
 [alias] analysing function: erand48
 [alias] May-aliases at the end of function erand48: ⊥
+[alias] May-alias graph at the end of function erand48:
+  ⊥
 [alias] analysing function: exit
 [alias] May-aliases at the end of function exit: ⊥
+[alias] May-alias graph at the end of function exit:
+  ⊥
 [alias] analysing function: free
 [alias] May-aliases at the end of function free: ⊥
+[alias] May-alias graph at the end of function free:
+  ⊥
 [alias] analysing function: getenv
 [alias] May-aliases at the end of function getenv: ⊥
+[alias] May-alias graph at the end of function getenv:
+  ⊥
 [alias] analysing function: jrand48
 [alias] May-aliases at the end of function jrand48: ⊥
+[alias] May-alias graph at the end of function jrand48:
+  ⊥
 [alias] analysing function: labs
 [alias] May-aliases at the end of function labs: ⊥
+[alias] May-alias graph at the end of function labs:
+  ⊥
 [alias] analysing function: lcong48
 [alias] May-aliases at the end of function lcong48: ⊥
+[alias] May-alias graph at the end of function lcong48:
+  ⊥
 [alias] analysing function: ldiv
 [alias] May-aliases at the end of function ldiv: ⊥
+[alias] May-alias graph at the end of function ldiv:
+  ⊥
 [alias] analysing function: llabs
 [alias] May-aliases at the end of function llabs: ⊥
+[alias] May-alias graph at the end of function llabs:
+  ⊥
 [alias] analysing function: lldiv
 [alias] May-aliases at the end of function lldiv: ⊥
+[alias] May-alias graph at the end of function lldiv:
+  ⊥
 [alias] analysing function: lrand48
 [alias] May-aliases at the end of function lrand48: ⊥
+[alias] May-alias graph at the end of function lrand48:
+  ⊥
 [alias] analysing function: main
 [alias] analysing instruction: st_1_t x1 = {.a = 0, .b = 1};
 [alias] May-aliases after instruction  st_1_t x1 = {.a = 0, .b = 1};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x1 = {.a = 0, .b = 1};  is
+  <empty>
 [alias] analysing instruction: st_1_t x2 = {.a = 1, .b = 2};
 [alias] May-aliases after instruction  st_1_t x2 = {.a = 1, .b = 2};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x2 = {.a = 1, .b = 2};  is
+  <empty>
 [alias] analysing instruction: tab_y[0] = & x1;
 [alias] May-aliases after instruction  tab_y[0] = & x1;  are  <none>
+[alias] May-alias graph after instruction  tab_y[0] = & x1;  is
+  0:{ tab_y[0..] } → 1:{ x1 }
 [alias] analysing instruction: tab_y[1] = & x2;
 [alias] May-aliases after instruction  tab_y[1] = & x2;  are  <none>
+[alias] May-alias graph after instruction  tab_y[1] = & x2;  is
+  0:{ tab_y[0..] } → 1:{ x1; x2 }
 [alias] analysing instruction: st_2_t *z1 = malloc(sizeof(st_2_t));
 [alias] May-aliases after instruction  st_2_t *z1 = malloc(sizeof(st_2_t));  are
   <none>
+[alias] May-alias graph after instruction  st_2_t *z1 = malloc(sizeof(st_2_t));
+  is    0:{ tab_y[0..] } → 1:{ x1; x2 }   5:{ z1 } → 6:{  }
 [alias] analysing instruction: st_2_t *z2 = malloc(sizeof(st_2_t));
 [alias] May-aliases after instruction  st_2_t *z2 = malloc(sizeof(st_2_t));  are
   <none>
+[alias] May-alias graph after instruction  st_2_t *z2 = malloc(sizeof(st_2_t));
+  is
+  0:{ tab_y[0..] } → 1:{ x1; x2 }   5:{ z1 } → 6:{  }   7:{ z2 } → 8:{  }
 [alias] analysing instruction: st_3_t *t = malloc(sizeof(st_3_t));
 [alias] May-aliases after instruction  st_3_t *t = malloc(sizeof(st_3_t));  are
   <none>
+[alias] May-alias graph after instruction  st_3_t *t = malloc(sizeof(st_3_t));  is
+  0:{ tab_y[0..] } → 1:{ x1; x2 }   5:{ z1 } → 6:{  }
+  7:{ z2 } → 8:{  }   9:{ t } → 10:{  }
 [alias] analysing instruction: int *a = malloc(sizeof(int));
 [alias] May-aliases after instruction  int *a = malloc(sizeof(int));  are  <none>
+[alias] May-alias graph after instruction  int *a = malloc(sizeof(int));  is
+  0:{ tab_y[0..] } → 1:{ x1; x2 }   5:{ z1 } → 6:{  }
+  7:{ z2 } → 8:{  }   9:{ t } → 10:{  }   11:{ a } → 12:{  }
 [alias] analysing instruction: int *b = malloc(sizeof(int));
 [alias] May-aliases after instruction  int *b = malloc(sizeof(int));  are  <none>
+[alias] May-alias graph after instruction  int *b = malloc(sizeof(int));  is
+  0:{ tab_y[0..] } → 1:{ x1; x2 }   5:{ z1 } → 6:{  }
+  7:{ z2 } → 8:{  }   9:{ t } → 10:{  }   11:{ a } → 12:{  }
+  13:{ b } → 14:{  }
 [alias] analysing instruction: *a = 0;
 [alias] May-aliases after instruction  *a = 0;  are  <none>
+[alias] May-alias graph after instruction  *a = 0;  is
+  0:{ tab_y[0..] } → 1:{ x1; x2 }   5:{ z1 } → 6:{  }
+  7:{ z2 } → 8:{  }   9:{ t } → 10:{  }   11:{ a } → 12:{  }
+  13:{ b } → 14:{  }
 [alias] analysing instruction: *b = 5;
 [alias] May-aliases after instruction  *b = 5;  are  <none>
+[alias] May-alias graph after instruction  *b = 5;  is
+  0:{ tab_y[0..] } → 1:{ x1; x2 }   5:{ z1 } → 6:{  }
+  7:{ z2 } → 8:{  }   9:{ t } → 10:{  }   11:{ a } → 12:{  }
+  13:{ b } → 14:{  }
 [alias] analysing instruction: z1->s = (struct struct_1_t *)tab_y[0];
 [alias:unsafe-cast] nested1.c:47: Warning: 
   unsafe cast from st_1_t * to struct struct_1_t *
 [alias] May-aliases after instruction  z1->s = (struct struct_1_t *)tab_y[0];  are
   { z1->s; tab_y[0..] }
+[alias] May-alias graph after instruction  z1->s = (struct struct_1_t *)tab_y[0];
+  is
+  5:{ z1 } → 6:{  }   7:{ z2 } → 8:{  }   9:{ t } → 10:{  }
+  11:{ a } → 12:{  }   13:{ b } → 14:{  }
+  15:{ z1->s; tab_y[0..] } → 1:{ x1; x2 }
 [alias] analysing instruction: z2->s = (struct struct_1_t *)tab_y[1];
 [alias:unsafe-cast] nested1.c:48: Warning: 
   unsafe cast from st_1_t * to struct struct_1_t *
 [alias] May-aliases after instruction  z2->s = (struct struct_1_t *)tab_y[1];  are
   { z1->s; z2->s; tab_y[0..] }
+[alias] May-alias graph after instruction  z2->s = (struct struct_1_t *)tab_y[1];
+  is
+  5:{ z1 } → 6:{  }   7:{ z2 } → 8:{  }   9:{ t } → 10:{  }
+  11:{ a } → 12:{  }   13:{ b } → 14:{  }
+  16:{ z1->s; z2->s; tab_y[0..] } → 1:{ x1; x2 }
 [alias] analysing instruction: z1->c = a;
 [alias] May-aliases after instruction  z1->c = a;  are
   { z1->s; z2->s; tab_y[0..] }  { z1->c; a }
+[alias] May-alias graph after instruction  z1->c = a;  is
+  5:{ z1 } → 6:{  }   7:{ z2 } → 8:{  }   9:{ t } → 10:{  }
+  13:{ b } → 14:{  }   16:{ z1->s; z2->s; tab_y[0..] } → 1:{ x1; x2 }
+  17:{ z1->c; a } → 12:{  }
 [alias] analysing instruction: z2->c = b;
 [alias] May-aliases after instruction  z2->c = b;  are
   { z1->s; z2->s; tab_y[0..] }  { z1->c; a }  { z2->c; b }
+[alias] May-alias graph after instruction  z2->c = b;  is
+  5:{ z1 } → 6:{  }   7:{ z2 } → 8:{  }   9:{ t } → 10:{  }
+  16:{ z1->s; z2->s; tab_y[0..] } → 1:{ x1; x2 }
+  17:{ z1->c; a } → 12:{  }   18:{ z2->c; b } → 14:{  }
 [alias] analysing instruction: t->t = (struct struct_2_t *)z1;
 [alias:unsafe-cast] nested1.c:51: Warning: 
   unsafe cast from st_2_t * to struct struct_2_t *
 [alias] May-aliases after instruction  t->t = (struct struct_2_t *)z1;  are
   { z1->s; z2->s; tab_y[0..] }  { t->t; z1 }  { z1->c; a }  { z2->c; b }
+[alias] May-alias graph after instruction  t->t = (struct struct_2_t *)z1;  is
+  7:{ z2 } → 8:{  }   9:{ t } → 10:{  }
+  16:{ z1->s; z2->s; tab_y[0..] } → 1:{ x1; x2 }
+  17:{ z1->c; a } → 12:{  }   18:{ z2->c; b } → 14:{  }
+  19:{ t->t; z1 } → 6:{  }
 [alias] analysing instruction: t->d = a;
 [alias] May-aliases after instruction  t->d = a;  are
   { z1->s; z2->s; tab_y[0..] }  { t->t; z1 }  { z1->c; t->d; a }  { z2->c; b }
+[alias] May-alias graph after instruction  t->d = a;  is
+  7:{ z2 } → 8:{  }   9:{ t } → 10:{  }
+  16:{ z1->s; z2->s; tab_y[0..] } → 1:{ x1; x2 }
+  18:{ z2->c; b } → 14:{  }   19:{ t->t; z1 } → 6:{  }
+  20:{ z1->c; t->d; a } → 12:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are
   { z1->s; z2->s; tab_y[0..] }  { t->t; z1 }  { z1->c; t->d; a }  { z2->c; b }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  7:{ z2 } → 8:{  }   9:{ t } → 10:{  }
+  16:{ z1->s; z2->s; tab_y[0..] } → 1:{ x1; x2 }
+  18:{ z2->c; b } → 14:{  }   19:{ t->t; z1 } → 6:{  }
+  20:{ z1->c; t->d; a } → 12:{  }
 [alias] May-aliases at the end of function main:
   { z1->s; z2->s; tab_y[0..] }  { t->t; z1 }  { z1->c; t->d; a }  { z2->c; b }
+[alias] May-alias graph at the end of function main:
+  7:{ z2 } → 8:{  }   9:{ t } → 10:{  }
+  16:{ z1->s; z2->s; tab_y[0..] } → 1:{ x1; x2 }
+  18:{ z2->c; b } → 14:{  }   19:{ t->t; z1 } → 6:{  }
+  20:{ z1->c; t->d; a } → 12:{  }
+[alias] Summary of function main:
+  formals:     locals: x1  x2  tab_y  z1  z2  t  a  b  __retres
+  returns: __retres
+  state: { z1->s; z2->s; tab_y[0..] }  { t->t; z1 }  { z1->c; t->d; a }
+         { z2->c; b }
 [alias] analysing function: malloc
 [alias] May-aliases at the end of function malloc: ⊥
+[alias] May-alias graph at the end of function malloc:
+  ⊥
 [alias] analysing function: mblen
 [alias] May-aliases at the end of function mblen: ⊥
+[alias] May-alias graph at the end of function mblen:
+  ⊥
 [alias] analysing function: mbstowcs
 [alias] May-aliases at the end of function mbstowcs: ⊥
+[alias] May-alias graph at the end of function mbstowcs:
+  ⊥
 [alias] analysing function: mbtowc
 [alias] May-aliases at the end of function mbtowc: ⊥
+[alias] May-alias graph at the end of function mbtowc:
+  ⊥
 [alias] analysing function: mkstemp
 [alias] May-aliases at the end of function mkstemp: ⊥
+[alias] May-alias graph at the end of function mkstemp:
+  ⊥
 [alias] analysing function: mkstemps
 [alias] May-aliases at the end of function mkstemps: ⊥
+[alias] May-alias graph at the end of function mkstemps:
+  ⊥
 [alias] analysing function: mrand48
 [alias] May-aliases at the end of function mrand48: ⊥
+[alias] May-alias graph at the end of function mrand48:
+  ⊥
 [alias] analysing function: nrand48
 [alias] May-aliases at the end of function nrand48: ⊥
+[alias] May-alias graph at the end of function nrand48:
+  ⊥
 [alias] analysing function: posix_memalign
 [alias] May-aliases at the end of function posix_memalign: ⊥
+[alias] May-alias graph at the end of function posix_memalign:
+  ⊥
 [alias] analysing function: putenv
 [alias] May-aliases at the end of function putenv: ⊥
+[alias] May-alias graph at the end of function putenv:
+  ⊥
 [alias] analysing function: qsort
 [alias] May-aliases at the end of function qsort: ⊥
+[alias] May-alias graph at the end of function qsort:
+  ⊥
 [alias] analysing function: quick_exit
 [alias] May-aliases at the end of function quick_exit: ⊥
+[alias] May-alias graph at the end of function quick_exit:
+  ⊥
 [alias] analysing function: rand
 [alias] May-aliases at the end of function rand: ⊥
+[alias] May-alias graph at the end of function rand:
+  ⊥
 [alias] analysing function: random
 [alias] May-aliases at the end of function random: ⊥
+[alias] May-alias graph at the end of function random:
+  ⊥
 [alias] analysing function: realloc
 [alias] May-aliases at the end of function realloc: ⊥
+[alias] May-alias graph at the end of function realloc:
+  ⊥
 [alias] analysing function: reallocarray
 [alias] May-aliases at the end of function reallocarray: ⊥
+[alias] May-alias graph at the end of function reallocarray:
+  ⊥
 [alias] analysing function: seed48
 [alias] May-aliases at the end of function seed48: ⊥
+[alias] May-alias graph at the end of function seed48:
+  ⊥
 [alias] analysing function: setenv
 [alias] May-aliases at the end of function setenv: ⊥
+[alias] May-alias graph at the end of function setenv:
+  ⊥
 [alias] analysing function: srand
 [alias] May-aliases at the end of function srand: ⊥
+[alias] May-alias graph at the end of function srand:
+  ⊥
 [alias] analysing function: srand48
 [alias] May-aliases at the end of function srand48: ⊥
+[alias] May-alias graph at the end of function srand48:
+  ⊥
 [alias] analysing function: srandom
 [alias] May-aliases at the end of function srandom: ⊥
+[alias] May-alias graph at the end of function srandom:
+  ⊥
 [alias] analysing function: strtod
 [alias] May-aliases at the end of function strtod: ⊥
+[alias] May-alias graph at the end of function strtod:
+  ⊥
 [alias] analysing function: strtof
 [alias] May-aliases at the end of function strtof: ⊥
+[alias] May-alias graph at the end of function strtof:
+  ⊥
 [alias] analysing function: strtol
 [alias] May-aliases at the end of function strtol: ⊥
+[alias] May-alias graph at the end of function strtol:
+  ⊥
 [alias] analysing function: strtold
 [alias] May-aliases at the end of function strtold: ⊥
+[alias] May-alias graph at the end of function strtold:
+  ⊥
 [alias] analysing function: strtoll
 [alias] May-aliases at the end of function strtoll: ⊥
+[alias] May-alias graph at the end of function strtoll:
+  ⊥
 [alias] analysing function: strtoul
 [alias] May-aliases at the end of function strtoul: ⊥
+[alias] May-alias graph at the end of function strtoul:
+  ⊥
 [alias] analysing function: strtoull
 [alias] May-aliases at the end of function strtoull: ⊥
+[alias] May-alias graph at the end of function strtoull:
+  ⊥
 [alias] analysing function: system
 [alias] May-aliases at the end of function system: ⊥
+[alias] May-alias graph at the end of function system:
+  ⊥
 [alias] analysing function: unsetenv
 [alias] May-aliases at the end of function unsetenv: ⊥
+[alias] May-alias graph at the end of function unsetenv:
+  ⊥
 [alias] analysing function: wcstombs
 [alias] May-aliases at the end of function wcstombs: ⊥
+[alias] May-alias graph at the end of function wcstombs:
+  ⊥
 [alias] analysing function: wctomb
 [alias] May-aliases at the end of function wctomb: ⊥
+[alias] May-alias graph at the end of function wctomb:
+  ⊥
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/nested2.res.oracle b/src/plugins/alias/tests/offsets/oracle/nested2.res.oracle
index 3ec5a96f69e..b3fc55f974f 100644
--- a/src/plugins/alias/tests/offsets/oracle/nested2.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/nested2.res.oracle
@@ -1,152 +1,303 @@
 [kernel] Parsing nested2.c (with preprocessing)
 [alias] analysing function: _Exit
 [alias] May-aliases at the end of function _Exit: ⊥
+[alias] May-alias graph at the end of function _Exit:
+  ⊥
 [alias] analysing function: abort
 [alias] May-aliases at the end of function abort: ⊥
+[alias] May-alias graph at the end of function abort:
+  ⊥
 [alias] analysing function: abs
 [alias] May-aliases at the end of function abs: ⊥
+[alias] May-alias graph at the end of function abs:
+  ⊥
 [alias] analysing function: at_quick_exit
 [alias] May-aliases at the end of function at_quick_exit: ⊥
+[alias] May-alias graph at the end of function at_quick_exit:
+  ⊥
 [alias] analysing function: atexit
 [alias] May-aliases at the end of function atexit: ⊥
+[alias] May-alias graph at the end of function atexit:
+  ⊥
 [alias] analysing function: atof
 [alias] May-aliases at the end of function atof: ⊥
+[alias] May-alias graph at the end of function atof:
+  ⊥
 [alias] analysing function: atoi
 [alias] May-aliases at the end of function atoi: ⊥
+[alias] May-alias graph at the end of function atoi:
+  ⊥
 [alias] analysing function: atol
 [alias] May-aliases at the end of function atol: ⊥
+[alias] May-alias graph at the end of function atol:
+  ⊥
 [alias] analysing function: atoll
 [alias] May-aliases at the end of function atoll: ⊥
+[alias] May-alias graph at the end of function atoll:
+  ⊥
 [alias] analysing function: bsearch
 [alias] May-aliases at the end of function bsearch: ⊥
+[alias] May-alias graph at the end of function bsearch:
+  ⊥
 [alias] analysing function: calloc
 [alias] May-aliases at the end of function calloc: ⊥
+[alias] May-alias graph at the end of function calloc:
+  ⊥
 [alias] analysing function: div
 [alias] May-aliases at the end of function div: ⊥
+[alias] May-alias graph at the end of function div:
+  ⊥
 [alias] analysing function: drand48
 [alias] May-aliases at the end of function drand48: ⊥
+[alias] May-alias graph at the end of function drand48:
+  ⊥
 [alias] analysing function: erand48
 [alias] May-aliases at the end of function erand48: ⊥
+[alias] May-alias graph at the end of function erand48:
+  ⊥
 [alias] analysing function: exit
 [alias] May-aliases at the end of function exit: ⊥
+[alias] May-alias graph at the end of function exit:
+  ⊥
 [alias] analysing function: free
 [alias] May-aliases at the end of function free: ⊥
+[alias] May-alias graph at the end of function free:
+  ⊥
 [alias] analysing function: getenv
 [alias] May-aliases at the end of function getenv: ⊥
+[alias] May-alias graph at the end of function getenv:
+  ⊥
 [alias] analysing function: jrand48
 [alias] May-aliases at the end of function jrand48: ⊥
+[alias] May-alias graph at the end of function jrand48:
+  ⊥
 [alias] analysing function: labs
 [alias] May-aliases at the end of function labs: ⊥
+[alias] May-alias graph at the end of function labs:
+  ⊥
 [alias] analysing function: lcong48
 [alias] May-aliases at the end of function lcong48: ⊥
+[alias] May-alias graph at the end of function lcong48:
+  ⊥
 [alias] analysing function: ldiv
 [alias] May-aliases at the end of function ldiv: ⊥
+[alias] May-alias graph at the end of function ldiv:
+  ⊥
 [alias] analysing function: llabs
 [alias] May-aliases at the end of function llabs: ⊥
+[alias] May-alias graph at the end of function llabs:
+  ⊥
 [alias] analysing function: lldiv
 [alias] May-aliases at the end of function lldiv: ⊥
+[alias] May-alias graph at the end of function lldiv:
+  ⊥
 [alias] analysing function: lrand48
 [alias] May-aliases at the end of function lrand48: ⊥
+[alias] May-alias graph at the end of function lrand48:
+  ⊥
 [alias] analysing function: main
 [alias] analysing instruction: st_1_t x1 = {.a = 0, .b = 1};
 [alias] May-aliases after instruction  st_1_t x1 = {.a = 0, .b = 1};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x1 = {.a = 0, .b = 1};  is
+  <empty>
 [alias] analysing instruction: st_1_t x2 = {.a = 2, .b = 3};
 [alias] May-aliases after instruction  st_1_t x2 = {.a = 2, .b = 3};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x2 = {.a = 2, .b = 3};  is
+  <empty>
 [alias] analysing instruction: st_2_t *z1 = malloc(sizeof(st_2_t));
 [alias] May-aliases after instruction  st_2_t *z1 = malloc(sizeof(st_2_t));  are
   <none>
+[alias] May-alias graph after instruction  st_2_t *z1 = malloc(sizeof(st_2_t));
+  is    0:{ z1 } → 1:{  }
 [alias] analysing instruction: st_3_t *t = malloc(sizeof(st_3_t));
 [alias] May-aliases after instruction  st_3_t *t = malloc(sizeof(st_3_t));  are
   <none>
+[alias] May-alias graph after instruction  st_3_t *t = malloc(sizeof(st_3_t));  is
+  0:{ z1 } → 1:{  }   2:{ t } → 3:{  }
 [alias] analysing instruction: int *a = malloc(sizeof(int));
 [alias] May-aliases after instruction  int *a = malloc(sizeof(int));  are  <none>
+[alias] May-alias graph after instruction  int *a = malloc(sizeof(int));  is
+  0:{ z1 } → 1:{  }   2:{ t } → 3:{  }   4:{ a } → 5:{  }
 [alias] analysing instruction: *a = 0;
 [alias] May-aliases after instruction  *a = 0;  are  <none>
+[alias] May-alias graph after instruction  *a = 0;  is
+  0:{ z1 } → 1:{  }   2:{ t } → 3:{  }   4:{ a } → 5:{  }
 [alias] analysing instruction: z1->s[0] = (struct struct_1_t *)(& x1);
 [alias:unsafe-cast] nested2.c:42: Warning: 
   unsafe cast from st_1_t * to struct struct_1_t *
 [alias] May-aliases after instruction  z1->s[0] = (struct struct_1_t *)(& x1);  are
   <none>
+[alias] May-alias graph after instruction  z1->s[0] = (struct struct_1_t *)(& x1);
+  is
+  0:{ z1 } → 1:{  }   2:{ t } → 3:{  }   4:{ a } → 5:{  }
+  6:{ z1->s[0..] } → 7:{ x1 }
 [alias] analysing instruction: z1->s[1] = (struct struct_1_t *)(& x2);
 [alias:unsafe-cast] nested2.c:43: Warning: 
   unsafe cast from st_1_t * to struct struct_1_t *
 [alias] May-aliases after instruction  z1->s[1] = (struct struct_1_t *)(& x2);  are
   <none>
+[alias] May-alias graph after instruction  z1->s[1] = (struct struct_1_t *)(& x2);
+  is
+  0:{ z1 } → 1:{  }   2:{ t } → 3:{  }   4:{ a } → 5:{  }
+  6:{ z1->s[0..] } → 7:{ x1; x2 }
 [alias] analysing instruction: z1->c = a;
 [alias] May-aliases after instruction  z1->c = a;  are  { z1->c; a }
+[alias] May-alias graph after instruction  z1->c = a;  is
+  0:{ z1 } → 1:{  }   2:{ t } → 3:{  }
+  6:{ z1->s[0..] } → 7:{ x1; x2 }   11:{ z1->c; a } → 5:{  }
 [alias] analysing instruction: t->t = (struct struct_2_t *)z1;
 [alias:unsafe-cast] nested2.c:45: Warning: 
   unsafe cast from st_2_t * to struct struct_2_t *
 [alias] May-aliases after instruction  t->t = (struct struct_2_t *)z1;  are
   { t->t; z1 }  { z1->c; a }
+[alias] May-alias graph after instruction  t->t = (struct struct_2_t *)z1;  is
+  2:{ t } → 3:{  }   6:{ z1->s[0..] } → 7:{ x1; x2 }
+  11:{ z1->c; a } → 5:{  }   12:{ t->t; z1 } → 1:{  }
 [alias] analysing instruction: t->d = a;
 [alias] May-aliases after instruction  t->d = a;  are
   { t->t; z1 }  { z1->c; t->d; a }
+[alias] May-alias graph after instruction  t->d = a;  is
+  2:{ t } → 3:{  }   6:{ z1->s[0..] } → 7:{ x1; x2 }
+  12:{ t->t; z1 } → 1:{  }   13:{ z1->c; t->d; a } → 5:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are
   { t->t; z1 }  { z1->c; t->d; a }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  2:{ t } → 3:{  }   6:{ z1->s[0..] } → 7:{ x1; x2 }
+  12:{ t->t; z1 } → 1:{  }   13:{ z1->c; t->d; a } → 5:{  }
 [alias] May-aliases at the end of function main: { t->t; z1 }  { z1->c; t->d; a }
+[alias] May-alias graph at the end of function main:
+  2:{ t } → 3:{  }   6:{ z1->s[0..] } → 7:{ x1; x2 }
+  12:{ t->t; z1 } → 1:{  }   13:{ z1->c; t->d; a } → 5:{  }
+[alias] Summary of function main:
+  formals:     locals: x1  x2  z1  t  a  __retres    returns: __retres
+  state: { t->t; z1 }  { z1->c; t->d; a }
 [alias] analysing function: malloc
 [alias] May-aliases at the end of function malloc: ⊥
+[alias] May-alias graph at the end of function malloc:
+  ⊥
 [alias] analysing function: mblen
 [alias] May-aliases at the end of function mblen: ⊥
+[alias] May-alias graph at the end of function mblen:
+  ⊥
 [alias] analysing function: mbstowcs
 [alias] May-aliases at the end of function mbstowcs: ⊥
+[alias] May-alias graph at the end of function mbstowcs:
+  ⊥
 [alias] analysing function: mbtowc
 [alias] May-aliases at the end of function mbtowc: ⊥
+[alias] May-alias graph at the end of function mbtowc:
+  ⊥
 [alias] analysing function: mkstemp
 [alias] May-aliases at the end of function mkstemp: ⊥
+[alias] May-alias graph at the end of function mkstemp:
+  ⊥
 [alias] analysing function: mkstemps
 [alias] May-aliases at the end of function mkstemps: ⊥
+[alias] May-alias graph at the end of function mkstemps:
+  ⊥
 [alias] analysing function: mrand48
 [alias] May-aliases at the end of function mrand48: ⊥
+[alias] May-alias graph at the end of function mrand48:
+  ⊥
 [alias] analysing function: nrand48
 [alias] May-aliases at the end of function nrand48: ⊥
+[alias] May-alias graph at the end of function nrand48:
+  ⊥
 [alias] analysing function: posix_memalign
 [alias] May-aliases at the end of function posix_memalign: ⊥
+[alias] May-alias graph at the end of function posix_memalign:
+  ⊥
 [alias] analysing function: putenv
 [alias] May-aliases at the end of function putenv: ⊥
+[alias] May-alias graph at the end of function putenv:
+  ⊥
 [alias] analysing function: qsort
 [alias] May-aliases at the end of function qsort: ⊥
+[alias] May-alias graph at the end of function qsort:
+  ⊥
 [alias] analysing function: quick_exit
 [alias] May-aliases at the end of function quick_exit: ⊥
+[alias] May-alias graph at the end of function quick_exit:
+  ⊥
 [alias] analysing function: rand
 [alias] May-aliases at the end of function rand: ⊥
+[alias] May-alias graph at the end of function rand:
+  ⊥
 [alias] analysing function: random
 [alias] May-aliases at the end of function random: ⊥
+[alias] May-alias graph at the end of function random:
+  ⊥
 [alias] analysing function: realloc
 [alias] May-aliases at the end of function realloc: ⊥
+[alias] May-alias graph at the end of function realloc:
+  ⊥
 [alias] analysing function: reallocarray
 [alias] May-aliases at the end of function reallocarray: ⊥
+[alias] May-alias graph at the end of function reallocarray:
+  ⊥
 [alias] analysing function: seed48
 [alias] May-aliases at the end of function seed48: ⊥
+[alias] May-alias graph at the end of function seed48:
+  ⊥
 [alias] analysing function: setenv
 [alias] May-aliases at the end of function setenv: ⊥
+[alias] May-alias graph at the end of function setenv:
+  ⊥
 [alias] analysing function: srand
 [alias] May-aliases at the end of function srand: ⊥
+[alias] May-alias graph at the end of function srand:
+  ⊥
 [alias] analysing function: srand48
 [alias] May-aliases at the end of function srand48: ⊥
+[alias] May-alias graph at the end of function srand48:
+  ⊥
 [alias] analysing function: srandom
 [alias] May-aliases at the end of function srandom: ⊥
+[alias] May-alias graph at the end of function srandom:
+  ⊥
 [alias] analysing function: strtod
 [alias] May-aliases at the end of function strtod: ⊥
+[alias] May-alias graph at the end of function strtod:
+  ⊥
 [alias] analysing function: strtof
 [alias] May-aliases at the end of function strtof: ⊥
+[alias] May-alias graph at the end of function strtof:
+  ⊥
 [alias] analysing function: strtol
 [alias] May-aliases at the end of function strtol: ⊥
+[alias] May-alias graph at the end of function strtol:
+  ⊥
 [alias] analysing function: strtold
 [alias] May-aliases at the end of function strtold: ⊥
+[alias] May-alias graph at the end of function strtold:
+  ⊥
 [alias] analysing function: strtoll
 [alias] May-aliases at the end of function strtoll: ⊥
+[alias] May-alias graph at the end of function strtoll:
+  ⊥
 [alias] analysing function: strtoul
 [alias] May-aliases at the end of function strtoul: ⊥
+[alias] May-alias graph at the end of function strtoul:
+  ⊥
 [alias] analysing function: strtoull
 [alias] May-aliases at the end of function strtoull: ⊥
+[alias] May-alias graph at the end of function strtoull:
+  ⊥
 [alias] analysing function: system
 [alias] May-aliases at the end of function system: ⊥
+[alias] May-alias graph at the end of function system:
+  ⊥
 [alias] analysing function: unsetenv
 [alias] May-aliases at the end of function unsetenv: ⊥
+[alias] May-alias graph at the end of function unsetenv:
+  ⊥
 [alias] analysing function: wcstombs
 [alias] May-aliases at the end of function wcstombs: ⊥
+[alias] May-alias graph at the end of function wcstombs:
+  ⊥
 [alias] analysing function: wctomb
 [alias] May-aliases at the end of function wctomb: ⊥
+[alias] May-alias graph at the end of function wctomb:
+  ⊥
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/structure1.res.oracle b/src/plugins/alias/tests/offsets/oracle/structure1.res.oracle
index b325558af32..668bf60c584 100644
--- a/src/plugins/alias/tests/offsets/oracle/structure1.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/structure1.res.oracle
@@ -2,18 +2,38 @@
 [alias] analysing function: main
 [alias] analysing instruction: st_1_t x = {.a = 0, .b = 1};
 [alias] May-aliases after instruction  st_1_t x = {.a = 0, .b = 1};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x = {.a = 0, .b = 1};  is
+  <empty>
 [alias] analysing instruction: st_2_t y = {.a = 3, .c = 4};
 [alias] May-aliases after instruction  st_2_t y = {.a = 3, .c = 4};  are  <none>
+[alias] May-alias graph after instruction  st_2_t y = {.a = 3, .c = 4};  is
+  <empty>
 [alias] analysing instruction: st_1_t *p_x = & x;
 [alias] May-aliases after instruction  st_1_t *p_x = & x;  are  <none>
+[alias] May-alias graph after instruction  st_1_t *p_x = & x;  is
+  0:{ p_x } → 1:{ x }
 [alias] analysing instruction: st_2_t *p_y = & y;
 [alias] May-aliases after instruction  st_2_t *p_y = & y;  are  <none>
+[alias] May-alias graph after instruction  st_2_t *p_y = & y;  is
+  0:{ p_x } → 1:{ x }   4:{ p_y } → 5:{ y }
 [alias] analysing instruction: p_x->a = 3;
 [alias] May-aliases after instruction  p_x->a = 3;  are  <none>
+[alias] May-alias graph after instruction  p_x->a = 3;  is
+  0:{ p_x } → 1:{ x }   4:{ p_y } → 5:{ y }
 [alias] analysing instruction: p_x = (st_1_t *)p_y;
 [alias:unsafe-cast] structure1.c:28: Warning: 
   unsafe cast from st_2_t * to st_1_t *
 [alias] May-aliases after instruction  p_x = (st_1_t *)p_y;  are  { p_x; p_y }
+[alias] May-alias graph after instruction  p_x = (st_1_t *)p_y;  is
+  0:{ p_x; p_y } → 1:{ x; y }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { p_x; p_y }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ p_x; p_y } → 1:{ x; y }
 [alias] May-aliases at the end of function main: { p_x; p_y }
+[alias] May-alias graph at the end of function main:
+  0:{ p_x; p_y } → 1:{ x; y }
+[alias] Summary of function main:
+  formals:     locals: x  y  p_x→{ x; y }  p_y→{ x; y }  __retres
+  returns: __retres    state: { p_x; p_y }
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/structure2.res.oracle b/src/plugins/alias/tests/offsets/oracle/structure2.res.oracle
index 2b2f7ecd4e5..6d772d05177 100644
--- a/src/plugins/alias/tests/offsets/oracle/structure2.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/structure2.res.oracle
@@ -2,18 +2,35 @@
 [alias] analysing function: main
 [alias] analysing instruction: st_1_t x1 = {.a = 0, .b = 1};
 [alias] May-aliases after instruction  st_1_t x1 = {.a = 0, .b = 1};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x1 = {.a = 0, .b = 1};  is
+  <empty>
 [alias] analysing instruction: st_1_t x2 = {.a = 1, .b = 2};
 [alias] May-aliases after instruction  st_1_t x2 = {.a = 1, .b = 2};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x2 = {.a = 1, .b = 2};  is
+  <empty>
 [alias] analysing instruction: st_2_t y = {.s = (struct struct_1_t *)(& x1), .c = 4};
 [alias:unsafe-cast] structure2.c:21: Warning: 
   unsafe cast from st_1_t * to struct struct_1_t *
 [alias] May-aliases after instruction
   st_2_t y = {.s = (struct struct_1_t *)(& x1), .c = 4};  are  <none>
+[alias] May-alias graph after instruction
+  st_2_t y = {.s = (struct struct_1_t *)(& x1), .c = 4};  is
+  0:{ y.s } → 1:{ x1 }
 [alias] analysing instruction: y.s = (struct struct_1_t *)(& x2);
 [alias:unsafe-cast] structure2.c:23: Warning: 
   unsafe cast from st_1_t * to struct struct_1_t *
 [alias] May-aliases after instruction  y.s = (struct struct_1_t *)(& x2);  are
   <none>
+[alias] May-alias graph after instruction  y.s = (struct struct_1_t *)(& x2);  is
+  0:{ y.s } → 1:{ x1; x2 }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ y.s } → 1:{ x1; x2 }
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  0:{ y.s } → 1:{ x1; x2 }
+[alias] Summary of function main:
+  formals:     locals: x1  x2  y  __retres    returns: __retres
+  state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/structure3.res.oracle b/src/plugins/alias/tests/offsets/oracle/structure3.res.oracle
index 7ec86d402cb..6c9609a49da 100644
--- a/src/plugins/alias/tests/offsets/oracle/structure3.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/structure3.res.oracle
@@ -2,32 +2,61 @@
 [alias] analysing function: main
 [alias] analysing instruction: st_1_t x1 = {.a = 0, .b = 1};
 [alias] May-aliases after instruction  st_1_t x1 = {.a = 0, .b = 1};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x1 = {.a = 0, .b = 1};  is
+  <empty>
 [alias] analysing instruction: st_1_t x2 = {.a = 1, .b = 2};
 [alias] May-aliases after instruction  st_1_t x2 = {.a = 1, .b = 2};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x2 = {.a = 1, .b = 2};  is
+  <empty>
 [alias] analysing instruction:
   st_2_t y1 = {.s = (struct struct_1_t *)(& x1), .c = 3};
 [alias:unsafe-cast] structure3.c:31: Warning: 
   unsafe cast from st_1_t * to struct struct_1_t *
 [alias] May-aliases after instruction
   st_2_t y1 = {.s = (struct struct_1_t *)(& x1), .c = 3};  are  <none>
+[alias] May-alias graph after instruction
+  st_2_t y1 = {.s = (struct struct_1_t *)(& x1), .c = 3};  is
+  0:{ y1.s } → 1:{ x1 }
 [alias] analysing instruction:
   st_2_t y2 = {.s = (struct struct_1_t *)(& x2), .c = 4};
 [alias:unsafe-cast] structure3.c:32: Warning: 
   unsafe cast from st_1_t * to struct struct_1_t *
 [alias] May-aliases after instruction
   st_2_t y2 = {.s = (struct struct_1_t *)(& x2), .c = 4};  are  <none>
+[alias] May-alias graph after instruction
+  st_2_t y2 = {.s = (struct struct_1_t *)(& x2), .c = 4};  is
+  0:{ y1.s } → 1:{ x1 }   3:{ y2.s } → 4:{ x2 }
 [alias] analysing instruction: st_3_t z = {.t = (struct struct_2_t *)(& y1), .d = 5};
 [alias:unsafe-cast] structure3.c:33: Warning: 
   unsafe cast from st_2_t * to struct struct_2_t *
 [alias] May-aliases after instruction
   st_3_t z = {.t = (struct struct_2_t *)(& y1), .d = 5};  are  <none>
+[alias] May-alias graph after instruction
+  st_3_t z = {.t = (struct struct_2_t *)(& y1), .d = 5};  is
+  0:{ y1.s } → 1:{ x1 }   3:{ y2.s } → 4:{ x2 }   6:{ z.t } → 7:{ y1 }
 [alias] analysing instruction: z.t = (struct struct_2_t *)(& y2);
 [alias:unsafe-cast] structure3.c:35: Warning: 
   unsafe cast from st_2_t * to struct struct_2_t *
 [alias] May-aliases after instruction  z.t = (struct struct_2_t *)(& y2);  are
   <none>
+[alias] May-alias graph after instruction  z.t = (struct struct_2_t *)(& y2);  is
+  0:{ y1.s } → 1:{ x1 }   3:{ y2.s } → 4:{ x2 }
+  6:{ z.t } → 7:{ y1; y2 }
 [alias] analysing instruction: y1.c = z.d;
 [alias] May-aliases after instruction  y1.c = z.d;  are  <none>
+[alias] May-alias graph after instruction  y1.c = z.d;  is
+  0:{ y1.s } → 1:{ x1 }   3:{ y2.s } → 4:{ x2 }
+  6:{ z.t } → 7:{ y1; y2 }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  <none>
+[alias] May-alias graph after instruction  __retres = 0;  is
+  0:{ y1.s } → 1:{ x1 }   3:{ y2.s } → 4:{ x2 }
+  6:{ z.t } → 7:{ y1; y2 }
 [alias] May-aliases at the end of function main: <none>
+[alias] May-alias graph at the end of function main:
+  0:{ y1.s } → 1:{ x1 }   3:{ y2.s } → 4:{ x2 }
+  6:{ z.t } → 7:{ y1; y2 }
+[alias] Summary of function main:
+  formals:     locals: x1  x2  y1  y2  z  __retres    returns: __retres
+  state: <none>
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/structure4.res.oracle b/src/plugins/alias/tests/offsets/oracle/structure4.res.oracle
index f3c036ea172..73a0215ca74 100644
--- a/src/plugins/alias/tests/offsets/oracle/structure4.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/structure4.res.oracle
@@ -1,136 +1,270 @@
 [kernel] Parsing structure4.c (with preprocessing)
 [alias] analysing function: _Exit
 [alias] May-aliases at the end of function _Exit: ⊥
+[alias] May-alias graph at the end of function _Exit:
+  ⊥
 [alias] analysing function: abort
 [alias] May-aliases at the end of function abort: ⊥
+[alias] May-alias graph at the end of function abort:
+  ⊥
 [alias] analysing function: abs
 [alias] May-aliases at the end of function abs: ⊥
+[alias] May-alias graph at the end of function abs:
+  ⊥
 [alias] analysing function: at_quick_exit
 [alias] May-aliases at the end of function at_quick_exit: ⊥
+[alias] May-alias graph at the end of function at_quick_exit:
+  ⊥
 [alias] analysing function: atexit
 [alias] May-aliases at the end of function atexit: ⊥
+[alias] May-alias graph at the end of function atexit:
+  ⊥
 [alias] analysing function: atof
 [alias] May-aliases at the end of function atof: ⊥
+[alias] May-alias graph at the end of function atof:
+  ⊥
 [alias] analysing function: atoi
 [alias] May-aliases at the end of function atoi: ⊥
+[alias] May-alias graph at the end of function atoi:
+  ⊥
 [alias] analysing function: atol
 [alias] May-aliases at the end of function atol: ⊥
+[alias] May-alias graph at the end of function atol:
+  ⊥
 [alias] analysing function: atoll
 [alias] May-aliases at the end of function atoll: ⊥
+[alias] May-alias graph at the end of function atoll:
+  ⊥
 [alias] analysing function: bsearch
 [alias] May-aliases at the end of function bsearch: ⊥
+[alias] May-alias graph at the end of function bsearch:
+  ⊥
 [alias] analysing function: calloc
 [alias] May-aliases at the end of function calloc: ⊥
+[alias] May-alias graph at the end of function calloc:
+  ⊥
 [alias] analysing function: div
 [alias] May-aliases at the end of function div: ⊥
+[alias] May-alias graph at the end of function div:
+  ⊥
 [alias] analysing function: drand48
 [alias] May-aliases at the end of function drand48: ⊥
+[alias] May-alias graph at the end of function drand48:
+  ⊥
 [alias] analysing function: erand48
 [alias] May-aliases at the end of function erand48: ⊥
+[alias] May-alias graph at the end of function erand48:
+  ⊥
 [alias] analysing function: exit
 [alias] May-aliases at the end of function exit: ⊥
+[alias] May-alias graph at the end of function exit:
+  ⊥
 [alias] analysing function: free
 [alias] May-aliases at the end of function free: ⊥
+[alias] May-alias graph at the end of function free:
+  ⊥
 [alias] analysing function: getenv
 [alias] May-aliases at the end of function getenv: ⊥
+[alias] May-alias graph at the end of function getenv:
+  ⊥
 [alias] analysing function: jrand48
 [alias] May-aliases at the end of function jrand48: ⊥
+[alias] May-alias graph at the end of function jrand48:
+  ⊥
 [alias] analysing function: labs
 [alias] May-aliases at the end of function labs: ⊥
+[alias] May-alias graph at the end of function labs:
+  ⊥
 [alias] analysing function: lcong48
 [alias] May-aliases at the end of function lcong48: ⊥
+[alias] May-alias graph at the end of function lcong48:
+  ⊥
 [alias] analysing function: ldiv
 [alias] May-aliases at the end of function ldiv: ⊥
+[alias] May-alias graph at the end of function ldiv:
+  ⊥
 [alias] analysing function: llabs
 [alias] May-aliases at the end of function llabs: ⊥
+[alias] May-alias graph at the end of function llabs:
+  ⊥
 [alias] analysing function: lldiv
 [alias] May-aliases at the end of function lldiv: ⊥
+[alias] May-alias graph at the end of function lldiv:
+  ⊥
 [alias] analysing function: lrand48
 [alias] May-aliases at the end of function lrand48: ⊥
+[alias] May-alias graph at the end of function lrand48:
+  ⊥
 [alias] analysing function: main
 [alias] analysing instruction: st_1_t x1 = {.a = 0, .b = 1};
 [alias] May-aliases after instruction  st_1_t x1 = {.a = 0, .b = 1};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x1 = {.a = 0, .b = 1};  is
+  <empty>
 [alias] analysing instruction: st_1_t x2 = {.a = 1, .b = 2};
 [alias] May-aliases after instruction  st_1_t x2 = {.a = 1, .b = 2};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x2 = {.a = 1, .b = 2};  is
+  <empty>
 [alias] analysing instruction: st_1_t *y1 = malloc(sizeof(st_1_t));
 [alias] May-aliases after instruction  st_1_t *y1 = malloc(sizeof(st_1_t));  are
   <none>
+[alias] May-alias graph after instruction  st_1_t *y1 = malloc(sizeof(st_1_t));
+  is    0:{ y1 } → 1:{  }
 [alias] analysing instruction: st_2_t *z = malloc(sizeof(st_2_t));
 [alias] May-aliases after instruction  st_2_t *z = malloc(sizeof(st_2_t));  are
   <none>
+[alias] May-alias graph after instruction  st_2_t *z = malloc(sizeof(st_2_t));  is
+  0:{ y1 } → 1:{  }   2:{ z } → 3:{  }
 [alias] analysing instruction: y1 = & x1;
 [alias] May-aliases after instruction  y1 = & x1;  are  <none>
+[alias] May-alias graph after instruction  y1 = & x1;  is
+  0:{ y1 } → 1:{ x1 }   2:{ z } → 3:{  }
 [alias] analysing instruction: z->s = (struct struct_1_t *)y1;
 [alias:unsafe-cast] structure4.c:37: Warning: 
   unsafe cast from st_1_t * to struct struct_1_t *
 [alias] May-aliases after instruction  z->s = (struct struct_1_t *)y1;  are
   { z->s; y1 }
+[alias] May-alias graph after instruction  z->s = (struct struct_1_t *)y1;  is
+  2:{ z } → 3:{  }   6:{ z->s; y1 } → 1:{ x1 }
 [alias] analysing instruction: z->c = 6;
 [alias] May-aliases after instruction  z->c = 6;  are  { z->s; y1 }
+[alias] May-alias graph after instruction  z->c = 6;  is
+  2:{ z } → 3:{  }   6:{ z->s; y1 } → 1:{ x1 }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { z->s; y1 }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  2:{ z } → 3:{  }   6:{ z->s; y1 } → 1:{ x1 }
 [alias] May-aliases at the end of function main: { z->s; y1 }
+[alias] May-alias graph at the end of function main:
+  2:{ z } → 3:{  }   6:{ z->s; y1 } → 1:{ x1 }
+[alias] Summary of function main:
+  formals:     locals: x1  x2  y1→{ x1 }  z  __retres    returns: __retres
+  state: { z->s; y1 }
 [alias] analysing function: malloc
 [alias] May-aliases at the end of function malloc: ⊥
+[alias] May-alias graph at the end of function malloc:
+  ⊥
 [alias] analysing function: mblen
 [alias] May-aliases at the end of function mblen: ⊥
+[alias] May-alias graph at the end of function mblen:
+  ⊥
 [alias] analysing function: mbstowcs
 [alias] May-aliases at the end of function mbstowcs: ⊥
+[alias] May-alias graph at the end of function mbstowcs:
+  ⊥
 [alias] analysing function: mbtowc
 [alias] May-aliases at the end of function mbtowc: ⊥
+[alias] May-alias graph at the end of function mbtowc:
+  ⊥
 [alias] analysing function: mkstemp
 [alias] May-aliases at the end of function mkstemp: ⊥
+[alias] May-alias graph at the end of function mkstemp:
+  ⊥
 [alias] analysing function: mkstemps
 [alias] May-aliases at the end of function mkstemps: ⊥
+[alias] May-alias graph at the end of function mkstemps:
+  ⊥
 [alias] analysing function: mrand48
 [alias] May-aliases at the end of function mrand48: ⊥
+[alias] May-alias graph at the end of function mrand48:
+  ⊥
 [alias] analysing function: nrand48
 [alias] May-aliases at the end of function nrand48: ⊥
+[alias] May-alias graph at the end of function nrand48:
+  ⊥
 [alias] analysing function: posix_memalign
 [alias] May-aliases at the end of function posix_memalign: ⊥
+[alias] May-alias graph at the end of function posix_memalign:
+  ⊥
 [alias] analysing function: putenv
 [alias] May-aliases at the end of function putenv: ⊥
+[alias] May-alias graph at the end of function putenv:
+  ⊥
 [alias] analysing function: qsort
 [alias] May-aliases at the end of function qsort: ⊥
+[alias] May-alias graph at the end of function qsort:
+  ⊥
 [alias] analysing function: quick_exit
 [alias] May-aliases at the end of function quick_exit: ⊥
+[alias] May-alias graph at the end of function quick_exit:
+  ⊥
 [alias] analysing function: rand
 [alias] May-aliases at the end of function rand: ⊥
+[alias] May-alias graph at the end of function rand:
+  ⊥
 [alias] analysing function: random
 [alias] May-aliases at the end of function random: ⊥
+[alias] May-alias graph at the end of function random:
+  ⊥
 [alias] analysing function: realloc
 [alias] May-aliases at the end of function realloc: ⊥
+[alias] May-alias graph at the end of function realloc:
+  ⊥
 [alias] analysing function: reallocarray
 [alias] May-aliases at the end of function reallocarray: ⊥
+[alias] May-alias graph at the end of function reallocarray:
+  ⊥
 [alias] analysing function: seed48
 [alias] May-aliases at the end of function seed48: ⊥
+[alias] May-alias graph at the end of function seed48:
+  ⊥
 [alias] analysing function: setenv
 [alias] May-aliases at the end of function setenv: ⊥
+[alias] May-alias graph at the end of function setenv:
+  ⊥
 [alias] analysing function: srand
 [alias] May-aliases at the end of function srand: ⊥
+[alias] May-alias graph at the end of function srand:
+  ⊥
 [alias] analysing function: srand48
 [alias] May-aliases at the end of function srand48: ⊥
+[alias] May-alias graph at the end of function srand48:
+  ⊥
 [alias] analysing function: srandom
 [alias] May-aliases at the end of function srandom: ⊥
+[alias] May-alias graph at the end of function srandom:
+  ⊥
 [alias] analysing function: strtod
 [alias] May-aliases at the end of function strtod: ⊥
+[alias] May-alias graph at the end of function strtod:
+  ⊥
 [alias] analysing function: strtof
 [alias] May-aliases at the end of function strtof: ⊥
+[alias] May-alias graph at the end of function strtof:
+  ⊥
 [alias] analysing function: strtol
 [alias] May-aliases at the end of function strtol: ⊥
+[alias] May-alias graph at the end of function strtol:
+  ⊥
 [alias] analysing function: strtold
 [alias] May-aliases at the end of function strtold: ⊥
+[alias] May-alias graph at the end of function strtold:
+  ⊥
 [alias] analysing function: strtoll
 [alias] May-aliases at the end of function strtoll: ⊥
+[alias] May-alias graph at the end of function strtoll:
+  ⊥
 [alias] analysing function: strtoul
 [alias] May-aliases at the end of function strtoul: ⊥
+[alias] May-alias graph at the end of function strtoul:
+  ⊥
 [alias] analysing function: strtoull
 [alias] May-aliases at the end of function strtoull: ⊥
+[alias] May-alias graph at the end of function strtoull:
+  ⊥
 [alias] analysing function: system
 [alias] May-aliases at the end of function system: ⊥
+[alias] May-alias graph at the end of function system:
+  ⊥
 [alias] analysing function: unsetenv
 [alias] May-aliases at the end of function unsetenv: ⊥
+[alias] May-alias graph at the end of function unsetenv:
+  ⊥
 [alias] analysing function: wcstombs
 [alias] May-aliases at the end of function wcstombs: ⊥
+[alias] May-alias graph at the end of function wcstombs:
+  ⊥
 [alias] analysing function: wctomb
 [alias] May-aliases at the end of function wctomb: ⊥
+[alias] May-alias graph at the end of function wctomb:
+  ⊥
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/offsets/oracle/structure5.res.oracle b/src/plugins/alias/tests/offsets/oracle/structure5.res.oracle
index bd0be91325e..6a135db357a 100644
--- a/src/plugins/alias/tests/offsets/oracle/structure5.res.oracle
+++ b/src/plugins/alias/tests/offsets/oracle/structure5.res.oracle
@@ -1,153 +1,306 @@
 [kernel] Parsing structure5.c (with preprocessing)
 [alias] analysing function: _Exit
 [alias] May-aliases at the end of function _Exit: ⊥
+[alias] May-alias graph at the end of function _Exit:
+  ⊥
 [alias] analysing function: abort
 [alias] May-aliases at the end of function abort: ⊥
+[alias] May-alias graph at the end of function abort:
+  ⊥
 [alias] analysing function: abs
 [alias] May-aliases at the end of function abs: ⊥
+[alias] May-alias graph at the end of function abs:
+  ⊥
 [alias] analysing function: at_quick_exit
 [alias] May-aliases at the end of function at_quick_exit: ⊥
+[alias] May-alias graph at the end of function at_quick_exit:
+  ⊥
 [alias] analysing function: atexit
 [alias] May-aliases at the end of function atexit: ⊥
+[alias] May-alias graph at the end of function atexit:
+  ⊥
 [alias] analysing function: atof
 [alias] May-aliases at the end of function atof: ⊥
+[alias] May-alias graph at the end of function atof:
+  ⊥
 [alias] analysing function: atoi
 [alias] May-aliases at the end of function atoi: ⊥
+[alias] May-alias graph at the end of function atoi:
+  ⊥
 [alias] analysing function: atol
 [alias] May-aliases at the end of function atol: ⊥
+[alias] May-alias graph at the end of function atol:
+  ⊥
 [alias] analysing function: atoll
 [alias] May-aliases at the end of function atoll: ⊥
+[alias] May-alias graph at the end of function atoll:
+  ⊥
 [alias] analysing function: bsearch
 [alias] May-aliases at the end of function bsearch: ⊥
+[alias] May-alias graph at the end of function bsearch:
+  ⊥
 [alias] analysing function: calloc
 [alias] May-aliases at the end of function calloc: ⊥
+[alias] May-alias graph at the end of function calloc:
+  ⊥
 [alias] analysing function: div
 [alias] May-aliases at the end of function div: ⊥
+[alias] May-alias graph at the end of function div:
+  ⊥
 [alias] analysing function: drand48
 [alias] May-aliases at the end of function drand48: ⊥
+[alias] May-alias graph at the end of function drand48:
+  ⊥
 [alias] analysing function: erand48
 [alias] May-aliases at the end of function erand48: ⊥
+[alias] May-alias graph at the end of function erand48:
+  ⊥
 [alias] analysing function: exit
 [alias] May-aliases at the end of function exit: ⊥
+[alias] May-alias graph at the end of function exit:
+  ⊥
 [alias] analysing function: free
 [alias] May-aliases at the end of function free: ⊥
+[alias] May-alias graph at the end of function free:
+  ⊥
 [alias] analysing function: getenv
 [alias] May-aliases at the end of function getenv: ⊥
+[alias] May-alias graph at the end of function getenv:
+  ⊥
 [alias] analysing function: jrand48
 [alias] May-aliases at the end of function jrand48: ⊥
+[alias] May-alias graph at the end of function jrand48:
+  ⊥
 [alias] analysing function: labs
 [alias] May-aliases at the end of function labs: ⊥
+[alias] May-alias graph at the end of function labs:
+  ⊥
 [alias] analysing function: lcong48
 [alias] May-aliases at the end of function lcong48: ⊥
+[alias] May-alias graph at the end of function lcong48:
+  ⊥
 [alias] analysing function: ldiv
 [alias] May-aliases at the end of function ldiv: ⊥
+[alias] May-alias graph at the end of function ldiv:
+  ⊥
 [alias] analysing function: llabs
 [alias] May-aliases at the end of function llabs: ⊥
+[alias] May-alias graph at the end of function llabs:
+  ⊥
 [alias] analysing function: lldiv
 [alias] May-aliases at the end of function lldiv: ⊥
+[alias] May-alias graph at the end of function lldiv:
+  ⊥
 [alias] analysing function: lrand48
 [alias] May-aliases at the end of function lrand48: ⊥
+[alias] May-alias graph at the end of function lrand48:
+  ⊥
 [alias] analysing function: main
 [alias] analysing instruction: st_1_t x1 = {.a = 0, .b = 1};
 [alias] May-aliases after instruction  st_1_t x1 = {.a = 0, .b = 1};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x1 = {.a = 0, .b = 1};  is
+  <empty>
 [alias] analysing instruction: st_1_t x2 = {.a = 1, .b = 2};
 [alias] May-aliases after instruction  st_1_t x2 = {.a = 1, .b = 2};  are  <none>
+[alias] May-alias graph after instruction  st_1_t x2 = {.a = 1, .b = 2};  is
+  <empty>
 [alias] analysing instruction: st_1_t *y1 = malloc(sizeof(st_1_t));
 [alias] May-aliases after instruction  st_1_t *y1 = malloc(sizeof(st_1_t));  are
   <none>
+[alias] May-alias graph after instruction  st_1_t *y1 = malloc(sizeof(st_1_t));
+  is    0:{ y1 } → 1:{  }
 [alias] analysing instruction: st_2_t *z = malloc(sizeof(st_2_t));
 [alias] May-aliases after instruction  st_2_t *z = malloc(sizeof(st_2_t));  are
   <none>
+[alias] May-alias graph after instruction  st_2_t *z = malloc(sizeof(st_2_t));  is
+  0:{ y1 } → 1:{  }   2:{ z } → 3:{  }
 [alias] analysing instruction: st_3_t *t = malloc(sizeof(st_3_t));
 [alias] May-aliases after instruction  st_3_t *t = malloc(sizeof(st_3_t));  are
   <none>
+[alias] May-alias graph after instruction  st_3_t *t = malloc(sizeof(st_3_t));  is
+  0:{ y1 } → 1:{  }   2:{ z } → 3:{  }   4:{ t } → 5:{  }
 [alias] analysing instruction: int *a = malloc(sizeof(int));
 [alias] May-aliases after instruction  int *a = malloc(sizeof(int));  are  <none>
+[alias] May-alias graph after instruction  int *a = malloc(sizeof(int));  is
+  0:{ y1 } → 1:{  }   2:{ z } → 3:{  }   4:{ t } → 5:{  }
+  6:{ a } → 7:{  }
 [alias] analysing instruction: *a = 0;
 [alias] May-aliases after instruction  *a = 0;  are  <none>
+[alias] May-alias graph after instruction  *a = 0;  is
+  0:{ y1 } → 1:{  }   2:{ z } → 3:{  }   4:{ t } → 5:{  }
+  6:{ a } → 7:{  }
 [alias] analysing instruction: y1 = & x1;
 [alias] May-aliases after instruction  y1 = & x1;  are  <none>
+[alias] May-alias graph after instruction  y1 = & x1;  is
+  0:{ y1 } → 1:{ x1 }   2:{ z } → 3:{  }   4:{ t } → 5:{  }
+  6:{ a } → 7:{  }
 [alias] analysing instruction: z->s = (struct struct_1_t *)y1;
 [alias:unsafe-cast] structure5.c:41: Warning: 
   unsafe cast from st_1_t * to struct struct_1_t *
 [alias] May-aliases after instruction  z->s = (struct struct_1_t *)y1;  are
   { z->s; y1 }
+[alias] May-alias graph after instruction  z->s = (struct struct_1_t *)y1;  is
+  2:{ z } → 3:{  }   4:{ t } → 5:{  }   6:{ a } → 7:{  }
+  10:{ z->s; y1 } → 1:{ x1 }
 [alias] analysing instruction: z->c = a;
 [alias] May-aliases after instruction  z->c = a;  are  { z->s; y1 }  { z->c; a }
+[alias] May-alias graph after instruction  z->c = a;  is
+  2:{ z } → 3:{  }   4:{ t } → 5:{  }   10:{ z->s; y1 } → 1:{ x1 }
+  11:{ z->c; a } → 7:{  }
 [alias] analysing instruction: t->t = (struct struct_2_t *)z;
 [alias:unsafe-cast] structure5.c:43: Warning: 
   unsafe cast from st_2_t * to struct struct_2_t *
 [alias] May-aliases after instruction  t->t = (struct struct_2_t *)z;  are
   { z->s; y1 }  { t->t; z }  { z->c; a }
+[alias] May-alias graph after instruction  t->t = (struct struct_2_t *)z;  is
+  4:{ t } → 5:{  }   10:{ z->s; y1 } → 1:{ x1 }
+  11:{ z->c; a } → 7:{  }   12:{ t->t; z } → 3:{  }
 [alias] analysing instruction: t->d = a;
 [alias] May-aliases after instruction  t->d = a;  are
   { z->s; y1 }  { t->t; z }  { z->c; t->d; a }
+[alias] May-alias graph after instruction  t->d = a;  is
+  4:{ t } → 5:{  }   10:{ z->s; y1 } → 1:{ x1 }
+  12:{ t->t; z } → 3:{  }   13:{ z->c; t->d; a } → 7:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are
   { z->s; y1 }  { t->t; z }  { z->c; t->d; a }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  4:{ t } → 5:{  }   10:{ z->s; y1 } → 1:{ x1 }
+  12:{ t->t; z } → 3:{  }   13:{ z->c; t->d; a } → 7:{  }
 [alias] May-aliases at the end of function main:
   { z->s; y1 }  { t->t; z }  { z->c; t->d; a }
+[alias] May-alias graph at the end of function main:
+  4:{ t } → 5:{  }   10:{ z->s; y1 } → 1:{ x1 }
+  12:{ t->t; z } → 3:{  }   13:{ z->c; t->d; a } → 7:{  }
+[alias] Summary of function main:
+  formals:     locals: x1  x2  y1→{ x1 }  z  t  a  __retres
+  returns: __retres    state: { z->s; y1 }  { t->t; z }  { z->c; t->d; a }
 [alias] analysing function: malloc
 [alias] May-aliases at the end of function malloc: ⊥
+[alias] May-alias graph at the end of function malloc:
+  ⊥
 [alias] analysing function: mblen
 [alias] May-aliases at the end of function mblen: ⊥
+[alias] May-alias graph at the end of function mblen:
+  ⊥
 [alias] analysing function: mbstowcs
 [alias] May-aliases at the end of function mbstowcs: ⊥
+[alias] May-alias graph at the end of function mbstowcs:
+  ⊥
 [alias] analysing function: mbtowc
 [alias] May-aliases at the end of function mbtowc: ⊥
+[alias] May-alias graph at the end of function mbtowc:
+  ⊥
 [alias] analysing function: mkstemp
 [alias] May-aliases at the end of function mkstemp: ⊥
+[alias] May-alias graph at the end of function mkstemp:
+  ⊥
 [alias] analysing function: mkstemps
 [alias] May-aliases at the end of function mkstemps: ⊥
+[alias] May-alias graph at the end of function mkstemps:
+  ⊥
 [alias] analysing function: mrand48
 [alias] May-aliases at the end of function mrand48: ⊥
+[alias] May-alias graph at the end of function mrand48:
+  ⊥
 [alias] analysing function: nrand48
 [alias] May-aliases at the end of function nrand48: ⊥
+[alias] May-alias graph at the end of function nrand48:
+  ⊥
 [alias] analysing function: posix_memalign
 [alias] May-aliases at the end of function posix_memalign: ⊥
+[alias] May-alias graph at the end of function posix_memalign:
+  ⊥
 [alias] analysing function: putenv
 [alias] May-aliases at the end of function putenv: ⊥
+[alias] May-alias graph at the end of function putenv:
+  ⊥
 [alias] analysing function: qsort
 [alias] May-aliases at the end of function qsort: ⊥
+[alias] May-alias graph at the end of function qsort:
+  ⊥
 [alias] analysing function: quick_exit
 [alias] May-aliases at the end of function quick_exit: ⊥
+[alias] May-alias graph at the end of function quick_exit:
+  ⊥
 [alias] analysing function: rand
 [alias] May-aliases at the end of function rand: ⊥
+[alias] May-alias graph at the end of function rand:
+  ⊥
 [alias] analysing function: random
 [alias] May-aliases at the end of function random: ⊥
+[alias] May-alias graph at the end of function random:
+  ⊥
 [alias] analysing function: realloc
 [alias] May-aliases at the end of function realloc: ⊥
+[alias] May-alias graph at the end of function realloc:
+  ⊥
 [alias] analysing function: reallocarray
 [alias] May-aliases at the end of function reallocarray: ⊥
+[alias] May-alias graph at the end of function reallocarray:
+  ⊥
 [alias] analysing function: seed48
 [alias] May-aliases at the end of function seed48: ⊥
+[alias] May-alias graph at the end of function seed48:
+  ⊥
 [alias] analysing function: setenv
 [alias] May-aliases at the end of function setenv: ⊥
+[alias] May-alias graph at the end of function setenv:
+  ⊥
 [alias] analysing function: srand
 [alias] May-aliases at the end of function srand: ⊥
+[alias] May-alias graph at the end of function srand:
+  ⊥
 [alias] analysing function: srand48
 [alias] May-aliases at the end of function srand48: ⊥
+[alias] May-alias graph at the end of function srand48:
+  ⊥
 [alias] analysing function: srandom
 [alias] May-aliases at the end of function srandom: ⊥
+[alias] May-alias graph at the end of function srandom:
+  ⊥
 [alias] analysing function: strtod
 [alias] May-aliases at the end of function strtod: ⊥
+[alias] May-alias graph at the end of function strtod:
+  ⊥
 [alias] analysing function: strtof
 [alias] May-aliases at the end of function strtof: ⊥
+[alias] May-alias graph at the end of function strtof:
+  ⊥
 [alias] analysing function: strtol
 [alias] May-aliases at the end of function strtol: ⊥
+[alias] May-alias graph at the end of function strtol:
+  ⊥
 [alias] analysing function: strtold
 [alias] May-aliases at the end of function strtold: ⊥
+[alias] May-alias graph at the end of function strtold:
+  ⊥
 [alias] analysing function: strtoll
 [alias] May-aliases at the end of function strtoll: ⊥
+[alias] May-alias graph at the end of function strtoll:
+  ⊥
 [alias] analysing function: strtoul
 [alias] May-aliases at the end of function strtoul: ⊥
+[alias] May-alias graph at the end of function strtoul:
+  ⊥
 [alias] analysing function: strtoull
 [alias] May-aliases at the end of function strtoull: ⊥
+[alias] May-alias graph at the end of function strtoull:
+  ⊥
 [alias] analysing function: system
 [alias] May-aliases at the end of function system: ⊥
+[alias] May-alias graph at the end of function system:
+  ⊥
 [alias] analysing function: unsetenv
 [alias] May-aliases at the end of function unsetenv: ⊥
+[alias] May-alias graph at the end of function unsetenv:
+  ⊥
 [alias] analysing function: wcstombs
 [alias] May-aliases at the end of function wcstombs: ⊥
+[alias] May-alias graph at the end of function wcstombs:
+  ⊥
 [alias] analysing function: wctomb
 [alias] May-aliases at the end of function wctomb: ⊥
+[alias] May-alias graph at the end of function wctomb:
+  ⊥
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/real_world/oracle/example1.res.oracle b/src/plugins/alias/tests/real_world/oracle/example1.res.oracle
index ec0365c4343..9da1fbb86ac 100644
--- a/src/plugins/alias/tests/real_world/oracle/example1.res.oracle
+++ b/src/plugins/alias/tests/real_world/oracle/example1.res.oracle
@@ -1,419 +1,853 @@
 [kernel] Parsing example1.c (with preprocessing)
 [alias] analysing function: _Exit
 [alias] May-aliases at the end of function _Exit: ⊥
+[alias] May-alias graph at the end of function _Exit:
+  ⊥
 [alias] analysing function: __fc_fpclassify
 [alias] May-aliases at the end of function __fc_fpclassify: ⊥
+[alias] May-alias graph at the end of function __fc_fpclassify:
+  ⊥
 [alias] analysing function: __fc_fpclassifyf
 [alias] May-aliases at the end of function __fc_fpclassifyf: ⊥
+[alias] May-alias graph at the end of function __fc_fpclassifyf:
+  ⊥
 [alias] analysing function: __fc_infinity
 [alias] May-aliases at the end of function __fc_infinity: ⊥
+[alias] May-alias graph at the end of function __fc_infinity:
+  ⊥
 [alias] analysing function: __fc_nan
 [alias] May-aliases at the end of function __fc_nan: ⊥
+[alias] May-alias graph at the end of function __fc_nan:
+  ⊥
 [alias] analysing function: __finite
 [alias] May-aliases at the end of function __finite: ⊥
+[alias] May-alias graph at the end of function __finite:
+  ⊥
 [alias] analysing function: __finitef
 [alias] May-aliases at the end of function __finitef: ⊥
+[alias] May-alias graph at the end of function __finitef:
+  ⊥
 [alias] analysing function: abort
 [alias] May-aliases at the end of function abort: ⊥
+[alias] May-alias graph at the end of function abort:
+  ⊥
 [alias] analysing function: abs
 [alias] May-aliases at the end of function abs: ⊥
+[alias] May-alias graph at the end of function abs:
+  ⊥
 [alias] analysing function: acos
 [alias] May-aliases at the end of function acos: ⊥
+[alias] May-alias graph at the end of function acos:
+  ⊥
 [alias] analysing function: acosf
 [alias] May-aliases at the end of function acosf: ⊥
+[alias] May-alias graph at the end of function acosf:
+  ⊥
 [alias] analysing function: acosh
 [alias] May-aliases at the end of function acosh: ⊥
+[alias] May-alias graph at the end of function acosh:
+  ⊥
 [alias] analysing function: acoshf
 [alias] May-aliases at the end of function acoshf: ⊥
+[alias] May-alias graph at the end of function acoshf:
+  ⊥
 [alias] analysing function: acoshl
 [alias] May-aliases at the end of function acoshl: ⊥
+[alias] May-alias graph at the end of function acoshl:
+  ⊥
 [alias] analysing function: acosl
 [alias] May-aliases at the end of function acosl: ⊥
+[alias] May-alias graph at the end of function acosl:
+  ⊥
 [alias] analysing function: asin
 [alias] May-aliases at the end of function asin: ⊥
+[alias] May-alias graph at the end of function asin:
+  ⊥
 [alias] analysing function: asinf
 [alias] May-aliases at the end of function asinf: ⊥
+[alias] May-alias graph at the end of function asinf:
+  ⊥
 [alias] analysing function: asinl
 [alias] May-aliases at the end of function asinl: ⊥
+[alias] May-alias graph at the end of function asinl:
+  ⊥
 [alias] analysing function: at_quick_exit
 [alias] May-aliases at the end of function at_quick_exit: ⊥
+[alias] May-alias graph at the end of function at_quick_exit:
+  ⊥
 [alias] analysing function: atan
 [alias] May-aliases at the end of function atan: ⊥
+[alias] May-alias graph at the end of function atan:
+  ⊥
 [alias] analysing function: atan2
 [alias] May-aliases at the end of function atan2: ⊥
+[alias] May-alias graph at the end of function atan2:
+  ⊥
 [alias] analysing function: atan2f
 [alias] May-aliases at the end of function atan2f: ⊥
+[alias] May-alias graph at the end of function atan2f:
+  ⊥
 [alias] analysing function: atan2l
 [alias] May-aliases at the end of function atan2l: ⊥
+[alias] May-alias graph at the end of function atan2l:
+  ⊥
 [alias] analysing function: atanf
 [alias] May-aliases at the end of function atanf: ⊥
+[alias] May-alias graph at the end of function atanf:
+  ⊥
 [alias] analysing function: atanl
 [alias] May-aliases at the end of function atanl: ⊥
+[alias] May-alias graph at the end of function atanl:
+  ⊥
 [alias] analysing function: atexit
 [alias] May-aliases at the end of function atexit: ⊥
+[alias] May-alias graph at the end of function atexit:
+  ⊥
 [alias] analysing function: atof
 [alias] May-aliases at the end of function atof: ⊥
+[alias] May-alias graph at the end of function atof:
+  ⊥
 [alias] analysing function: atoi
 [alias] May-aliases at the end of function atoi: ⊥
+[alias] May-alias graph at the end of function atoi:
+  ⊥
 [alias] analysing function: atol
 [alias] May-aliases at the end of function atol: ⊥
+[alias] May-alias graph at the end of function atol:
+  ⊥
 [alias] analysing function: atoll
 [alias] May-aliases at the end of function atoll: ⊥
+[alias] May-alias graph at the end of function atoll:
+  ⊥
 [alias] analysing function: bsearch
 [alias] May-aliases at the end of function bsearch: ⊥
+[alias] May-alias graph at the end of function bsearch:
+  ⊥
 [alias] analysing function: calloc
 [alias] May-aliases at the end of function calloc: ⊥
+[alias] May-alias graph at the end of function calloc:
+  ⊥
 [alias] analysing function: ceil
 [alias] May-aliases at the end of function ceil: ⊥
+[alias] May-alias graph at the end of function ceil:
+  ⊥
 [alias] analysing function: ceilf
 [alias] May-aliases at the end of function ceilf: ⊥
+[alias] May-alias graph at the end of function ceilf:
+  ⊥
 [alias] analysing function: ceill
 [alias] May-aliases at the end of function ceill: ⊥
+[alias] May-alias graph at the end of function ceill:
+  ⊥
 [alias] analysing function: cos
 [alias] May-aliases at the end of function cos: ⊥
+[alias] May-alias graph at the end of function cos:
+  ⊥
 [alias] analysing function: cosf
 [alias] May-aliases at the end of function cosf: ⊥
+[alias] May-alias graph at the end of function cosf:
+  ⊥
 [alias] analysing function: cosl
 [alias] May-aliases at the end of function cosl: ⊥
+[alias] May-alias graph at the end of function cosl:
+  ⊥
 [alias] analysing function: div
 [alias] May-aliases at the end of function div: ⊥
+[alias] May-alias graph at the end of function div:
+  ⊥
 [alias] analysing function: drand48
 [alias] May-aliases at the end of function drand48: ⊥
+[alias] May-alias graph at the end of function drand48:
+  ⊥
 [alias] analysing function: erand48
 [alias] May-aliases at the end of function erand48: ⊥
+[alias] May-alias graph at the end of function erand48:
+  ⊥
 [alias] analysing function: exit
 [alias] May-aliases at the end of function exit: ⊥
+[alias] May-alias graph at the end of function exit:
+  ⊥
 [alias] analysing function: exp
 [alias] May-aliases at the end of function exp: ⊥
+[alias] May-alias graph at the end of function exp:
+  ⊥
 [alias] analysing function: expf
 [alias] May-aliases at the end of function expf: ⊥
+[alias] May-alias graph at the end of function expf:
+  ⊥
 [alias] analysing function: f1
 [alias] analysing instruction: ty *tmp = x;
 [alias] May-aliases after instruction  ty *tmp = x;  are  { x; tmp }
+[alias] May-alias graph after instruction  ty *tmp = x;  is
+  0:{ x; tmp } → 1:{  }
 [alias] analysing instruction:
   idata = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   idata = (double *)malloc((unsigned long)10 * sizeof(double));  are
   { x; tmp }
+[alias] May-alias graph after instruction
+  idata = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  0:{ x; tmp } → 1:{  }   4:{ idata } → 5:{  }
 [alias] analysing instruction: idata = tmp->t2[*(tmp->n2)];
 [alias] May-aliases after instruction  idata = tmp->t2[*(tmp->n2)];  are
   { x; tmp }  { tmp->t2[0..]; idata }
+[alias] May-alias graph after instruction  idata = tmp->t2[*(tmp->n2)];  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
 [alias] analysing instruction: odata = tmp->t1[*(tmp->n1)];
 [alias] May-aliases after instruction  odata = tmp->t1[*(tmp->n1)];  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  odata = tmp->t1[*(tmp->n1)];  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: idx = 0;
 [alias] May-aliases after instruction  idx = 0;  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  idx = 0;  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: tmp_1 = sin(*(idata + idx));
 [alias] analysing function: sin
 [alias] May-aliases at the end of function sin: ⊥
+[alias] May-alias graph at the end of function sin:
+  ⊥
 [alias:undefined:fn] example1.c:45: Warning: function sin has no definition
 [alias] May-aliases after instruction  tmp_1 = sin(*(idata + idx));  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  tmp_1 = sin(*(idata + idx));  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: *(odata + idx) = 0.5 * tmp_1;
 [alias] May-aliases after instruction  *(odata + idx) = 0.5 * tmp_1;  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  *(odata + idx) = 0.5 * tmp_1;  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: idx ++;
 [alias] May-aliases after instruction  idx ++;  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  idx ++;  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: swap(tmp->n1);
 [alias] analysing function: swap
 [alias] analysing instruction: *n = 0;
 [alias] May-aliases after instruction  *n = 0;  are  <none>
+[alias] May-alias graph after instruction  *n = 0;  is    <empty>
 [alias] analysing instruction: (*n) ++;
 [alias] May-aliases after instruction  (*n) ++;  are  <none>
+[alias] May-alias graph after instruction  (*n) ++;  is    <empty>
 [alias] May-aliases at the end of function swap: <none>
+[alias] May-alias graph at the end of function swap:
+  <empty>
+[alias] Summary of function swap:
 [alias] May-aliases after instruction  swap(tmp->n1);  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  swap(tmp->n1);  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: idata = tmp->t2[*(tmp->n2)];
 [alias] May-aliases after instruction  idata = tmp->t2[*(tmp->n2)];  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  idata = tmp->t2[*(tmp->n2)];  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: odata = tmp->t1[*(tmp->n1)];
 [alias] May-aliases after instruction  odata = tmp->t1[*(tmp->n1)];  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  odata = tmp->t1[*(tmp->n1)];  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias:no-return] example1.c:29: Warning: 
   function f1 does not return; analysis may be unsound
 [alias] May-aliases at the end of function f1: <none>
+[alias] May-alias graph at the end of function f1:
+  <empty>
+[alias] Summary of function f1:
+  formals: x    locals: tmp  idata  odata  idx  tmp_1  __retres
+  returns: __retres    state: <none>
 [alias] analysing function: f2
 [alias] analysing instruction: ty *tmp = x;
 [alias] May-aliases after instruction  ty *tmp = x;  are  { x; tmp }
+[alias] May-alias graph after instruction  ty *tmp = x;  is
+  12:{ x; tmp } → 13:{  }
 [alias] analysing instruction:
   idata = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   idata = (double *)malloc((unsigned long)10 * sizeof(double));  are
   { x; tmp }
+[alias] May-alias graph after instruction
+  idata = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  12:{ x; tmp } → 13:{  }   16:{ idata } → 17:{  }
 [alias] analysing instruction: idata = tmp->t1[*(tmp->n1)];
 [alias] May-aliases after instruction  idata = tmp->t1[*(tmp->n1)];  are
   { x; tmp }  { tmp->t1[0..]; idata }
+[alias] May-alias graph after instruction  idata = tmp->t1[*(tmp->n1)];  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
 [alias] analysing instruction: odata = tmp->t2[*(tmp->n2)];
 [alias] May-aliases after instruction  odata = tmp->t2[*(tmp->n2)];  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  odata = tmp->t2[*(tmp->n2)];  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: idx = 0;
 [alias] May-aliases after instruction  idx = 0;  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  idx = 0;  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction:
   *(odata + idx) = (double)3 * *(idata + idx) + (double)1;
 [alias] May-aliases after instruction
   *(odata + idx) = (double)3 * *(idata + idx) + (double)1;  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction
+  *(odata + idx) = (double)3 * *(idata + idx) + (double)1;  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: idx ++;
 [alias] May-aliases after instruction  idx ++;  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  idx ++;  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: swap(tmp->n2);
 [alias] May-aliases after instruction  swap(tmp->n2);  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  swap(tmp->n2);  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: idata = tmp->t1[*(tmp->n1)];
 [alias] May-aliases after instruction  idata = tmp->t1[*(tmp->n1)];  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  idata = tmp->t1[*(tmp->n1)];  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: odata = tmp->t2[*(tmp->n2)];
 [alias] May-aliases after instruction  odata = tmp->t2[*(tmp->n2)];  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  odata = tmp->t2[*(tmp->n2)];  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias:no-return] example1.c:53: Warning: 
   function f2 does not return; analysis may be unsound
 [alias] May-aliases at the end of function f2: <none>
+[alias] May-alias graph at the end of function f2:
+  <empty>
+[alias] Summary of function f2:
+  formals: x    locals: tmp  idx  idata  odata  __retres
+  returns: __retres    state: <none>
 [alias] analysing function: fabs
 [alias] May-aliases at the end of function fabs: ⊥
+[alias] May-alias graph at the end of function fabs:
+  ⊥
 [alias] analysing function: fabsf
 [alias] May-aliases at the end of function fabsf: ⊥
+[alias] May-alias graph at the end of function fabsf:
+  ⊥
 [alias] analysing function: fabsl
 [alias] May-aliases at the end of function fabsl: ⊥
+[alias] May-alias graph at the end of function fabsl:
+  ⊥
 [alias] analysing function: floor
 [alias] May-aliases at the end of function floor: ⊥
+[alias] May-alias graph at the end of function floor:
+  ⊥
 [alias] analysing function: floorf
 [alias] May-aliases at the end of function floorf: ⊥
+[alias] May-alias graph at the end of function floorf:
+  ⊥
 [alias] analysing function: floorl
 [alias] May-aliases at the end of function floorl: ⊥
+[alias] May-alias graph at the end of function floorl:
+  ⊥
 [alias] analysing function: fmod
 [alias] May-aliases at the end of function fmod: ⊥
+[alias] May-alias graph at the end of function fmod:
+  ⊥
 [alias] analysing function: fmodf
 [alias] May-aliases at the end of function fmodf: ⊥
+[alias] May-alias graph at the end of function fmodf:
+  ⊥
 [alias] analysing function: free
 [alias] May-aliases at the end of function free: ⊥
+[alias] May-alias graph at the end of function free:
+  ⊥
 [alias] analysing function: frexp
 [alias] May-aliases at the end of function frexp: ⊥
+[alias] May-alias graph at the end of function frexp:
+  ⊥
 [alias] analysing function: frexpf
 [alias] May-aliases at the end of function frexpf: ⊥
+[alias] May-alias graph at the end of function frexpf:
+  ⊥
 [alias] analysing function: frexpl
 [alias] May-aliases at the end of function frexpl: ⊥
+[alias] May-alias graph at the end of function frexpl:
+  ⊥
 [alias] analysing function: getenv
 [alias] May-aliases at the end of function getenv: ⊥
+[alias] May-alias graph at the end of function getenv:
+  ⊥
 [alias] analysing function: jrand48
 [alias] May-aliases at the end of function jrand48: ⊥
+[alias] May-alias graph at the end of function jrand48:
+  ⊥
 [alias] analysing function: labs
 [alias] May-aliases at the end of function labs: ⊥
+[alias] May-alias graph at the end of function labs:
+  ⊥
 [alias] analysing function: lcong48
 [alias] May-aliases at the end of function lcong48: ⊥
+[alias] May-alias graph at the end of function lcong48:
+  ⊥
 [alias] analysing function: ldexp
 [alias] May-aliases at the end of function ldexp: ⊥
+[alias] May-alias graph at the end of function ldexp:
+  ⊥
 [alias] analysing function: ldexpf
 [alias] May-aliases at the end of function ldexpf: ⊥
+[alias] May-alias graph at the end of function ldexpf:
+  ⊥
 [alias] analysing function: ldiv
 [alias] May-aliases at the end of function ldiv: ⊥
+[alias] May-alias graph at the end of function ldiv:
+  ⊥
 [alias] analysing function: llabs
 [alias] May-aliases at the end of function llabs: ⊥
+[alias] May-alias graph at the end of function llabs:
+  ⊥
 [alias] analysing function: lldiv
 [alias] May-aliases at the end of function lldiv: ⊥
+[alias] May-alias graph at the end of function lldiv:
+  ⊥
 [alias] analysing function: log
 [alias] May-aliases at the end of function log: ⊥
+[alias] May-alias graph at the end of function log:
+  ⊥
 [alias] analysing function: log10
 [alias] May-aliases at the end of function log10: ⊥
+[alias] May-alias graph at the end of function log10:
+  ⊥
 [alias] analysing function: log10f
 [alias] May-aliases at the end of function log10f: ⊥
+[alias] May-alias graph at the end of function log10f:
+  ⊥
 [alias] analysing function: log10l
 [alias] May-aliases at the end of function log10l: ⊥
+[alias] May-alias graph at the end of function log10l:
+  ⊥
 [alias] analysing function: log2
 [alias] May-aliases at the end of function log2: ⊥
+[alias] May-alias graph at the end of function log2:
+  ⊥
 [alias] analysing function: log2f
 [alias] May-aliases at the end of function log2f: ⊥
+[alias] May-alias graph at the end of function log2f:
+  ⊥
 [alias] analysing function: log2l
 [alias] May-aliases at the end of function log2l: ⊥
+[alias] May-alias graph at the end of function log2l:
+  ⊥
 [alias] analysing function: logf
 [alias] May-aliases at the end of function logf: ⊥
+[alias] May-alias graph at the end of function logf:
+  ⊥
 [alias] analysing function: logl
 [alias] May-aliases at the end of function logl: ⊥
+[alias] May-alias graph at the end of function logl:
+  ⊥
 [alias] analysing function: lrand48
 [alias] May-aliases at the end of function lrand48: ⊥
+[alias] May-alias graph at the end of function lrand48:
+  ⊥
 [alias] analysing function: main
 [alias] analysing instruction: a = (ty *)malloc(sizeof(ty));
 [alias] May-aliases after instruction  a = (ty *)malloc(sizeof(ty));  are  <none>
+[alias] May-alias graph after instruction  a = (ty *)malloc(sizeof(ty));  is
+  24:{ a } → 25:{  }
 [alias] analysing instruction: b = (ty *)malloc(sizeof(ty));
 [alias] May-aliases after instruction  b = (ty *)malloc(sizeof(ty));  are  <none>
+[alias] May-alias graph after instruction  b = (ty *)malloc(sizeof(ty));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
 [alias] analysing instruction: i = 0;
 [alias] May-aliases after instruction  i = 0;  are  <none>
+[alias] May-alias graph after instruction  i = 0;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
 [alias] analysing instruction:
   a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));  are  
   <none>
+[alias] May-alias graph after instruction
+  a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
 [alias] analysing instruction:
   a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));  are  
   <none>
+[alias] May-alias graph after instruction
+  a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }
 [alias] analysing instruction: i ++;
 [alias] May-aliases after instruction  i ++;  are  <none>
+[alias] May-alias graph after instruction  i ++;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }
 [alias] analysing instruction:
   a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));  are  
   <none>
+[alias] May-alias graph after instruction
+  a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }
 [alias] analysing instruction:
   a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));  are  
   <none>
+[alias] May-alias graph after instruction
+  a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }
 [alias] analysing instruction: a->n1 = (int *)malloc(sizeof(int));
 [alias] May-aliases after instruction  a->n1 = (int *)malloc(sizeof(int));  are
   <none>
+[alias] May-alias graph after instruction  a->n1 = (int *)malloc(sizeof(int));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
 [alias] analysing instruction: a->n2 = (int *)malloc(sizeof(int));
 [alias] May-aliases after instruction  a->n2 = (int *)malloc(sizeof(int));  are
   <none>
+[alias] May-alias graph after instruction  a->n2 = (int *)malloc(sizeof(int));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: *(a->n1) = 1;
 [alias] May-aliases after instruction  *(a->n1) = 1;  are  <none>
+[alias] May-alias graph after instruction  *(a->n1) = 1;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: *(a->n2) = 1;
 [alias] May-aliases after instruction  *(a->n2) = 1;  are  <none>
+[alias] May-alias graph after instruction  *(a->n2) = 1;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: i = 0;
 [alias] May-aliases after instruction  i = 0;  are  <none>
+[alias] May-alias graph after instruction  i = 0;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: b->t1[i] = a->t1[i];
 [alias] May-aliases after instruction  b->t1[i] = a->t1[i];  are
   { a->t1[0..]; b->t1[0..] }
+[alias] May-alias graph after instruction  b->t1[i] = a->t1[i];  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   30:{ a->t2[0..] } → 31:{  }
+  32:{ a->n1 } → 33:{  }   34:{ a->n2 } → 35:{  }
+  36:{ a->t1[0..]; b->t1[0..] } → 29:{  }
 [alias] analysing instruction: b->t2[i] = a->t2[i];
 [alias] May-aliases after instruction  b->t2[i] = a->t2[i];  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }
+[alias] May-alias graph after instruction  b->t2[i] = a->t2[i];  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }   36:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  37:{ a->t2[0..]; b->t2[0..] } → 31:{  }
 [alias] analysing instruction: i ++;
 [alias] May-aliases after instruction  i ++;  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }
+[alias] May-alias graph after instruction  i ++;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }   36:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  37:{ a->t2[0..]; b->t2[0..] } → 31:{  }
 [alias] analysing instruction: b->t1[i] = a->t1[i];
 [alias] May-aliases after instruction  b->t1[i] = a->t1[i];  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }
+[alias] May-alias graph after instruction  b->t1[i] = a->t1[i];  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: b->t2[i] = a->t2[i];
 [alias] May-aliases after instruction  b->t2[i] = a->t2[i];  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }
+[alias] May-alias graph after instruction  b->t2[i] = a->t2[i];  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: b->n1 = a->n1;
 [alias] May-aliases after instruction  b->n1 = a->n1;  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
+[alias] May-alias graph after instruction  b->n1 = a->n1;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   34:{ a->n2 } → 35:{  }
+  38:{ a->n1; b->n1 } → 33:{  }
 [alias] analysing instruction: b->n2 = a->n2;
 [alias] May-aliases after instruction  b->n2 = a->n2;  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
   { a->n2; b->n2 }
+[alias] May-alias graph after instruction  b->n2 = a->n2;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   38:{ a->n1; b->n1 } → 33:{  }
+  39:{ a->n2; b->n2 } → 35:{  }
 [alias] analysing instruction: f1(a);
 [alias] May-aliases after instruction  f1(a);  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
   { a->n2; b->n2 }
+[alias] May-alias graph after instruction  f1(a);  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   38:{ a->n1; b->n1 } → 33:{  }
+  39:{ a->n2; b->n2 } → 35:{  }
 [alias] analysing instruction: f2(b);
 [alias] May-aliases after instruction  f2(b);  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
   { a->n2; b->n2 }
+[alias] May-alias graph after instruction  f2(b);  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   38:{ a->n1; b->n1 } → 33:{  }
+  39:{ a->n2; b->n2 } → 35:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
   { a->n2; b->n2 }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   38:{ a->n1; b->n1 } → 33:{  }
+  39:{ a->n2; b->n2 } → 35:{  }
 [alias] May-aliases at the end of function main:
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
   { a->n2; b->n2 }
+[alias] May-alias graph at the end of function main:
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   38:{ a->n1; b->n1 } → 33:{  }
+  39:{ a->n2; b->n2 } → 35:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  i  __retres    returns: __retres
+  state: { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }
+         { a->n1; b->n1 }  { a->n2; b->n2 }
 [alias] analysing function: malloc
 [alias] May-aliases at the end of function malloc: ⊥
+[alias] May-alias graph at the end of function malloc:
+  ⊥
 [alias] analysing function: mblen
 [alias] May-aliases at the end of function mblen: ⊥
+[alias] May-alias graph at the end of function mblen:
+  ⊥
 [alias] analysing function: mbstowcs
 [alias] May-aliases at the end of function mbstowcs: ⊥
+[alias] May-alias graph at the end of function mbstowcs:
+  ⊥
 [alias] analysing function: mbtowc
 [alias] May-aliases at the end of function mbtowc: ⊥
+[alias] May-alias graph at the end of function mbtowc:
+  ⊥
 [alias] analysing function: mkstemp
 [alias] May-aliases at the end of function mkstemp: ⊥
+[alias] May-alias graph at the end of function mkstemp:
+  ⊥
 [alias] analysing function: mkstemps
 [alias] May-aliases at the end of function mkstemps: ⊥
+[alias] May-alias graph at the end of function mkstemps:
+  ⊥
 [alias] analysing function: mrand48
 [alias] May-aliases at the end of function mrand48: ⊥
+[alias] May-alias graph at the end of function mrand48:
+  ⊥
 [alias] analysing function: nan
 [alias] May-aliases at the end of function nan: ⊥
+[alias] May-alias graph at the end of function nan:
+  ⊥
 [alias] analysing function: nanf
 [alias] May-aliases at the end of function nanf: ⊥
+[alias] May-alias graph at the end of function nanf:
+  ⊥
 [alias] analysing function: nanl
 [alias] May-aliases at the end of function nanl: ⊥
+[alias] May-alias graph at the end of function nanl:
+  ⊥
 [alias] analysing function: nrand48
 [alias] May-aliases at the end of function nrand48: ⊥
+[alias] May-alias graph at the end of function nrand48:
+  ⊥
 [alias] analysing function: posix_memalign
 [alias] May-aliases at the end of function posix_memalign: ⊥
+[alias] May-alias graph at the end of function posix_memalign:
+  ⊥
 [alias] analysing function: pow
 [alias] May-aliases at the end of function pow: ⊥
+[alias] May-alias graph at the end of function pow:
+  ⊥
 [alias] analysing function: powf
 [alias] May-aliases at the end of function powf: ⊥
+[alias] May-alias graph at the end of function powf:
+  ⊥
 [alias] analysing function: putenv
 [alias] May-aliases at the end of function putenv: ⊥
+[alias] May-alias graph at the end of function putenv:
+  ⊥
 [alias] analysing function: qsort
 [alias] May-aliases at the end of function qsort: ⊥
+[alias] May-alias graph at the end of function qsort:
+  ⊥
 [alias] analysing function: quick_exit
 [alias] May-aliases at the end of function quick_exit: ⊥
+[alias] May-alias graph at the end of function quick_exit:
+  ⊥
 [alias] analysing function: rand
 [alias] May-aliases at the end of function rand: ⊥
+[alias] May-alias graph at the end of function rand:
+  ⊥
 [alias] analysing function: random
 [alias] May-aliases at the end of function random: ⊥
+[alias] May-alias graph at the end of function random:
+  ⊥
 [alias] analysing function: realloc
 [alias] May-aliases at the end of function realloc: ⊥
+[alias] May-alias graph at the end of function realloc:
+  ⊥
 [alias] analysing function: reallocarray
 [alias] May-aliases at the end of function reallocarray: ⊥
+[alias] May-alias graph at the end of function reallocarray:
+  ⊥
 [alias] analysing function: round
 [alias] May-aliases at the end of function round: ⊥
+[alias] May-alias graph at the end of function round:
+  ⊥
 [alias] analysing function: roundf
 [alias] May-aliases at the end of function roundf: ⊥
+[alias] May-alias graph at the end of function roundf:
+  ⊥
 [alias] analysing function: roundl
 [alias] May-aliases at the end of function roundl: ⊥
+[alias] May-alias graph at the end of function roundl:
+  ⊥
 [alias] analysing function: seed48
 [alias] May-aliases at the end of function seed48: ⊥
+[alias] May-alias graph at the end of function seed48:
+  ⊥
 [alias] analysing function: setenv
 [alias] May-aliases at the end of function setenv: ⊥
+[alias] May-alias graph at the end of function setenv:
+  ⊥
 [alias] analysing function: sin
 [alias] May-aliases at the end of function sin: ⊥
+[alias] May-alias graph at the end of function sin:
+  ⊥
 [alias] analysing function: sinf
 [alias] May-aliases at the end of function sinf: ⊥
+[alias] May-alias graph at the end of function sinf:
+  ⊥
 [alias] analysing function: sinl
 [alias] May-aliases at the end of function sinl: ⊥
+[alias] May-alias graph at the end of function sinl:
+  ⊥
 [alias] analysing function: sqrt
 [alias] May-aliases at the end of function sqrt: ⊥
+[alias] May-alias graph at the end of function sqrt:
+  ⊥
 [alias] analysing function: sqrtf
 [alias] May-aliases at the end of function sqrtf: ⊥
+[alias] May-alias graph at the end of function sqrtf:
+  ⊥
 [alias] analysing function: sqrtl
 [alias] May-aliases at the end of function sqrtl: ⊥
+[alias] May-alias graph at the end of function sqrtl:
+  ⊥
 [alias] analysing function: srand
 [alias] May-aliases at the end of function srand: ⊥
+[alias] May-alias graph at the end of function srand:
+  ⊥
 [alias] analysing function: srand48
 [alias] May-aliases at the end of function srand48: ⊥
+[alias] May-alias graph at the end of function srand48:
+  ⊥
 [alias] analysing function: srandom
 [alias] May-aliases at the end of function srandom: ⊥
+[alias] May-alias graph at the end of function srandom:
+  ⊥
 [alias] analysing function: strtod
 [alias] May-aliases at the end of function strtod: ⊥
+[alias] May-alias graph at the end of function strtod:
+  ⊥
 [alias] analysing function: strtof
 [alias] May-aliases at the end of function strtof: ⊥
+[alias] May-alias graph at the end of function strtof:
+  ⊥
 [alias] analysing function: strtol
 [alias] May-aliases at the end of function strtol: ⊥
+[alias] May-alias graph at the end of function strtol:
+  ⊥
 [alias] analysing function: strtold
 [alias] May-aliases at the end of function strtold: ⊥
+[alias] May-alias graph at the end of function strtold:
+  ⊥
 [alias] analysing function: strtoll
 [alias] May-aliases at the end of function strtoll: ⊥
+[alias] May-alias graph at the end of function strtoll:
+  ⊥
 [alias] analysing function: strtoul
 [alias] May-aliases at the end of function strtoul: ⊥
+[alias] May-alias graph at the end of function strtoul:
+  ⊥
 [alias] analysing function: strtoull
 [alias] May-aliases at the end of function strtoull: ⊥
+[alias] May-alias graph at the end of function strtoull:
+  ⊥
 [alias] analysing function: swap
 [alias] May-aliases at the end of function swap: <none>
+[alias] May-alias graph at the end of function swap:
+  <empty>
+[alias] Summary of function swap:
 [alias] analysing function: system
 [alias] May-aliases at the end of function system: ⊥
+[alias] May-alias graph at the end of function system:
+  ⊥
 [alias] analysing function: tan
 [alias] May-aliases at the end of function tan: ⊥
+[alias] May-alias graph at the end of function tan:
+  ⊥
 [alias] analysing function: tanf
 [alias] May-aliases at the end of function tanf: ⊥
+[alias] May-alias graph at the end of function tanf:
+  ⊥
 [alias] analysing function: tanl
 [alias] May-aliases at the end of function tanl: ⊥
+[alias] May-alias graph at the end of function tanl:
+  ⊥
 [alias] analysing function: trunc
 [alias] May-aliases at the end of function trunc: ⊥
+[alias] May-alias graph at the end of function trunc:
+  ⊥
 [alias] analysing function: truncf
 [alias] May-aliases at the end of function truncf: ⊥
+[alias] May-alias graph at the end of function truncf:
+  ⊥
 [alias] analysing function: truncl
 [alias] May-aliases at the end of function truncl: ⊥
+[alias] May-alias graph at the end of function truncl:
+  ⊥
 [alias] analysing function: unsetenv
 [alias] May-aliases at the end of function unsetenv: ⊥
+[alias] May-alias graph at the end of function unsetenv:
+  ⊥
 [alias] analysing function: wcstombs
 [alias] May-aliases at the end of function wcstombs: ⊥
+[alias] May-alias graph at the end of function wcstombs:
+  ⊥
 [alias] analysing function: wctomb
 [alias] May-aliases at the end of function wctomb: ⊥
+[alias] May-alias graph at the end of function wctomb:
+  ⊥
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/real_world/oracle/example2.res.oracle b/src/plugins/alias/tests/real_world/oracle/example2.res.oracle
index 9194ea04e66..fc423c49e94 100644
--- a/src/plugins/alias/tests/real_world/oracle/example2.res.oracle
+++ b/src/plugins/alias/tests/real_world/oracle/example2.res.oracle
@@ -1,433 +1,887 @@
 [kernel] Parsing example2.c (with preprocessing)
 [alias] analysing function: _Exit
 [alias] May-aliases at the end of function _Exit: ⊥
+[alias] May-alias graph at the end of function _Exit:
+  ⊥
 [alias] analysing function: __fc_fpclassify
 [alias] May-aliases at the end of function __fc_fpclassify: ⊥
+[alias] May-alias graph at the end of function __fc_fpclassify:
+  ⊥
 [alias] analysing function: __fc_fpclassifyf
 [alias] May-aliases at the end of function __fc_fpclassifyf: ⊥
+[alias] May-alias graph at the end of function __fc_fpclassifyf:
+  ⊥
 [alias] analysing function: __fc_infinity
 [alias] May-aliases at the end of function __fc_infinity: ⊥
+[alias] May-alias graph at the end of function __fc_infinity:
+  ⊥
 [alias] analysing function: __fc_nan
 [alias] May-aliases at the end of function __fc_nan: ⊥
+[alias] May-alias graph at the end of function __fc_nan:
+  ⊥
 [alias] analysing function: __finite
 [alias] May-aliases at the end of function __finite: ⊥
+[alias] May-alias graph at the end of function __finite:
+  ⊥
 [alias] analysing function: __finitef
 [alias] May-aliases at the end of function __finitef: ⊥
+[alias] May-alias graph at the end of function __finitef:
+  ⊥
 [alias] analysing function: abort
 [alias] May-aliases at the end of function abort: ⊥
+[alias] May-alias graph at the end of function abort:
+  ⊥
 [alias] analysing function: abs
 [alias] May-aliases at the end of function abs: ⊥
+[alias] May-alias graph at the end of function abs:
+  ⊥
 [alias] analysing function: acos
 [alias] May-aliases at the end of function acos: ⊥
+[alias] May-alias graph at the end of function acos:
+  ⊥
 [alias] analysing function: acosf
 [alias] May-aliases at the end of function acosf: ⊥
+[alias] May-alias graph at the end of function acosf:
+  ⊥
 [alias] analysing function: acosh
 [alias] May-aliases at the end of function acosh: ⊥
+[alias] May-alias graph at the end of function acosh:
+  ⊥
 [alias] analysing function: acoshf
 [alias] May-aliases at the end of function acoshf: ⊥
+[alias] May-alias graph at the end of function acoshf:
+  ⊥
 [alias] analysing function: acoshl
 [alias] May-aliases at the end of function acoshl: ⊥
+[alias] May-alias graph at the end of function acoshl:
+  ⊥
 [alias] analysing function: acosl
 [alias] May-aliases at the end of function acosl: ⊥
+[alias] May-alias graph at the end of function acosl:
+  ⊥
 [alias] analysing function: asin
 [alias] May-aliases at the end of function asin: ⊥
+[alias] May-alias graph at the end of function asin:
+  ⊥
 [alias] analysing function: asinf
 [alias] May-aliases at the end of function asinf: ⊥
+[alias] May-alias graph at the end of function asinf:
+  ⊥
 [alias] analysing function: asinl
 [alias] May-aliases at the end of function asinl: ⊥
+[alias] May-alias graph at the end of function asinl:
+  ⊥
 [alias] analysing function: at_quick_exit
 [alias] May-aliases at the end of function at_quick_exit: ⊥
+[alias] May-alias graph at the end of function at_quick_exit:
+  ⊥
 [alias] analysing function: atan
 [alias] May-aliases at the end of function atan: ⊥
+[alias] May-alias graph at the end of function atan:
+  ⊥
 [alias] analysing function: atan2
 [alias] May-aliases at the end of function atan2: ⊥
+[alias] May-alias graph at the end of function atan2:
+  ⊥
 [alias] analysing function: atan2f
 [alias] May-aliases at the end of function atan2f: ⊥
+[alias] May-alias graph at the end of function atan2f:
+  ⊥
 [alias] analysing function: atan2l
 [alias] May-aliases at the end of function atan2l: ⊥
+[alias] May-alias graph at the end of function atan2l:
+  ⊥
 [alias] analysing function: atanf
 [alias] May-aliases at the end of function atanf: ⊥
+[alias] May-alias graph at the end of function atanf:
+  ⊥
 [alias] analysing function: atanl
 [alias] May-aliases at the end of function atanl: ⊥
+[alias] May-alias graph at the end of function atanl:
+  ⊥
 [alias] analysing function: atexit
 [alias] May-aliases at the end of function atexit: ⊥
+[alias] May-alias graph at the end of function atexit:
+  ⊥
 [alias] analysing function: atof
 [alias] May-aliases at the end of function atof: ⊥
+[alias] May-alias graph at the end of function atof:
+  ⊥
 [alias] analysing function: atoi
 [alias] May-aliases at the end of function atoi: ⊥
+[alias] May-alias graph at the end of function atoi:
+  ⊥
 [alias] analysing function: atol
 [alias] May-aliases at the end of function atol: ⊥
+[alias] May-alias graph at the end of function atol:
+  ⊥
 [alias] analysing function: atoll
 [alias] May-aliases at the end of function atoll: ⊥
+[alias] May-alias graph at the end of function atoll:
+  ⊥
 [alias] analysing function: bsearch
 [alias] May-aliases at the end of function bsearch: ⊥
+[alias] May-alias graph at the end of function bsearch:
+  ⊥
 [alias] analysing function: calloc
 [alias] May-aliases at the end of function calloc: ⊥
+[alias] May-alias graph at the end of function calloc:
+  ⊥
 [alias] analysing function: ceil
 [alias] May-aliases at the end of function ceil: ⊥
+[alias] May-alias graph at the end of function ceil:
+  ⊥
 [alias] analysing function: ceilf
 [alias] May-aliases at the end of function ceilf: ⊥
+[alias] May-alias graph at the end of function ceilf:
+  ⊥
 [alias] analysing function: ceill
 [alias] May-aliases at the end of function ceill: ⊥
+[alias] May-alias graph at the end of function ceill:
+  ⊥
 [alias] analysing function: cos
 [alias] May-aliases at the end of function cos: ⊥
+[alias] May-alias graph at the end of function cos:
+  ⊥
 [alias] analysing function: cosf
 [alias] May-aliases at the end of function cosf: ⊥
+[alias] May-alias graph at the end of function cosf:
+  ⊥
 [alias] analysing function: cosl
 [alias] May-aliases at the end of function cosl: ⊥
+[alias] May-alias graph at the end of function cosl:
+  ⊥
 [alias] analysing function: div
 [alias] May-aliases at the end of function div: ⊥
+[alias] May-alias graph at the end of function div:
+  ⊥
 [alias] analysing function: drand48
 [alias] May-aliases at the end of function drand48: ⊥
+[alias] May-alias graph at the end of function drand48:
+  ⊥
 [alias] analysing function: erand48
 [alias] May-aliases at the end of function erand48: ⊥
+[alias] May-alias graph at the end of function erand48:
+  ⊥
 [alias] analysing function: exit
 [alias] May-aliases at the end of function exit: ⊥
+[alias] May-alias graph at the end of function exit:
+  ⊥
 [alias] analysing function: exp
 [alias] May-aliases at the end of function exp: ⊥
+[alias] May-alias graph at the end of function exp:
+  ⊥
 [alias] analysing function: expf
 [alias] May-aliases at the end of function expf: ⊥
+[alias] May-alias graph at the end of function expf:
+  ⊥
 [alias] analysing function: f1
 [alias] analysing instruction: ty *tmp = x;
 [alias] May-aliases after instruction  ty *tmp = x;  are  { x; tmp }
+[alias] May-alias graph after instruction  ty *tmp = x;  is
+  0:{ x; tmp } → 1:{  }
 [alias] analysing instruction:
   idata = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   idata = (double *)malloc((unsigned long)10 * sizeof(double));  are
   { x; tmp }
+[alias] May-alias graph after instruction
+  idata = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  0:{ x; tmp } → 1:{  }   4:{ idata } → 5:{  }
 [alias] analysing instruction: int i = 0;
 [alias] May-aliases after instruction  int i = 0;  are  { x; tmp }
+[alias] May-alias graph after instruction  int i = 0;  is
+  0:{ x; tmp } → 1:{  }   4:{ idata } → 5:{  }
 [alias] analysing instruction: idata = tmp->t2[*(tmp->n2)];
 [alias] May-aliases after instruction  idata = tmp->t2[*(tmp->n2)];  are
   { x; tmp }  { tmp->t2[0..]; idata }
+[alias] May-alias graph after instruction  idata = tmp->t2[*(tmp->n2)];  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
 [alias] analysing instruction: odata = tmp->t1[*(tmp->n1)];
 [alias] May-aliases after instruction  odata = tmp->t1[*(tmp->n1)];  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  odata = tmp->t1[*(tmp->n1)];  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: idx = 0;
 [alias] May-aliases after instruction  idx = 0;  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  idx = 0;  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: tmp_1 = sin(*(idata + idx));
 [alias] analysing function: sin
 [alias] May-aliases at the end of function sin: ⊥
+[alias] May-alias graph at the end of function sin:
+  ⊥
 [alias:undefined:fn] example2.c:45: Warning: function sin has no definition
 [alias] May-aliases after instruction  tmp_1 = sin(*(idata + idx));  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  tmp_1 = sin(*(idata + idx));  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: *(odata + idx) = 0.5 * tmp_1;
 [alias] May-aliases after instruction  *(odata + idx) = 0.5 * tmp_1;  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  *(odata + idx) = 0.5 * tmp_1;  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: idx ++;
 [alias] May-aliases after instruction  idx ++;  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  idx ++;  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: swap(tmp->n1);
 [alias] analysing function: swap
 [alias] analysing instruction: *n = 0;
 [alias] May-aliases after instruction  *n = 0;  are  <none>
+[alias] May-alias graph after instruction  *n = 0;  is    <empty>
 [alias] analysing instruction: (*n) ++;
 [alias] May-aliases after instruction  (*n) ++;  are  <none>
+[alias] May-alias graph after instruction  (*n) ++;  is    <empty>
 [alias] May-aliases at the end of function swap: <none>
+[alias] May-alias graph at the end of function swap:
+  <empty>
+[alias] Summary of function swap:
 [alias] May-aliases after instruction  swap(tmp->n1);  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  swap(tmp->n1);  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: i ++;
 [alias] May-aliases after instruction  i ++;  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  i ++;  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: idata = tmp->t2[*(tmp->n2)];
 [alias] May-aliases after instruction  idata = tmp->t2[*(tmp->n2)];  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  idata = tmp->t2[*(tmp->n2)];  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: odata = tmp->t1[*(tmp->n1)];
 [alias] May-aliases after instruction  odata = tmp->t1[*(tmp->n1)];  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  odata = tmp->t1[*(tmp->n1)];  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] analysing instruction: __retres = (void *)0;
 [alias] May-aliases after instruction  __retres = (void *)0;  are
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph after instruction  __retres = (void *)0;  is
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
 [alias] May-aliases at the end of function f1:
   { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
+[alias] May-alias graph at the end of function f1:
+  0:{ x; tmp } → 1:{  }   4:{ tmp->t2[0..]; idata } → 5:{  }
+  7:{ tmp->t1[0..]; odata } → 8:{  }
+[alias] Summary of function f1:
+  formals: x    locals: tmp  idata  odata  idx  i  tmp_1  __retres
+  returns: __retres
+  state: { x; tmp }  { tmp->t2[0..]; idata }  { tmp->t1[0..]; odata }
 [alias] analysing function: f2
 [alias] analysing instruction: ty *tmp = x;
 [alias] May-aliases after instruction  ty *tmp = x;  are  { x; tmp }
+[alias] May-alias graph after instruction  ty *tmp = x;  is
+  12:{ x; tmp } → 13:{  }
 [alias] analysing instruction:
   idata = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   idata = (double *)malloc((unsigned long)10 * sizeof(double));  are
   { x; tmp }
+[alias] May-alias graph after instruction
+  idata = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  12:{ x; tmp } → 13:{  }   16:{ idata } → 17:{  }
 [alias] analysing instruction: int i = 0;
 [alias] May-aliases after instruction  int i = 0;  are  { x; tmp }
+[alias] May-alias graph after instruction  int i = 0;  is
+  12:{ x; tmp } → 13:{  }   16:{ idata } → 17:{  }
 [alias] analysing instruction: idata = tmp->t1[*(tmp->n1)];
 [alias] May-aliases after instruction  idata = tmp->t1[*(tmp->n1)];  are
   { x; tmp }  { tmp->t1[0..]; idata }
+[alias] May-alias graph after instruction  idata = tmp->t1[*(tmp->n1)];  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
 [alias] analysing instruction: odata = tmp->t2[*(tmp->n2)];
 [alias] May-aliases after instruction  odata = tmp->t2[*(tmp->n2)];  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  odata = tmp->t2[*(tmp->n2)];  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: idx = 0;
 [alias] May-aliases after instruction  idx = 0;  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  idx = 0;  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction:
   *(odata + idx) = (double)3 * *(idata + idx) + (double)1;
 [alias] May-aliases after instruction
   *(odata + idx) = (double)3 * *(idata + idx) + (double)1;  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction
+  *(odata + idx) = (double)3 * *(idata + idx) + (double)1;  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: idx ++;
 [alias] May-aliases after instruction  idx ++;  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  idx ++;  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: swap(tmp->n2);
 [alias] May-aliases after instruction  swap(tmp->n2);  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  swap(tmp->n2);  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: i ++;
 [alias] May-aliases after instruction  i ++;  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  i ++;  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: idata = tmp->t1[*(tmp->n1)];
 [alias] May-aliases after instruction  idata = tmp->t1[*(tmp->n1)];  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  idata = tmp->t1[*(tmp->n1)];  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: odata = tmp->t2[*(tmp->n2)];
 [alias] May-aliases after instruction  odata = tmp->t2[*(tmp->n2)];  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  odata = tmp->t2[*(tmp->n2)];  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] analysing instruction: __retres = (void *)0;
 [alias] May-aliases after instruction  __retres = (void *)0;  are
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph after instruction  __retres = (void *)0;  is
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
 [alias] May-aliases at the end of function f2:
   { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
+[alias] May-alias graph at the end of function f2:
+  12:{ x; tmp } → 13:{  }   16:{ tmp->t1[0..]; idata } → 17:{  }
+  19:{ tmp->t2[0..]; odata } → 20:{  }
+[alias] Summary of function f2:
+  formals: x    locals: tmp  idx  idata  odata  i  __retres
+  returns: __retres
+  state: { x; tmp }  { tmp->t1[0..]; idata }  { tmp->t2[0..]; odata }
 [alias] analysing function: fabs
 [alias] May-aliases at the end of function fabs: ⊥
+[alias] May-alias graph at the end of function fabs:
+  ⊥
 [alias] analysing function: fabsf
 [alias] May-aliases at the end of function fabsf: ⊥
+[alias] May-alias graph at the end of function fabsf:
+  ⊥
 [alias] analysing function: fabsl
 [alias] May-aliases at the end of function fabsl: ⊥
+[alias] May-alias graph at the end of function fabsl:
+  ⊥
 [alias] analysing function: floor
 [alias] May-aliases at the end of function floor: ⊥
+[alias] May-alias graph at the end of function floor:
+  ⊥
 [alias] analysing function: floorf
 [alias] May-aliases at the end of function floorf: ⊥
+[alias] May-alias graph at the end of function floorf:
+  ⊥
 [alias] analysing function: floorl
 [alias] May-aliases at the end of function floorl: ⊥
+[alias] May-alias graph at the end of function floorl:
+  ⊥
 [alias] analysing function: fmod
 [alias] May-aliases at the end of function fmod: ⊥
+[alias] May-alias graph at the end of function fmod:
+  ⊥
 [alias] analysing function: fmodf
 [alias] May-aliases at the end of function fmodf: ⊥
+[alias] May-alias graph at the end of function fmodf:
+  ⊥
 [alias] analysing function: free
 [alias] May-aliases at the end of function free: ⊥
+[alias] May-alias graph at the end of function free:
+  ⊥
 [alias] analysing function: frexp
 [alias] May-aliases at the end of function frexp: ⊥
+[alias] May-alias graph at the end of function frexp:
+  ⊥
 [alias] analysing function: frexpf
 [alias] May-aliases at the end of function frexpf: ⊥
+[alias] May-alias graph at the end of function frexpf:
+  ⊥
 [alias] analysing function: frexpl
 [alias] May-aliases at the end of function frexpl: ⊥
+[alias] May-alias graph at the end of function frexpl:
+  ⊥
 [alias] analysing function: getenv
 [alias] May-aliases at the end of function getenv: ⊥
+[alias] May-alias graph at the end of function getenv:
+  ⊥
 [alias] analysing function: jrand48
 [alias] May-aliases at the end of function jrand48: ⊥
+[alias] May-alias graph at the end of function jrand48:
+  ⊥
 [alias] analysing function: labs
 [alias] May-aliases at the end of function labs: ⊥
+[alias] May-alias graph at the end of function labs:
+  ⊥
 [alias] analysing function: lcong48
 [alias] May-aliases at the end of function lcong48: ⊥
+[alias] May-alias graph at the end of function lcong48:
+  ⊥
 [alias] analysing function: ldexp
 [alias] May-aliases at the end of function ldexp: ⊥
+[alias] May-alias graph at the end of function ldexp:
+  ⊥
 [alias] analysing function: ldexpf
 [alias] May-aliases at the end of function ldexpf: ⊥
+[alias] May-alias graph at the end of function ldexpf:
+  ⊥
 [alias] analysing function: ldiv
 [alias] May-aliases at the end of function ldiv: ⊥
+[alias] May-alias graph at the end of function ldiv:
+  ⊥
 [alias] analysing function: llabs
 [alias] May-aliases at the end of function llabs: ⊥
+[alias] May-alias graph at the end of function llabs:
+  ⊥
 [alias] analysing function: lldiv
 [alias] May-aliases at the end of function lldiv: ⊥
+[alias] May-alias graph at the end of function lldiv:
+  ⊥
 [alias] analysing function: log
 [alias] May-aliases at the end of function log: ⊥
+[alias] May-alias graph at the end of function log:
+  ⊥
 [alias] analysing function: log10
 [alias] May-aliases at the end of function log10: ⊥
+[alias] May-alias graph at the end of function log10:
+  ⊥
 [alias] analysing function: log10f
 [alias] May-aliases at the end of function log10f: ⊥
+[alias] May-alias graph at the end of function log10f:
+  ⊥
 [alias] analysing function: log10l
 [alias] May-aliases at the end of function log10l: ⊥
+[alias] May-alias graph at the end of function log10l:
+  ⊥
 [alias] analysing function: log2
 [alias] May-aliases at the end of function log2: ⊥
+[alias] May-alias graph at the end of function log2:
+  ⊥
 [alias] analysing function: log2f
 [alias] May-aliases at the end of function log2f: ⊥
+[alias] May-alias graph at the end of function log2f:
+  ⊥
 [alias] analysing function: log2l
 [alias] May-aliases at the end of function log2l: ⊥
+[alias] May-alias graph at the end of function log2l:
+  ⊥
 [alias] analysing function: logf
 [alias] May-aliases at the end of function logf: ⊥
+[alias] May-alias graph at the end of function logf:
+  ⊥
 [alias] analysing function: logl
 [alias] May-aliases at the end of function logl: ⊥
+[alias] May-alias graph at the end of function logl:
+  ⊥
 [alias] analysing function: lrand48
 [alias] May-aliases at the end of function lrand48: ⊥
+[alias] May-alias graph at the end of function lrand48:
+  ⊥
 [alias] analysing function: main
 [alias] analysing instruction: a = (ty *)malloc(sizeof(ty));
 [alias] May-aliases after instruction  a = (ty *)malloc(sizeof(ty));  are  <none>
+[alias] May-alias graph after instruction  a = (ty *)malloc(sizeof(ty));  is
+  24:{ a } → 25:{  }
 [alias] analysing instruction: b = (ty *)malloc(sizeof(ty));
 [alias] May-aliases after instruction  b = (ty *)malloc(sizeof(ty));  are  <none>
+[alias] May-alias graph after instruction  b = (ty *)malloc(sizeof(ty));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
 [alias] analysing instruction: i = 0;
 [alias] May-aliases after instruction  i = 0;  are  <none>
+[alias] May-alias graph after instruction  i = 0;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
 [alias] analysing instruction:
   a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));  are  
   <none>
+[alias] May-alias graph after instruction
+  a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
 [alias] analysing instruction:
   a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));  are  
   <none>
+[alias] May-alias graph after instruction
+  a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }
 [alias] analysing instruction: i ++;
 [alias] May-aliases after instruction  i ++;  are  <none>
+[alias] May-alias graph after instruction  i ++;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }
 [alias] analysing instruction:
   a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));  are  
   <none>
+[alias] May-alias graph after instruction
+  a->t1[i] = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }
 [alias] analysing instruction:
   a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));
 [alias] May-aliases after instruction
   a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));  are  
   <none>
+[alias] May-alias graph after instruction
+  a->t2[i] = (double *)malloc((unsigned long)10 * sizeof(double));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }
 [alias] analysing instruction: a->n1 = (int *)malloc(sizeof(int));
 [alias] May-aliases after instruction  a->n1 = (int *)malloc(sizeof(int));  are
   <none>
+[alias] May-alias graph after instruction  a->n1 = (int *)malloc(sizeof(int));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
 [alias] analysing instruction: a->n2 = (int *)malloc(sizeof(int));
 [alias] May-aliases after instruction  a->n2 = (int *)malloc(sizeof(int));  are
   <none>
+[alias] May-alias graph after instruction  a->n2 = (int *)malloc(sizeof(int));  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: *(a->n1) = 1;
 [alias] May-aliases after instruction  *(a->n1) = 1;  are  <none>
+[alias] May-alias graph after instruction  *(a->n1) = 1;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: *(a->n2) = 1;
 [alias] May-aliases after instruction  *(a->n2) = 1;  are  <none>
+[alias] May-alias graph after instruction  *(a->n2) = 1;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: i = 0;
 [alias] May-aliases after instruction  i = 0;  are  <none>
+[alias] May-alias graph after instruction  i = 0;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   28:{ a->t1[0..] } → 29:{  }
+  30:{ a->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: b->t1[i] = a->t1[i];
 [alias] May-aliases after instruction  b->t1[i] = a->t1[i];  are
   { a->t1[0..]; b->t1[0..] }
+[alias] May-alias graph after instruction  b->t1[i] = a->t1[i];  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   30:{ a->t2[0..] } → 31:{  }
+  32:{ a->n1 } → 33:{  }   34:{ a->n2 } → 35:{  }
+  36:{ a->t1[0..]; b->t1[0..] } → 29:{  }
 [alias] analysing instruction: b->t2[i] = a->t2[i];
 [alias] May-aliases after instruction  b->t2[i] = a->t2[i];  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }
+[alias] May-alias graph after instruction  b->t2[i] = a->t2[i];  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }   36:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  37:{ a->t2[0..]; b->t2[0..] } → 31:{  }
 [alias] analysing instruction: i ++;
 [alias] May-aliases after instruction  i ++;  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }
+[alias] May-alias graph after instruction  i ++;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }   36:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  37:{ a->t2[0..]; b->t2[0..] } → 31:{  }
 [alias] analysing instruction: b->t1[i] = a->t1[i];
 [alias] May-aliases after instruction  b->t1[i] = a->t1[i];  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }
+[alias] May-alias graph after instruction  b->t1[i] = a->t1[i];  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: b->t2[i] = a->t2[i];
 [alias] May-aliases after instruction  b->t2[i] = a->t2[i];  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }
+[alias] May-alias graph after instruction  b->t2[i] = a->t2[i];  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   32:{ a->n1 } → 33:{  }
+  34:{ a->n2 } → 35:{  }
 [alias] analysing instruction: b->n1 = a->n1;
 [alias] May-aliases after instruction  b->n1 = a->n1;  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
+[alias] May-alias graph after instruction  b->n1 = a->n1;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   34:{ a->n2 } → 35:{  }
+  38:{ a->n1; b->n1 } → 33:{  }
 [alias] analysing instruction: b->n2 = a->n2;
 [alias] May-aliases after instruction  b->n2 = a->n2;  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
   { a->n2; b->n2 }
+[alias] May-alias graph after instruction  b->n2 = a->n2;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   38:{ a->n1; b->n1 } → 33:{  }
+  39:{ a->n2; b->n2 } → 35:{  }
 [alias] analysing instruction: f1(a);
 [alias] May-aliases after instruction  f1(a);  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
   { a->n2; b->n2 }
+[alias] May-alias graph after instruction  f1(a);  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   38:{ a->n1; b->n1 } → 33:{  }
+  39:{ a->n2; b->n2 } → 35:{  }
 [alias] analysing instruction: f2(b);
 [alias] May-aliases after instruction  f2(b);  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
   { a->n2; b->n2 }
+[alias] May-alias graph after instruction  f2(b);  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   38:{ a->n1; b->n1 } → 33:{  }
+  39:{ a->n2; b->n2 } → 35:{  }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
   { a->n2; b->n2 }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   38:{ a->n1; b->n1 } → 33:{  }
+  39:{ a->n2; b->n2 } → 35:{  }
 [alias] May-aliases at the end of function main:
   { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }  { a->n1; b->n1 }
   { a->n2; b->n2 }
+[alias] May-alias graph at the end of function main:
+  24:{ a } → 25:{  }   26:{ b } → 27:{  }
+  28:{ a->t1[0..]; b->t1[0..] } → 29:{  }
+  30:{ a->t2[0..]; b->t2[0..] } → 31:{  }   38:{ a->n1; b->n1 } → 33:{  }
+  39:{ a->n2; b->n2 } → 35:{  }
+[alias] Summary of function main:
+  formals:     locals: a  b  i  __retres    returns: __retres
+  state: { a->t1[0..]; b->t1[0..] }  { a->t2[0..]; b->t2[0..] }
+         { a->n1; b->n1 }  { a->n2; b->n2 }
 [alias] analysing function: malloc
 [alias] May-aliases at the end of function malloc: ⊥
+[alias] May-alias graph at the end of function malloc:
+  ⊥
 [alias] analysing function: mblen
 [alias] May-aliases at the end of function mblen: ⊥
+[alias] May-alias graph at the end of function mblen:
+  ⊥
 [alias] analysing function: mbstowcs
 [alias] May-aliases at the end of function mbstowcs: ⊥
+[alias] May-alias graph at the end of function mbstowcs:
+  ⊥
 [alias] analysing function: mbtowc
 [alias] May-aliases at the end of function mbtowc: ⊥
+[alias] May-alias graph at the end of function mbtowc:
+  ⊥
 [alias] analysing function: mkstemp
 [alias] May-aliases at the end of function mkstemp: ⊥
+[alias] May-alias graph at the end of function mkstemp:
+  ⊥
 [alias] analysing function: mkstemps
 [alias] May-aliases at the end of function mkstemps: ⊥
+[alias] May-alias graph at the end of function mkstemps:
+  ⊥
 [alias] analysing function: mrand48
 [alias] May-aliases at the end of function mrand48: ⊥
+[alias] May-alias graph at the end of function mrand48:
+  ⊥
 [alias] analysing function: nan
 [alias] May-aliases at the end of function nan: ⊥
+[alias] May-alias graph at the end of function nan:
+  ⊥
 [alias] analysing function: nanf
 [alias] May-aliases at the end of function nanf: ⊥
+[alias] May-alias graph at the end of function nanf:
+  ⊥
 [alias] analysing function: nanl
 [alias] May-aliases at the end of function nanl: ⊥
+[alias] May-alias graph at the end of function nanl:
+  ⊥
 [alias] analysing function: nrand48
 [alias] May-aliases at the end of function nrand48: ⊥
+[alias] May-alias graph at the end of function nrand48:
+  ⊥
 [alias] analysing function: posix_memalign
 [alias] May-aliases at the end of function posix_memalign: ⊥
+[alias] May-alias graph at the end of function posix_memalign:
+  ⊥
 [alias] analysing function: pow
 [alias] May-aliases at the end of function pow: ⊥
+[alias] May-alias graph at the end of function pow:
+  ⊥
 [alias] analysing function: powf
 [alias] May-aliases at the end of function powf: ⊥
+[alias] May-alias graph at the end of function powf:
+  ⊥
 [alias] analysing function: putenv
 [alias] May-aliases at the end of function putenv: ⊥
+[alias] May-alias graph at the end of function putenv:
+  ⊥
 [alias] analysing function: qsort
 [alias] May-aliases at the end of function qsort: ⊥
+[alias] May-alias graph at the end of function qsort:
+  ⊥
 [alias] analysing function: quick_exit
 [alias] May-aliases at the end of function quick_exit: ⊥
+[alias] May-alias graph at the end of function quick_exit:
+  ⊥
 [alias] analysing function: rand
 [alias] May-aliases at the end of function rand: ⊥
+[alias] May-alias graph at the end of function rand:
+  ⊥
 [alias] analysing function: random
 [alias] May-aliases at the end of function random: ⊥
+[alias] May-alias graph at the end of function random:
+  ⊥
 [alias] analysing function: realloc
 [alias] May-aliases at the end of function realloc: ⊥
+[alias] May-alias graph at the end of function realloc:
+  ⊥
 [alias] analysing function: reallocarray
 [alias] May-aliases at the end of function reallocarray: ⊥
+[alias] May-alias graph at the end of function reallocarray:
+  ⊥
 [alias] analysing function: round
 [alias] May-aliases at the end of function round: ⊥
+[alias] May-alias graph at the end of function round:
+  ⊥
 [alias] analysing function: roundf
 [alias] May-aliases at the end of function roundf: ⊥
+[alias] May-alias graph at the end of function roundf:
+  ⊥
 [alias] analysing function: roundl
 [alias] May-aliases at the end of function roundl: ⊥
+[alias] May-alias graph at the end of function roundl:
+  ⊥
 [alias] analysing function: seed48
 [alias] May-aliases at the end of function seed48: ⊥
+[alias] May-alias graph at the end of function seed48:
+  ⊥
 [alias] analysing function: setenv
 [alias] May-aliases at the end of function setenv: ⊥
+[alias] May-alias graph at the end of function setenv:
+  ⊥
 [alias] analysing function: sin
 [alias] May-aliases at the end of function sin: ⊥
+[alias] May-alias graph at the end of function sin:
+  ⊥
 [alias] analysing function: sinf
 [alias] May-aliases at the end of function sinf: ⊥
+[alias] May-alias graph at the end of function sinf:
+  ⊥
 [alias] analysing function: sinl
 [alias] May-aliases at the end of function sinl: ⊥
+[alias] May-alias graph at the end of function sinl:
+  ⊥
 [alias] analysing function: sqrt
 [alias] May-aliases at the end of function sqrt: ⊥
+[alias] May-alias graph at the end of function sqrt:
+  ⊥
 [alias] analysing function: sqrtf
 [alias] May-aliases at the end of function sqrtf: ⊥
+[alias] May-alias graph at the end of function sqrtf:
+  ⊥
 [alias] analysing function: sqrtl
 [alias] May-aliases at the end of function sqrtl: ⊥
+[alias] May-alias graph at the end of function sqrtl:
+  ⊥
 [alias] analysing function: srand
 [alias] May-aliases at the end of function srand: ⊥
+[alias] May-alias graph at the end of function srand:
+  ⊥
 [alias] analysing function: srand48
 [alias] May-aliases at the end of function srand48: ⊥
+[alias] May-alias graph at the end of function srand48:
+  ⊥
 [alias] analysing function: srandom
 [alias] May-aliases at the end of function srandom: ⊥
+[alias] May-alias graph at the end of function srandom:
+  ⊥
 [alias] analysing function: strtod
 [alias] May-aliases at the end of function strtod: ⊥
+[alias] May-alias graph at the end of function strtod:
+  ⊥
 [alias] analysing function: strtof
 [alias] May-aliases at the end of function strtof: ⊥
+[alias] May-alias graph at the end of function strtof:
+  ⊥
 [alias] analysing function: strtol
 [alias] May-aliases at the end of function strtol: ⊥
+[alias] May-alias graph at the end of function strtol:
+  ⊥
 [alias] analysing function: strtold
 [alias] May-aliases at the end of function strtold: ⊥
+[alias] May-alias graph at the end of function strtold:
+  ⊥
 [alias] analysing function: strtoll
 [alias] May-aliases at the end of function strtoll: ⊥
+[alias] May-alias graph at the end of function strtoll:
+  ⊥
 [alias] analysing function: strtoul
 [alias] May-aliases at the end of function strtoul: ⊥
+[alias] May-alias graph at the end of function strtoul:
+  ⊥
 [alias] analysing function: strtoull
 [alias] May-aliases at the end of function strtoull: ⊥
+[alias] May-alias graph at the end of function strtoull:
+  ⊥
 [alias] analysing function: swap
 [alias] May-aliases at the end of function swap: <none>
+[alias] May-alias graph at the end of function swap:
+  <empty>
+[alias] Summary of function swap:
 [alias] analysing function: system
 [alias] May-aliases at the end of function system: ⊥
+[alias] May-alias graph at the end of function system:
+  ⊥
 [alias] analysing function: tan
 [alias] May-aliases at the end of function tan: ⊥
+[alias] May-alias graph at the end of function tan:
+  ⊥
 [alias] analysing function: tanf
 [alias] May-aliases at the end of function tanf: ⊥
+[alias] May-alias graph at the end of function tanf:
+  ⊥
 [alias] analysing function: tanl
 [alias] May-aliases at the end of function tanl: ⊥
+[alias] May-alias graph at the end of function tanl:
+  ⊥
 [alias] analysing function: trunc
 [alias] May-aliases at the end of function trunc: ⊥
+[alias] May-alias graph at the end of function trunc:
+  ⊥
 [alias] analysing function: truncf
 [alias] May-aliases at the end of function truncf: ⊥
+[alias] May-alias graph at the end of function truncf:
+  ⊥
 [alias] analysing function: truncl
 [alias] May-aliases at the end of function truncl: ⊥
+[alias] May-alias graph at the end of function truncl:
+  ⊥
 [alias] analysing function: unsetenv
 [alias] May-aliases at the end of function unsetenv: ⊥
+[alias] May-alias graph at the end of function unsetenv:
+  ⊥
 [alias] analysing function: wcstombs
 [alias] May-aliases at the end of function wcstombs: ⊥
+[alias] May-alias graph at the end of function wcstombs:
+  ⊥
 [alias] analysing function: wctomb
 [alias] May-aliases at the end of function wctomb: ⊥
+[alias] May-alias graph at the end of function wctomb:
+  ⊥
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/real_world/oracle/function1_v2.res.oracle b/src/plugins/alias/tests/real_world/oracle/function1_v2.res.oracle
index 15cf879d31b..ccace2436d1 100644
--- a/src/plugins/alias/tests/real_world/oracle/function1_v2.res.oracle
+++ b/src/plugins/alias/tests/real_world/oracle/function1_v2.res.oracle
@@ -1,133 +1,270 @@
 [kernel] Parsing function1_v2.c (with preprocessing)
 [alias] analysing function: _Exit
 [alias] May-aliases at the end of function _Exit: ⊥
+[alias] May-alias graph at the end of function _Exit:
+  ⊥
 [alias] analysing function: abort
 [alias] May-aliases at the end of function abort: ⊥
+[alias] May-alias graph at the end of function abort:
+  ⊥
 [alias] analysing function: abs
 [alias] May-aliases at the end of function abs: ⊥
+[alias] May-alias graph at the end of function abs:
+  ⊥
 [alias] analysing function: alias
 [alias] analysing instruction: *x = *y;
 [alias] May-aliases after instruction  *x = *y;  are  { x; y }
+[alias] May-alias graph after instruction  *x = *y;  is
+  0:{ x } → 1:{ *x; *y }   2:{ y } → 1:{ *x; *y }
 [alias] May-aliases at the end of function alias: { x; y }
+[alias] May-alias graph at the end of function alias:
+  0:{ x } → 1:{ *x; *y }   2:{ y } → 1:{ *x; *y }
+[alias] Summary of function alias:
+  formals: x→{ *x; *y }  y→{ *x; *y }    locals:     returns: <none>
+  state: { x; y }
 [alias] analysing function: at_quick_exit
 [alias] May-aliases at the end of function at_quick_exit: ⊥
+[alias] May-alias graph at the end of function at_quick_exit:
+  ⊥
 [alias] analysing function: atexit
 [alias] May-aliases at the end of function atexit: ⊥
+[alias] May-alias graph at the end of function atexit:
+  ⊥
 [alias] analysing function: atof
 [alias] May-aliases at the end of function atof: ⊥
+[alias] May-alias graph at the end of function atof:
+  ⊥
 [alias] analysing function: atoi
 [alias] May-aliases at the end of function atoi: ⊥
+[alias] May-alias graph at the end of function atoi:
+  ⊥
 [alias] analysing function: atol
 [alias] May-aliases at the end of function atol: ⊥
+[alias] May-alias graph at the end of function atol:
+  ⊥
 [alias] analysing function: atoll
 [alias] May-aliases at the end of function atoll: ⊥
+[alias] May-alias graph at the end of function atoll:
+  ⊥
 [alias] analysing function: bsearch
 [alias] May-aliases at the end of function bsearch: ⊥
+[alias] May-alias graph at the end of function bsearch:
+  ⊥
 [alias] analysing function: calloc
 [alias] May-aliases at the end of function calloc: ⊥
+[alias] May-alias graph at the end of function calloc:
+  ⊥
 [alias] analysing function: div
 [alias] May-aliases at the end of function div: ⊥
+[alias] May-alias graph at the end of function div:
+  ⊥
 [alias] analysing function: drand48
 [alias] May-aliases at the end of function drand48: ⊥
+[alias] May-alias graph at the end of function drand48:
+  ⊥
 [alias] analysing function: erand48
 [alias] May-aliases at the end of function erand48: ⊥
+[alias] May-alias graph at the end of function erand48:
+  ⊥
 [alias] analysing function: exit
 [alias] May-aliases at the end of function exit: ⊥
+[alias] May-alias graph at the end of function exit:
+  ⊥
 [alias] analysing function: free
 [alias] May-aliases at the end of function free: ⊥
+[alias] May-alias graph at the end of function free:
+  ⊥
 [alias] analysing function: getenv
 [alias] May-aliases at the end of function getenv: ⊥
+[alias] May-alias graph at the end of function getenv:
+  ⊥
 [alias] analysing function: jrand48
 [alias] May-aliases at the end of function jrand48: ⊥
+[alias] May-alias graph at the end of function jrand48:
+  ⊥
 [alias] analysing function: labs
 [alias] May-aliases at the end of function labs: ⊥
+[alias] May-alias graph at the end of function labs:
+  ⊥
 [alias] analysing function: lcong48
 [alias] May-aliases at the end of function lcong48: ⊥
+[alias] May-alias graph at the end of function lcong48:
+  ⊥
 [alias] analysing function: ldiv
 [alias] May-aliases at the end of function ldiv: ⊥
+[alias] May-alias graph at the end of function ldiv:
+  ⊥
 [alias] analysing function: llabs
 [alias] May-aliases at the end of function llabs: ⊥
+[alias] May-alias graph at the end of function llabs:
+  ⊥
 [alias] analysing function: lldiv
 [alias] May-aliases at the end of function lldiv: ⊥
+[alias] May-alias graph at the end of function lldiv:
+  ⊥
 [alias] analysing function: lrand48
 [alias] May-aliases at the end of function lrand48: ⊥
+[alias] May-alias graph at the end of function lrand48:
+  ⊥
 [alias] analysing function: main
 [alias] analysing instruction: int *a = malloc(sizeof(int));
 [alias] May-aliases after instruction  int *a = malloc(sizeof(int));  are  <none>
+[alias] May-alias graph after instruction  int *a = malloc(sizeof(int));  is
+  4:{ a } → 5:{  }
 [alias] analysing instruction: *a = 0;
 [alias] May-aliases after instruction  *a = 0;  are  <none>
+[alias] May-alias graph after instruction  *a = 0;  is    4:{ a } → 5:{  }
 [alias] analysing instruction: int *b = malloc(sizeof(int));
 [alias] May-aliases after instruction  int *b = malloc(sizeof(int));  are  <none>
+[alias] May-alias graph after instruction  int *b = malloc(sizeof(int));  is
+  4:{ a } → 5:{  }   6:{ b } → 7:{  }
 [alias] analysing instruction: *b = 42;
 [alias] May-aliases after instruction  *b = 42;  are  <none>
+[alias] May-alias graph after instruction  *b = 42;  is
+  4:{ a } → 5:{  }   6:{ b } → 7:{  }
 [alias] analysing instruction: alias(& a,& b);
 [alias] May-aliases after instruction  alias(& a,& b);  are  { a; b }
+[alias] May-alias graph after instruction  alias(& a,& b);  is
+  4:{ a; b } → 5:{  }   11:{  } → 4:{ a; b }   12:{  } → 4:{ a; b }
 [alias] analysing instruction: *a = 7;
 [alias] May-aliases after instruction  *a = 7;  are  { a; b }
+[alias] May-alias graph after instruction  *a = 7;  is
+  4:{ a; b } → 5:{  }   11:{  } → 4:{ a; b }   12:{  } → 4:{ a; b }
 [alias] analysing instruction: __retres = 0;
 [alias] May-aliases after instruction  __retres = 0;  are  { a; b }
+[alias] May-alias graph after instruction  __retres = 0;  is
+  4:{ a; b } → 5:{  }   11:{  } → 4:{ a; b }   12:{  } → 4:{ a; b }
 [alias] May-aliases at the end of function main: { a; b }
+[alias] May-alias graph at the end of function main:
+  4:{ a; b } → 5:{  }   11:{  } → 4:{ a; b }   12:{  } → 4:{ a; b }
+[alias] Summary of function main:
+  formals:     locals: a  b  __retres    returns: __retres    state: { a; b }
 [alias] analysing function: malloc
 [alias] May-aliases at the end of function malloc: ⊥
+[alias] May-alias graph at the end of function malloc:
+  ⊥
 [alias] analysing function: mblen
 [alias] May-aliases at the end of function mblen: ⊥
+[alias] May-alias graph at the end of function mblen:
+  ⊥
 [alias] analysing function: mbstowcs
 [alias] May-aliases at the end of function mbstowcs: ⊥
+[alias] May-alias graph at the end of function mbstowcs:
+  ⊥
 [alias] analysing function: mbtowc
 [alias] May-aliases at the end of function mbtowc: ⊥
+[alias] May-alias graph at the end of function mbtowc:
+  ⊥
 [alias] analysing function: mkstemp
 [alias] May-aliases at the end of function mkstemp: ⊥
+[alias] May-alias graph at the end of function mkstemp:
+  ⊥
 [alias] analysing function: mkstemps
 [alias] May-aliases at the end of function mkstemps: ⊥
+[alias] May-alias graph at the end of function mkstemps:
+  ⊥
 [alias] analysing function: mrand48
 [alias] May-aliases at the end of function mrand48: ⊥
+[alias] May-alias graph at the end of function mrand48:
+  ⊥
 [alias] analysing function: nrand48
 [alias] May-aliases at the end of function nrand48: ⊥
+[alias] May-alias graph at the end of function nrand48:
+  ⊥
 [alias] analysing function: posix_memalign
 [alias] May-aliases at the end of function posix_memalign: ⊥
+[alias] May-alias graph at the end of function posix_memalign:
+  ⊥
 [alias] analysing function: putenv
 [alias] May-aliases at the end of function putenv: ⊥
+[alias] May-alias graph at the end of function putenv:
+  ⊥
 [alias] analysing function: qsort
 [alias] May-aliases at the end of function qsort: ⊥
+[alias] May-alias graph at the end of function qsort:
+  ⊥
 [alias] analysing function: quick_exit
 [alias] May-aliases at the end of function quick_exit: ⊥
+[alias] May-alias graph at the end of function quick_exit:
+  ⊥
 [alias] analysing function: rand
 [alias] May-aliases at the end of function rand: ⊥
+[alias] May-alias graph at the end of function rand:
+  ⊥
 [alias] analysing function: random
 [alias] May-aliases at the end of function random: ⊥
+[alias] May-alias graph at the end of function random:
+  ⊥
 [alias] analysing function: realloc
 [alias] May-aliases at the end of function realloc: ⊥
+[alias] May-alias graph at the end of function realloc:
+  ⊥
 [alias] analysing function: reallocarray
 [alias] May-aliases at the end of function reallocarray: ⊥
+[alias] May-alias graph at the end of function reallocarray:
+  ⊥
 [alias] analysing function: seed48
 [alias] May-aliases at the end of function seed48: ⊥
+[alias] May-alias graph at the end of function seed48:
+  ⊥
 [alias] analysing function: setenv
 [alias] May-aliases at the end of function setenv: ⊥
+[alias] May-alias graph at the end of function setenv:
+  ⊥
 [alias] analysing function: srand
 [alias] May-aliases at the end of function srand: ⊥
+[alias] May-alias graph at the end of function srand:
+  ⊥
 [alias] analysing function: srand48
 [alias] May-aliases at the end of function srand48: ⊥
+[alias] May-alias graph at the end of function srand48:
+  ⊥
 [alias] analysing function: srandom
 [alias] May-aliases at the end of function srandom: ⊥
+[alias] May-alias graph at the end of function srandom:
+  ⊥
 [alias] analysing function: strtod
 [alias] May-aliases at the end of function strtod: ⊥
+[alias] May-alias graph at the end of function strtod:
+  ⊥
 [alias] analysing function: strtof
 [alias] May-aliases at the end of function strtof: ⊥
+[alias] May-alias graph at the end of function strtof:
+  ⊥
 [alias] analysing function: strtol
 [alias] May-aliases at the end of function strtol: ⊥
+[alias] May-alias graph at the end of function strtol:
+  ⊥
 [alias] analysing function: strtold
 [alias] May-aliases at the end of function strtold: ⊥
+[alias] May-alias graph at the end of function strtold:
+  ⊥
 [alias] analysing function: strtoll
 [alias] May-aliases at the end of function strtoll: ⊥
+[alias] May-alias graph at the end of function strtoll:
+  ⊥
 [alias] analysing function: strtoul
 [alias] May-aliases at the end of function strtoul: ⊥
+[alias] May-alias graph at the end of function strtoul:
+  ⊥
 [alias] analysing function: strtoull
 [alias] May-aliases at the end of function strtoull: ⊥
+[alias] May-alias graph at the end of function strtoull:
+  ⊥
 [alias] analysing function: system
 [alias] May-aliases at the end of function system: ⊥
+[alias] May-alias graph at the end of function system:
+  ⊥
 [alias] analysing function: unsetenv
 [alias] May-aliases at the end of function unsetenv: ⊥
+[alias] May-alias graph at the end of function unsetenv:
+  ⊥
 [alias] analysing function: wcstombs
 [alias] May-aliases at the end of function wcstombs: ⊥
+[alias] May-alias graph at the end of function wcstombs:
+  ⊥
 [alias] analysing function: wctomb
 [alias] May-aliases at the end of function wctomb: ⊥
+[alias] May-alias graph at the end of function wctomb:
+  ⊥
+[alias] Analysis complete
diff --git a/src/plugins/alias/tests/test_config b/src/plugins/alias/tests/test_config
index e14c0a6d247..80976f50aac 100644
--- a/src/plugins/alias/tests/test_config
+++ b/src/plugins/alias/tests/test_config
@@ -1,2 +1,2 @@
 PLUGIN: alias
-OPT: -alias -alias-verbose 3
+OPT: -alias -alias-verbose 3 -alias-debug 3
-- 
GitLab