[kernel] Parsing share/libc/__fc_builtin_for_normalization.i (no preprocessing)
[kernel] Parsing tests/constant_propagation/introduction_of_non_explicit_cast.c (with preprocessing)
[value] Analyzing a complete application starting at main
[value] Computing initial state
[value] Initial state computed
[value] Values of globals at initialization
  x ∈ {0}
  y ∈ {0}
  z ∈ {0}
  TAB[0..9] ∈ {0}
  s1 ∈ {0}
  s2 ∈ {0}
  ull ∈ {0}
[value] computing for function test_ull <- main.
        Called from tests/constant_propagation/introduction_of_non_explicit_cast.c:68.
[value] Recording results for test_ull
[value] Done for function test_ull
[value] computing for function test_struct <- main.
        Called from tests/constant_propagation/introduction_of_non_explicit_cast.c:69.
[value] Recording results for test_struct
[value] Done for function test_struct
[value] computing for function test_struct_ptr <- main.
        Called from tests/constant_propagation/introduction_of_non_explicit_cast.c:70.
[value] Recording results for test_struct_ptr
[value] Done for function test_struct_ptr
[value] computing for function test_tab <- main.
        Called from tests/constant_propagation/introduction_of_non_explicit_cast.c:71.
[value] Recording results for test_tab
[value] Done for function test_tab
[value] computing for function init <- main.
        Called from tests/constant_propagation/introduction_of_non_explicit_cast.c:73.
[value] computing for function add3 <- init <- main.
        Called from tests/constant_propagation/introduction_of_non_explicit_cast.c:57.
[value] Recording results for add3
[value] Done for function add3
[value] Recording results for init
[value] Done for function init
[value] computing for function add3 <- main.
        Called from tests/constant_propagation/introduction_of_non_explicit_cast.c:74.
[value] Recording results for add3
[value] Done for function add3
[value] computing for function test_ptr <- main.
        Called from tests/constant_propagation/introduction_of_non_explicit_cast.c:76.
[value] Recording results for test_ptr
[value] Done for function test_ptr
tests/constant_propagation/introduction_of_non_explicit_cast.c:77:[value] Assertion got status valid.
tests/constant_propagation/introduction_of_non_explicit_cast.c:80:[value] Assertion got status unknown.
tests/constant_propagation/introduction_of_non_explicit_cast.c:81:[value] Assertion got status valid.
[value] Recording results for main
[value] done for function main
[value] ====== VALUES COMPUTED ======
[value] Values at end of function add3:
  __retres ∈ [--..--]
[value] Values at end of function init:
  x ∈ {5}
  y ∈ {7}
  z ∈ {12}
  zero ∈ {0}
  sept ∈ {7}
  z1 ∈ {12}
[value] Values at end of function test_ptr:
  x ∈ {7}
  p ∈ {{ &x }}
  s ∈ {{ &x + {1} }}
  decal ∈ {1}
  __retres ∈ {{ &x }}
[value] Values at end of function test_struct:
  s1{.a; .b} ∈ {1}
  s2{.a; .b} ∈ {1}
  s.a ∈ {1}
   .b ∈ {0}
[value] Values at end of function test_struct_ptr:
  q ∈ {{ &s1.b }}
  __retres ∈ {{ &s1.a }}
[value] Values at end of function test_tab:
  TAB[0..3] ∈ {0}
     [4][bits 0 to 15]# ∈ {13} repeated %8 
     [4][bits 16 to 31]# ∈ {13}%32, bits 16 to 31 
     [5][bits 0 to 7] ∈ {13}
     [5][bits 8 to 31]# ∈ {13}%32, bits 8 to 31 
     [6..9] ∈ {0}
  s2.a ∈ {1}
    .b ∈ {2}
  r ∈ {{ &TAB[4] }}
  q ∈ {{ (char *)&TAB[4] }}
  decal ∈ {4}
[value] Values at end of function test_ull:
  ull ∈ {18446744073709551615}
[value] Values at end of function main:
  x ∈ {7}
  y ∈ {7}
  z ∈ [--..--]
  TAB[0..3] ∈ {0}
     [4][bits 0 to 15]# ∈ {13} repeated %8 
     [4][bits 16 to 31]# ∈ {13}%32, bits 16 to 31 
     [5][bits 0 to 7] ∈ {13}
     [5][bits 8 to 31]# ∈ {13}%32, bits 8 to 31 
     [6..9] ∈ {0}
  s1{.a; .b} ∈ {1}
  s2.a ∈ {1}
    .b ∈ {2}
  ull ∈ {18446744073709551615}
  b ∈ {0}
  p ∈ {{ &x }}
  q ∈ {{ &x ; &y }}
  yy ∈ {7}
