[kernel] Parsing share/libc/__fc_builtin_for_normalization.i (no preprocessing)
[kernel] Parsing tests/misc/exception.i (no preprocessing)
/* Generated by Frama-C */
struct my_exn {
   int e ;
};
struct my_exn2 {
   char c ;
};
struct my_exn foo;
struct my_exn2 bar;
int x = 42;
int f1(int c)
{
  int __retres;
  if (c) {
    struct my_exn exn;
    exn.e = 0;
    throw (exn);
  }
  else {
    __retres = c;
    goto return_label;
  }
  return_label: return __retres;
}

/*@ ensures \result ≡ \old(c)+1; */
int f2(int c)
{
  int __retres;
  if (c < 50) {
    int exn;
    exn = 0;
    throw (exn);
  }
  else {
    __retres = c + 1;
    goto return_label;
  }
  return_label: return __retres;
}

int f3(int c)
{
  int __retres;
  if (c > 150) {
    int *exn;
    exn = & x;
    throw (exn);
  }
  else {
    __retres = c + 2;
    goto return_label;
  }
  return_label: return __retres;
}

int f4(int c)
{
  int __retres;
  if (c) {
    struct my_exn2 exn;
    exn.c = 0;
    throw (exn);
  }
  else {
    __retres = c + 3;
    goto return_label;
  }
  return_label: return __retres;
}

/*@ ensures \result ≢ 42; */
int h(int c)
{
  int __retres;
  try
    struct my_exn2 exn2;
    struct my_exn exn_aux;
    int y;
    struct my_exn exn;
    if (c - 1 <= 0) {
      int tmp;
      tmp = f1(c);
      __retres = tmp;
      goto return_label;
    }
    else 
      if (c - 100 <= 0) {
        int tmp_0;
        /*@ returns \result ≡ c+1; */
        {
          tmp_0 = f2(c);
          __retres = tmp_0;
          /*@ assert __retres ≡ c+1; */ ;
          goto return_label;
        }
      }
      else 
        if (c > 360) {
          int tmp_1;
          tmp_1 = f3(c);
          __retres = tmp_1;
          goto return_label;
        }
        else {
          int tmp_2;
          tmp_2 = f4(c);
          __retres = tmp_2;
          goto return_label;
        }
  catch ( struct my_exn exn
            struct my_exn exn_aux
            struct my_exn2 exn2
    ) {
  __retres = exn.e;
  goto return_label;
    }
    catch ( int y ) {
      __retres = y;
      goto return_label;
    }
return_label: return __retres;
}