[from] Computing for function add3
[from] Done for function add3
[from] Computing for function init
[from] Done for function init
[from] Computing for function test_ptr
[from] Done for function test_ptr
[from] Computing for function test_struct
[from] Done for function test_struct
[from] Computing for function test_struct_ptr
[from] Done for function test_struct_ptr
[from] Computing for function test_tab
[from] Done for function test_tab
[from] Computing for function test_ull
[from] Done for function test_ull
[from] Computing for function main
[from] Done for function main
[from] ====== DEPENDENCIES COMPUTED ======
       These dependencies hold at termination for the executions that terminate:
[from] Function add3:
  \result FROM v1; v2; v3
[from] Function init:
  x FROM v
  y FROM \nothing
  z FROM v
  \result FROM \nothing
[from] Function test_ptr:
  x FROM v
  \result FROM \nothing
[from] Function test_struct:
  s1 FROM \nothing
  s2 FROM \nothing
[from] Function test_struct_ptr:
  \result FROM \nothing
[from] Function test_tab:
  TAB[1] FROM TAB[2]; s1.b; s2.b
     [4..5] FROM v
  s2.b FROM s2.b
[from] Function test_ull:
  ull FROM ull
[from] Function main:
  x FROM \nothing
  y FROM \nothing
  z FROM a
  TAB[1] FROM TAB[2]
     [4..5] FROM \nothing
  s1 FROM \nothing
  s2 FROM \nothing
  ull FROM ull
[from] ====== END OF DEPENDENCIES ======
After Constant propagation :
/* Generated by Frama-C */
struct st {
   int a ;
   int b ;
};
typedef struct st ST;
int x;
int y;
int z;
int TAB[10];
struct st s1;
struct st s2;
void test_struct(void)
{
  ST s;
  s.a = 0;
  s.b = 1;
  s1 = s;
  s1.a = 1;
  s2.a = 1;
  s.a = 1;
  s2 = s;
  s.b = 0;
  return;
}

void test_tab(int v)
{
  int *r;
  char *q;
  int decal;
  { /* sequence */
    s2.b = 2;
    TAB[1] = 0;
  }
  r = & TAB[4];
  TAB[4] = 13;
  TAB[5] = 13;
  q = (char *)(& TAB[4]);
  *((char *)(& TAB[4])) = (char)13;
  *((char *)(& TAB[4]) + 1) = (char)13;
  decal = 4;
  *((char *)(& TAB[5])) = (char)13;
  return;
}

int *test_ptr(int v)
{
  int *__retres;
  int *p;
  char *s;
  int decal;
  p = & x;
  s = (char *)(& x);
  *((char *)(& x)) = (char)7;
  decal = 1;
  *((char *)(& x) + 1) = (char)7;
  s = (char *)(& x) + 1;
  *((char *)(& x) + 1) = (char)7;
  x = 7;
  __retres = & x;
  return __retres;
}

int *test_struct_ptr(void)
{
  int *__retres;
  int *q;
  q = & s1.b;
  __retres = & s1.a;
  return __retres;
}

int add3(int v1, int v2, int v3)
{
  int __retres;
  __retres = (v1 + v2) + 0;
  return __retres;
}

int init(int v)
{
  int zero;
  int sept;
  int z1;
  zero = 0;
  sept = 7;
  x = 5;
  y = 7;
  z = add3(5,7,0);
  z1 = 12;
  return zero;
}

unsigned long long ull;
void test_ull(void)
{
  ull = 18446744073709551615ULL;
  return;
}

void main(int a)
{
  int b;
  int *p;
  int *q;
  int *tmp_1;
  int yy;
  test_ull();
  test_struct();
  test_struct_ptr();
  test_tab(13);
  b = init(5);
  z = add3(a,0,0);
  p = test_ptr(7);
  /*@ assert *p ≡ 7; */ ;
  if (a) tmp_1 = & x; else tmp_1 = & y;
  q = tmp_1;
  yy = 7;
  /*@ assert a ≡ 0 ⇒ q ≡ &y; */ ;
  /*@ assert *q ≡ 7; */ ;
  return;
}


