diff --git a/src/plugins/e-acsl/doc/Changelog b/src/plugins/e-acsl/doc/Changelog index 26e2eec5466422874246fdf59d6117dd6a789cb5..022f7f94c48a7b130f084747ea95af70a73102f8 100644 --- a/src/plugins/e-acsl/doc/Changelog +++ b/src/plugins/e-acsl/doc/Changelog @@ -25,6 +25,7 @@ Plugin E-ACSL <next-release> ############################ +- E-ACSL [2022-19-07] Improve typing precision of variables appearing in comparisons -* E-ACSL [2022-17-06] Fix wrong cast from pointer to integer (frama-c/frama-c#1119) ############################## diff --git a/src/plugins/e-acsl/src/analyses/analyses_datatype.ml b/src/plugins/e-acsl/src/analyses/analyses_datatype.ml index 473ce5547af126a357533a79d850e3fe18e452d3..ff6fc08f5e8d05749968825aaf6463db4c5df880 100644 --- a/src/plugins/e-acsl/src/analyses/analyses_datatype.ml +++ b/src/plugins/e-acsl/src/analyses/analyses_datatype.ml @@ -364,6 +364,11 @@ module Logic_env type t = { profile : Profile.t; let_quantif_bind : Profile.t} + (* forward reference to meet of intervals *) + let ival_meet_ref + : (ival -> ival -> ival) ref + = ref (fun _i1 _i2 -> Extlib.mk_labeled_fun "ival_meet_ref") + let add env x i = { env with let_quantif_bind = Logic_var.Map.add x i env.let_quantif_bind} @@ -382,6 +387,24 @@ module Logic_env let get_profile env = env.profile + let refine env x ival = + let update = function + | None -> raise Not_found + | Some i -> Some (!ival_meet_ref i ival) + in + let new_lq_bind = + try Logic_var.Map.update x update env.let_quantif_bind + with Not_found -> + match Logic_var.Map.find_opt x env.profile with + | Some i -> + (* The profile must remain unchanged, so if the variable is bound in + the profile, we add the refined interval in the other bindings, + which are checked first when finding the interval *) + Logic_var.Map.add x (!ival_meet_ref i ival) env.let_quantif_bind + | None -> Options.abort "updating a variable not in environment" + in + {env with let_quantif_bind = new_lq_bind} + end (* Imperative environment to perform fixpoint algorithm for recursive diff --git a/src/plugins/e-acsl/src/analyses/analyses_datatype.mli b/src/plugins/e-acsl/src/analyses/analyses_datatype.mli index 008856976aa48dc11e4b8ac6c5459ca3c8e5870d..9cafe69c93a70301e49ffe2d73ccf84a3d6120c4 100644 --- a/src/plugins/e-acsl/src/analyses/analyses_datatype.mli +++ b/src/plugins/e-acsl/src/analyses/analyses_datatype.mli @@ -76,17 +76,29 @@ module LFProf: Datatype.S_with_collections - an association list for variables bound by a let or a quantification *) module Logic_env : sig type t - (* add a new binding for a let or a quantification binder only *) + + (** forward reference to meet of intervals *) + val ival_meet_ref : (ival -> ival -> ival) ref + + (** add a new binding for a let or a quantification binder only *) val add : t -> logic_var -> ival -> t - (* the empty environment *) + + (** the empty environment *) val empty : t - (* create a new environment from a profile, for function calls *) + + (** create a new environment from a profile, for function calls *) val make : Profile.t -> t - (* find a logic variable in the environment *) + + (** find a logic variable in the environment *) val find : t -> logic_var -> ival - (* get the profile of the logic environment, i.e. bindings through function - arguments *) + + (** get the profile of the logic environment, i.e. bindings through function + arguments *) val get_profile : t -> Profile.t + + (** refine the interval of a logic variable: replace an interval with a more + precise one *) + val refine : t -> logic_var -> ival -> t end diff --git a/src/plugins/e-acsl/src/analyses/interval.ml b/src/plugins/e-acsl/src/analyses/interval.ml index f68cae7dcf7b99d17e06792c8fc7208ba865af0c..833d84ed21d5755e1b3763d8da9ac37b62d9d232 100644 --- a/src/plugins/e-acsl/src/analyses/interval.ml +++ b/src/plugins/e-acsl/src/analyses/interval.ml @@ -216,6 +216,8 @@ let meet i1 i2 = match i1, i2 with | Nan, (Ival _ | Float _ | Rational | Real) -> Nan +let () = Logic_env.ival_meet_ref := meet + let is_singleton_int = function | Ival iv -> Ival.is_singleton_int iv | Float _ | Rational | Real | Nan -> false @@ -372,7 +374,8 @@ let rec fixpoint ~(infer : force:bool -> then ival else - fixpoint ~infer li args_ival t' inferred_ival + let assumed_ival = interv_of_typ_containing_interv inferred_ival in + fixpoint ~infer li args_ival t' assumed_ival (* Memoization module which retrieves the computed info of some terms *) @@ -683,8 +686,11 @@ let rec infer ~force ~logic_env t = Error.map (fun src -> cast ~src ~dst) src | Tif (t1, t2, t3) -> ignore (infer ~force ~logic_env t1); - let i2 = infer ~force ~logic_env t2 in - let i3 = infer ~force ~logic_env t3 in + let logic_env_tbranch, logic_env_fbranch = + compute_logic_env_if_branches logic_env t1 + in + let i2 = infer ~force ~logic_env:logic_env_tbranch t2 in + let i3 = infer ~force ~logic_env:logic_env_fbranch t3 in Error.map2 join i2 i3 | Tat (t, _) -> get_res (infer ~force ~logic_env t) @@ -873,7 +879,6 @@ and infer_term_host ~force ~logic_env thost = Printer.pp_typ ty Printer.pp_term t - and infer_term_offset ~force ~logic_env t = match t with | TNoOffset -> () @@ -883,6 +888,65 @@ and infer_term_offset ~force ~logic_env t = ignore (infer ~force ~logic_env t); infer_term_offset ~force ~logic_env toff +(* Update the interval of variables when they appear in a comparison of the form + [x op t] or [t op x] *) +and compute_logic_env_if_branches logic_env t = + let get_res = Error.map (fun x -> x) in + let ival v = infer ~force:false ~logic_env v in + let add_ub logic_env x v = + let max = Ival.max_int (Error.map extract_ival (ival v)) in + Logic_env.refine logic_env x (Ival (Ival.inject_range None max)) + in + let add_lb logic_env x v = + let min = Ival.min_int (Error.map extract_ival (ival v)) in + Logic_env.refine logic_env x (Ival (Ival.inject_range min None)) + in + let add_eq logic_env x v = Logic_env.refine logic_env x (get_res (ival v)) in + let t_branch, f_branch = + (* we do not discriminate between strict and weak inequalities. This is + slighlty less precise but allow for better reusing of the code in the + case of recursive functions, the main advantage in typing + conditionals is for recursive functions. *) + match t.term_node with + | TBinOp(op, {term_node = TLval(TVar x, TNoOffset)}, v) -> + begin + match op with + | Lt | Le -> + add_ub logic_env x v, + add_lb logic_env x v + | Gt | Ge -> + add_lb logic_env x v, + add_ub logic_env x v + | Eq -> + add_eq logic_env x v, + logic_env + | Ne -> + logic_env, + add_eq logic_env x v + | _ -> logic_env, logic_env + end + | _ -> logic_env, logic_env + in + match t.term_node with + | TBinOp(op, u, {term_node = TLval(TVar y, TNoOffset)}) -> + begin + match op with + | Lt | Le -> + add_lb t_branch y u, + add_ub f_branch y u + | Gt | Ge -> + add_ub t_branch y u, + add_lb f_branch y u + | Eq -> + add_eq t_branch y u, + logic_env + | Ne -> + logic_env, + add_eq f_branch y u + | _ -> t_branch, f_branch + end + | _ -> t_branch, f_branch + (* [type_bound_variables] infers an interval associated with each of the provided bounds of a quantified variable, and provides a term accordingly. It could happen that the bounds provided for a quantifier diff --git a/src/plugins/e-acsl/tests/arith/oracle/at_on-purely-logic-variables.res.oracle b/src/plugins/e-acsl/tests/arith/oracle/at_on-purely-logic-variables.res.oracle index 5ce2b09c6a5151a2f4f4784de94a3f912ba7603b..dfb2831b7e1fb2c512075fbb37544a05759f0641 100644 --- a/src/plugins/e-acsl/tests/arith/oracle/at_on-purely-logic-variables.res.oracle +++ b/src/plugins/e-acsl/tests/arith/oracle/at_on-purely-logic-variables.res.oracle @@ -55,7 +55,7 @@ accessing uninitialized left-value. assert \initialized(__gen_e_acsl_at_6 + - (int)((int)((int)(__gen_e_acsl_u_7 - 9) * 32) + + (int)((int)((int)(__gen_e_acsl_u_7 - 9) * 26) + (int)(__gen_e_acsl_v_5 - -4))); [eva:alarm] at_on-purely-logic-variables.c:44: Warning: assertion got status unknown. diff --git a/src/plugins/e-acsl/tests/arith/oracle/functions_rec.res.oracle b/src/plugins/e-acsl/tests/arith/oracle/functions_rec.res.oracle index 7293519451467d7b3861614cf3e118233b83f1bd..d064060bb6adc24506499219f6f10a0afa5ffc35 100644 --- a/src/plugins/e-acsl/tests/arith/oracle/functions_rec.res.oracle +++ b/src/plugins/e-acsl/tests/arith/oracle/functions_rec.res.oracle @@ -3,127 +3,30 @@ [eva:alarm] functions_rec.c:28: Warning: function __e_acsl_assert, behavior blocking: precondition got status unknown. [eva:alarm] functions_rec.c:28: Warning: assertion got status unknown. +[eva] functions_rec.c:10: Warning: + Using specification of function __gen_e_acsl_f1 for recursive calls. + Analysis of function __gen_e_acsl_f1 is thus incomplete and its soundness + relies on the written specification. [eva:alarm] functions_rec.c:29: Warning: function __e_acsl_assert, behavior blocking: precondition got status unknown. [eva:alarm] functions_rec.c:29: Warning: assertion got status unknown. -[eva:alarm] functions_rec.c:10: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub); -[eva:alarm] functions_rec.c:10: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_2); -[eva] functions_rec.c:10: Warning: - Using specification of function __gen_e_acsl_f1_3 for recursive calls. - Analysis of function __gen_e_acsl_f1_3 is thus incomplete and its soundness - relies on the written specification. [eva:alarm] functions_rec.c:30: Warning: function __e_acsl_assert, behavior blocking: precondition got status unknown. [eva:alarm] functions_rec.c:30: Warning: assertion got status unknown. -[eva:alarm] functions_rec.c:13: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_3); -[eva:alarm] functions_rec.c:13: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_4); [eva] functions_rec.c:13: Warning: - Using specification of function __gen_e_acsl_f2_3 for recursive calls. - Analysis of function __gen_e_acsl_f2_3 is thus incomplete and its soundness + Using specification of function __gen_e_acsl_f2 for recursive calls. + Analysis of function __gen_e_acsl_f2 is thus incomplete and its soundness relies on the written specification. -[eva:alarm] functions_rec.c:13: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_5); [eva] functions_rec.c:13: Warning: - Using specification of function __gen_e_acsl_f2_3 for recursive calls. - Analysis of function __gen_e_acsl_f2_3 is thus incomplete and its soundness + Using specification of function __gen_e_acsl_f2 for recursive calls. + Analysis of function __gen_e_acsl_f2 is thus incomplete and its soundness relies on the written specification. -[eva:alarm] functions_rec.c:13: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_6); [eva] functions_rec.c:13: Warning: - Using specification of function __gen_e_acsl_f2_3 for recursive calls. - Analysis of function __gen_e_acsl_f2_3 is thus incomplete and its soundness + Using specification of function __gen_e_acsl_f2 for recursive calls. + Analysis of function __gen_e_acsl_f2 is thus incomplete and its soundness relies on the written specification. +[eva:alarm] functions_rec.c:13: Warning: assertion 'E_ACSL' got status unknown. [eva:alarm] functions_rec.c:13: Warning: function __e_acsl_assert, behavior blocking: precondition got status unknown. [eva:alarm] functions_rec.c:13: Warning: - division by zero. assert __gen_e_acsl_f2_9 != 0; -[eva:alarm] functions_rec.c:13: Warning: - signed overflow. assert -2147483648 <= __gen_e_acsl_f2_5 * __gen_e_acsl_f2_7; -[eva:alarm] functions_rec.c:13: Warning: - signed overflow. assert __gen_e_acsl_f2_5 * __gen_e_acsl_f2_7 <= 2147483647; -[eva:alarm] functions_rec.c:13: Warning: - signed overflow. - assert - (int)(__gen_e_acsl_f2_5 * __gen_e_acsl_f2_7) / __gen_e_acsl_f2_9 <= - 2147483647; -[eva:alarm] functions_rec.c:13: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_7); -[eva:alarm] functions_rec.c:13: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_8); -[eva:alarm] functions_rec.c:13: Warning: - division by zero. assert __gen_e_acsl_f2_14 != 0; -[eva:alarm] functions_rec.c:13: Warning: - signed overflow. - assert -2147483648 <= __gen_e_acsl_f2_10 * __gen_e_acsl_f2_12; -[eva:alarm] functions_rec.c:13: Warning: - signed overflow. - assert __gen_e_acsl_f2_10 * __gen_e_acsl_f2_12 <= 2147483647; -[eva:alarm] functions_rec.c:13: Warning: - signed overflow. - assert - (int)(__gen_e_acsl_f2_10 * __gen_e_acsl_f2_12) / __gen_e_acsl_f2_14 <= - 2147483647; -[eva:alarm] functions_rec.c:13: Warning: - division by zero. assert __gen_e_acsl_f2_19 != 0; -[eva:alarm] functions_rec.c:13: Warning: - signed overflow. - assert -2147483648 <= __gen_e_acsl_f2_15 * __gen_e_acsl_f2_17; -[eva:alarm] functions_rec.c:13: Warning: - signed overflow. - assert __gen_e_acsl_f2_15 * __gen_e_acsl_f2_17 <= 2147483647; -[eva:alarm] functions_rec.c:13: Warning: - signed overflow. - assert - (int)(__gen_e_acsl_f2_15 * __gen_e_acsl_f2_17) / __gen_e_acsl_f2_19 <= - 2147483647; -[eva:alarm] functions_rec.c:32: Warning: - function __e_acsl_assert, behavior blocking: precondition got status unknown. -[eva:alarm] functions_rec.c:32: Warning: assertion got status unknown. -[eva:alarm] functions_rec.c:17: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_9); -[eva:alarm] functions_rec.c:17: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_10); -[eva] functions_rec.c:17: Warning: - Using specification of function __gen_e_acsl_f3_3 for recursive calls. - Analysis of function __gen_e_acsl_f3_3 is thus incomplete and its soundness - relies on the written specification. -[eva:alarm] functions_rec.c:17: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_add_4); -[eva:alarm] functions_rec.c:34: Warning: assertion got status unknown. -[eva:alarm] functions_rec.c:20: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_add_6); -[eva:alarm] functions_rec.c:20: Warning: - accessing uninitialized left-value. - assert \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_add_7); -[eva] functions_rec.c:20: Warning: - Using specification of function __gen_e_acsl_f4_3 for recursive calls. - Analysis of function __gen_e_acsl_f4_3 is thus incomplete and its soundness - relies on the written specification. -[eva:alarm] functions_rec.c:36: Warning: - function __e_acsl_assert, behavior blocking: precondition got status unknown. -[eva:alarm] functions_rec.c:36: Warning: assertion got status unknown. -[eva:alarm] functions_rec.c:38: Warning: - function __e_acsl_assert, behavior blocking: precondition got status unknown. -[eva:alarm] functions_rec.c:38: Warning: assertion got status unknown. -[eva:alarm] functions_rec.c:40: Warning: - function __e_acsl_assert_register_mpz: precondition data->values == \null || - \valid(data->values) got status unknown. -[eva:alarm] functions_rec.c:40: Warning: - function __e_acsl_assert, behavior blocking: precondition got status unknown. -[eva:alarm] functions_rec.c:40: Warning: assertion got status unknown. + accessing uninitialized left-value. assert \initialized(&n); diff --git a/src/plugins/e-acsl/tests/arith/oracle/gen_at_on-purely-logic-variables.c b/src/plugins/e-acsl/tests/arith/oracle/gen_at_on-purely-logic-variables.c index 3c3a420f8486821f434161ac28104f028b301c80..54abb67f00134052a63240bbff4b4cf8de25563b 100644 --- a/src/plugins/e-acsl/tests/arith/oracle/gen_at_on-purely-logic-variables.c +++ b/src/plugins/e-acsl/tests/arith/oracle/gen_at_on-purely-logic-variables.c @@ -113,7 +113,7 @@ int main(void) __e_acsl_memory_init((int *)0,(char ***)0,8UL); __gen_e_acsl_at_8 = (long *)malloc(64UL); __gen_e_acsl_at_7 = (int *)malloc(12000UL); - __gen_e_acsl_at_6 = (long *)malloc(3072UL); + __gen_e_acsl_at_6 = (long *)malloc(2496UL); __gen_e_acsl_at_5 = (int *)malloc(528UL); __gen_e_acsl_at_3 = (int *)malloc(12UL); __gen_e_acsl_at_2 = (long *)malloc(8UL); @@ -182,7 +182,7 @@ int main(void) else __gen_e_acsl_if_2 = 3; if (__gen_e_acsl_v_2 <= __gen_e_acsl_if_2) ; else break; } - *(__gen_e_acsl_at_6 + ((__gen_e_acsl_u_2 - 9) * 32 + (__gen_e_acsl_v_2 - -4))) = + *(__gen_e_acsl_at_6 + ((__gen_e_acsl_u_2 - 9) * 26 + (__gen_e_acsl_v_2 - -4))) = (n + (long)__gen_e_acsl_u_2) + __gen_e_acsl_v_2; __gen_e_acsl_v_2 ++; } @@ -547,7 +547,7 @@ int main(void) __gen_e_acsl_at_6 + (int)( (long)((int)( (long)((int)( - __gen_e_acsl_u_7 - 9L)) * 32L)) + (int)( + __gen_e_acsl_u_7 - 9L)) * 26L)) + (int)( __gen_e_acsl_v_5 - -4L))), sizeof(long), (void *)__gen_e_acsl_at_6, @@ -565,7 +565,7 @@ int main(void) "sizeof(long)",0,sizeof(long)); __gen_e_acsl_assert_data_12.blocking = 1; __gen_e_acsl_assert_data_12.kind = "RTE"; - __gen_e_acsl_assert_data_12.pred_txt = "\\valid_read(__gen_e_acsl_at_6 +\n (int)((int)((int)(__gen_e_acsl_u_7 - 9) * 32) +\n (int)(__gen_e_acsl_v_5 - -4)))"; + __gen_e_acsl_assert_data_12.pred_txt = "\\valid_read(__gen_e_acsl_at_6 +\n (int)((int)((int)(__gen_e_acsl_u_7 - 9) * 26) +\n (int)(__gen_e_acsl_v_5 - -4)))"; __gen_e_acsl_assert_data_12.file = "at_on-purely-logic-variables.c"; __gen_e_acsl_assert_data_12.fct = "main"; __gen_e_acsl_assert_data_12.line = 46; @@ -576,10 +576,10 @@ int main(void) /*@ assert Eva: initialization: \initialized(__gen_e_acsl_at_6 + - (int)((int)((int)(__gen_e_acsl_u_7 - 9) * 32) + (int)((int)((int)(__gen_e_acsl_u_7 - 9) * 26) + (int)(__gen_e_acsl_v_5 - -4))); */ - if (*(__gen_e_acsl_at_6 + ((__gen_e_acsl_u_7 - 9) * 32 + ( + if (*(__gen_e_acsl_at_6 + ((__gen_e_acsl_u_7 - 9) * 26 + ( __gen_e_acsl_v_5 - -4))) > 0L) ; else { diff --git a/src/plugins/e-acsl/tests/arith/oracle/gen_functions_rec.c b/src/plugins/e-acsl/tests/arith/oracle/gen_functions_rec.c index fb1832ca1932365758dee4c7644baaca1cd4882a..95fb94d1c880ce5ac7c7313803b6647c83428c95 100644 --- a/src/plugins/e-acsl/tests/arith/oracle/gen_functions_rec.c +++ b/src/plugins/e-acsl/tests/arith/oracle/gen_functions_rec.c @@ -9,81 +9,52 @@ extern __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict; /*@ logic integer f1(integer n) = n <= 0? 0: f1(n - 1) + n; - -*/ -void __gen_e_acsl_f1_2(__e_acsl_mpz_t *__retres_arg, long n); - + */ void __gen_e_acsl_f1(__e_acsl_mpz_t *__retres_arg, int n); -void __gen_e_acsl_f1_3(__e_acsl_mpz_t *__retres_arg, __e_acsl_mpz_struct * n); - /*@ logic integer f2(integer n) = n < 0? 1: (f2(n - 1) * f2(n - 2)) / f2(n - 3); - -*/ -int __gen_e_acsl_f2_2(long n); - -int __gen_e_acsl_f2(int n); - -int __gen_e_acsl_f2_3(__e_acsl_mpz_struct * n); + */ +void __gen_e_acsl_f2(__e_acsl_mpz_t *__retres_arg, int n); /*@ logic integer g(integer n) = 0; + */ +int __gen_e_acsl_g_3(int n); -*/ -int __gen_e_acsl_g_3(long n); - -int __gen_e_acsl_g_9(__e_acsl_mpz_struct * n); - -int __gen_e_acsl_g(int n); - -int __gen_e_acsl_g_11(long n); - -int __gen_e_acsl_g_5(__e_acsl_mpz_struct * n); +int __gen_e_acsl_g(unsigned int n); /*@ logic integer f3(integer n) = n > 0? g(n) * f3(n - 1) - 5: g(n + 1); - -*/ -int __gen_e_acsl_f3_2(long n); - + */ int __gen_e_acsl_f3(int n); -int __gen_e_acsl_f3_3(__e_acsl_mpz_struct * n); - /*@ logic integer f4(integer n) = n < 100? f4(n + 1): (n < 0x7fffffffffffffffL? 0x7fffffffffffffffL: 6); - -*/ -unsigned long __gen_e_acsl_f4_2(long n); - + */ unsigned long __gen_e_acsl_f4(int n); -unsigned long __gen_e_acsl_f4_3(__e_acsl_mpz_struct * n); - /*@ logic integer f5(integer n) = n >= 0? 0: f5(n + 1) + n; */ -void __gen_e_acsl_f5_2(__e_acsl_mpz_t *__retres_arg, long n); +void __gen_e_acsl_f5_5(__e_acsl_mpz_t *__retres_arg, long n); void __gen_e_acsl_f5(__e_acsl_mpz_t *__retres_arg, int n); -void __gen_e_acsl_f5_3(__e_acsl_mpz_t *__retres_arg, __e_acsl_mpz_struct * n); - int main(void) { int __retres; __e_acsl_memory_init((int *)0,(char ***)0,8UL); { - __e_acsl_mpz_t __gen_e_acsl_f1_8; - __e_acsl_mpz_t __gen_e_acsl__7; + __e_acsl_mpz_t __gen_e_acsl_f1_4; + __e_acsl_mpz_t __gen_e_acsl__2; int __gen_e_acsl_eq; __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0}; - __gen_e_acsl_f1(& __gen_e_acsl_f1_8,0); - __gmpz_init_set_si(__gen_e_acsl__7,0L); - __gen_e_acsl_eq = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_8), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__7)); + __gen_e_acsl_f1(& __gen_e_acsl_f1_4,0); + __gmpz_init_set_si(__gen_e_acsl__2,0L); + __gen_e_acsl_eq = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_4), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__2)); __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data,"f1(0)",0, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_8)); + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_4)); __gen_e_acsl_assert_data.blocking = 1; __gen_e_acsl_assert_data.kind = "Assertion"; __gen_e_acsl_assert_data.pred_txt = "f1(0) == 0"; @@ -92,22 +63,22 @@ int main(void) __gen_e_acsl_assert_data.line = 28; __e_acsl_assert(__gen_e_acsl_eq == 0,& __gen_e_acsl_assert_data); __e_acsl_assert_clean(& __gen_e_acsl_assert_data); - __gmpz_clear(__gen_e_acsl_f1_8); - __gmpz_clear(__gen_e_acsl__7); + __gmpz_clear(__gen_e_acsl_f1_4); + __gmpz_clear(__gen_e_acsl__2); } /*@ assert f1(0) == 0; */ ; { - __e_acsl_mpz_t __gen_e_acsl_f1_10; - __e_acsl_mpz_t __gen_e_acsl__8; + __e_acsl_mpz_t __gen_e_acsl_f1_6; + __e_acsl_mpz_t __gen_e_acsl__3; int __gen_e_acsl_eq_2; __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 = {.values = (void *)0}; - __gen_e_acsl_f1(& __gen_e_acsl_f1_10,1); - __gmpz_init_set_si(__gen_e_acsl__8,1L); - __gen_e_acsl_eq_2 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_10), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__8)); + __gen_e_acsl_f1(& __gen_e_acsl_f1_6,1); + __gmpz_init_set_si(__gen_e_acsl__3,1L); + __gen_e_acsl_eq_2 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_6), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__3)); __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_2,"f1(1)",0, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_10)); + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_6)); __gen_e_acsl_assert_data_2.blocking = 1; __gen_e_acsl_assert_data_2.kind = "Assertion"; __gen_e_acsl_assert_data_2.pred_txt = "f1(1) == 1"; @@ -116,22 +87,22 @@ int main(void) __gen_e_acsl_assert_data_2.line = 29; __e_acsl_assert(__gen_e_acsl_eq_2 == 0,& __gen_e_acsl_assert_data_2); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2); - __gmpz_clear(__gen_e_acsl_f1_10); - __gmpz_clear(__gen_e_acsl__8); + __gmpz_clear(__gen_e_acsl_f1_6); + __gmpz_clear(__gen_e_acsl__3); } /*@ assert f1(1) == 1; */ ; { - __e_acsl_mpz_t __gen_e_acsl_f1_12; - __e_acsl_mpz_t __gen_e_acsl__9; + __e_acsl_mpz_t __gen_e_acsl_f1_8; + __e_acsl_mpz_t __gen_e_acsl__4; int __gen_e_acsl_eq_3; __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 = {.values = (void *)0}; - __gen_e_acsl_f1(& __gen_e_acsl_f1_12,100); - __gmpz_init_set_si(__gen_e_acsl__9,5050L); - __gen_e_acsl_eq_3 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_12), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__9)); + __gen_e_acsl_f1(& __gen_e_acsl_f1_8,100); + __gmpz_init_set_si(__gen_e_acsl__4,5050L); + __gen_e_acsl_eq_3 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_8), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__4)); __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_3,"f1(100)",0, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_12)); + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_8)); __gen_e_acsl_assert_data_3.blocking = 1; __gen_e_acsl_assert_data_3.kind = "Assertion"; __gen_e_acsl_assert_data_3.pred_txt = "f1(100) == 5050"; @@ -140,111 +111,122 @@ int main(void) __gen_e_acsl_assert_data_3.line = 30; __e_acsl_assert(__gen_e_acsl_eq_3 == 0,& __gen_e_acsl_assert_data_3); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3); - __gmpz_clear(__gen_e_acsl_f1_12); - __gmpz_clear(__gen_e_acsl__9); + __gmpz_clear(__gen_e_acsl_f1_8); + __gmpz_clear(__gen_e_acsl__4); } /*@ assert f1(100) == 5050; */ ; { - int __gen_e_acsl_f2_20; + __e_acsl_mpz_t __gen_e_acsl_f2_8; + __e_acsl_mpz_t __gen_e_acsl__7; + int __gen_e_acsl_eq_4; __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 = {.values = (void *)0}; - __gen_e_acsl_f2_20 = __gen_e_acsl_f2(7); - __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_4,"f2(7)",0, - __gen_e_acsl_f2_20); + __gen_e_acsl_f2(& __gen_e_acsl_f2_8,7); + __gmpz_init_set_si(__gen_e_acsl__7,1L); + __gen_e_acsl_eq_4 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_8), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__7)); + /*@ assert Eva: initialization: \initialized(&n); */ + __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"n",0,n); + __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_5,"f2(n - 3)",0, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_7)); + __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_4,"f2(7)",0, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_8)); __gen_e_acsl_assert_data_4.blocking = 1; __gen_e_acsl_assert_data_4.kind = "Assertion"; __gen_e_acsl_assert_data_4.pred_txt = "f2(7) == 1"; __gen_e_acsl_assert_data_4.file = "functions_rec.c"; __gen_e_acsl_assert_data_4.fct = "main"; __gen_e_acsl_assert_data_4.line = 32; - __e_acsl_assert(__gen_e_acsl_f2_20 == 1,& __gen_e_acsl_assert_data_4); + __e_acsl_assert(__gen_e_acsl_eq_4 == 0,& __gen_e_acsl_assert_data_4); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4); + __gmpz_clear(__gen_e_acsl_f2_8); + __gmpz_clear(__gen_e_acsl__7); } /*@ assert f2(7) == 1; */ ; { - int __gen_e_acsl_f3_8; + int __gen_e_acsl_f3_4; + __e_acsl_assert_data_t __gen_e_acsl_assert_data_6 = + {.values = (void *)0}; + __gen_e_acsl_f3_4 = __gen_e_acsl_f3(6); + __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_6,"f3(6)",0, + __gen_e_acsl_f3_4); + __gen_e_acsl_assert_data_6.blocking = 1; + __gen_e_acsl_assert_data_6.kind = "Assertion"; + __gen_e_acsl_assert_data_6.pred_txt = "f3(6) == -5"; + __gen_e_acsl_assert_data_6.file = "functions_rec.c"; + __gen_e_acsl_assert_data_6.fct = "main"; + __gen_e_acsl_assert_data_6.line = 34; + __e_acsl_assert(__gen_e_acsl_f3_4 == -5,& __gen_e_acsl_assert_data_6); + __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6); + } + /*@ assert f3(6) == -5; */ ; + { + unsigned long __gen_e_acsl_f4_4; + __e_acsl_assert_data_t __gen_e_acsl_assert_data_7 = + {.values = (void *)0}; + __gen_e_acsl_f4_4 = __gen_e_acsl_f4(9); + __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_7,"f4(9)",0, + __gen_e_acsl_f4_4); + __gen_e_acsl_assert_data_7.blocking = 1; + __gen_e_acsl_assert_data_7.kind = "Assertion"; + __gen_e_acsl_assert_data_7.pred_txt = "f4(9) > 0"; + __gen_e_acsl_assert_data_7.file = "functions_rec.c"; + __gen_e_acsl_assert_data_7.fct = "main"; + __gen_e_acsl_assert_data_7.line = 36; + __e_acsl_assert(__gen_e_acsl_f4_4 > 0UL,& __gen_e_acsl_assert_data_7); + __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7); + } + /*@ assert f4(9) > 0; */ ; + { + __e_acsl_mpz_t __gen_e_acsl_f5_4; + __e_acsl_mpz_t __gen_e_acsl__9; + int __gen_e_acsl_eq_5; __e_acsl_assert_data_t __gen_e_acsl_assert_data_8 = {.values = (void *)0}; - __gen_e_acsl_f3_8 = __gen_e_acsl_f3(6); - __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_8,"f3(6)",0, - __gen_e_acsl_f3_8); + __gen_e_acsl_f5(& __gen_e_acsl_f5_4,0); + __gmpz_init_set_si(__gen_e_acsl__9,0L); + __gen_e_acsl_eq_5 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_4), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__9)); + __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_8,"f5(0)",0, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_4)); __gen_e_acsl_assert_data_8.blocking = 1; __gen_e_acsl_assert_data_8.kind = "Assertion"; - __gen_e_acsl_assert_data_8.pred_txt = "f3(6) == -5"; + __gen_e_acsl_assert_data_8.pred_txt = "f5(0) == 0"; __gen_e_acsl_assert_data_8.file = "functions_rec.c"; __gen_e_acsl_assert_data_8.fct = "main"; - __gen_e_acsl_assert_data_8.line = 34; - __e_acsl_assert(__gen_e_acsl_f3_8 == -5,& __gen_e_acsl_assert_data_8); + __gen_e_acsl_assert_data_8.line = 38; + __e_acsl_assert(__gen_e_acsl_eq_5 == 0,& __gen_e_acsl_assert_data_8); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8); + __gmpz_clear(__gen_e_acsl_f5_4); + __gmpz_clear(__gen_e_acsl__9); } - /*@ assert f3(6) == -5; */ ; + /*@ assert f5(0) == 0; */ ; { - unsigned long __gen_e_acsl_f4_8; + long __gen_e_acsl_n_3; + __e_acsl_mpz_t __gen_e_acsl_f5_8; + __e_acsl_mpz_t __gen_e_acsl__11; + int __gen_e_acsl_eq_6; __e_acsl_assert_data_t __gen_e_acsl_assert_data_9 = {.values = (void *)0}; - __gen_e_acsl_f4_8 = __gen_e_acsl_f4(9); - __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_9,"f4(9)",0, - __gen_e_acsl_f4_8); + __gen_e_acsl_n_3 = 9223372036854775807L; + __gen_e_acsl_f5_5(& __gen_e_acsl_f5_8,__gen_e_acsl_n_3); + __gmpz_init_set_si(__gen_e_acsl__11,0L); + __gen_e_acsl_eq_6 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_8), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__11)); + __e_acsl_assert_register_long(& __gen_e_acsl_assert_data_9,"n",0, + __gen_e_acsl_n_3); + __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_9,"f5(n)",0, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_8)); __gen_e_acsl_assert_data_9.blocking = 1; __gen_e_acsl_assert_data_9.kind = "Assertion"; - __gen_e_acsl_assert_data_9.pred_txt = "f4(9) > 0"; + __gen_e_acsl_assert_data_9.pred_txt = "\\let n = 0 == 0? 0x7fffffffffffffffL: -1; f5(n) == 0"; __gen_e_acsl_assert_data_9.file = "functions_rec.c"; __gen_e_acsl_assert_data_9.fct = "main"; - __gen_e_acsl_assert_data_9.line = 36; - __e_acsl_assert(__gen_e_acsl_f4_8 > 0UL,& __gen_e_acsl_assert_data_9); + __gen_e_acsl_assert_data_9.line = 40; + __e_acsl_assert(__gen_e_acsl_eq_6 == 0,& __gen_e_acsl_assert_data_9); __e_acsl_assert_clean(& __gen_e_acsl_assert_data_9); - } - /*@ assert f4(9) > 0; */ ; - { - __e_acsl_mpz_t __gen_e_acsl_f5_8; - __e_acsl_mpz_t __gen_e_acsl__32; - int __gen_e_acsl_eq_4; - __e_acsl_assert_data_t __gen_e_acsl_assert_data_10 = - {.values = (void *)0}; - __gen_e_acsl_f5(& __gen_e_acsl_f5_8,0); - __gmpz_init_set_si(__gen_e_acsl__32,0L); - __gen_e_acsl_eq_4 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_8), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__32)); - __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_10,"f5(0)",0, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_8)); - __gen_e_acsl_assert_data_10.blocking = 1; - __gen_e_acsl_assert_data_10.kind = "Assertion"; - __gen_e_acsl_assert_data_10.pred_txt = "f5(0) == 0"; - __gen_e_acsl_assert_data_10.file = "functions_rec.c"; - __gen_e_acsl_assert_data_10.fct = "main"; - __gen_e_acsl_assert_data_10.line = 38; - __e_acsl_assert(__gen_e_acsl_eq_4 == 0,& __gen_e_acsl_assert_data_10); - __e_acsl_assert_clean(& __gen_e_acsl_assert_data_10); __gmpz_clear(__gen_e_acsl_f5_8); - __gmpz_clear(__gen_e_acsl__32); - } - /*@ assert f5(0) == 0; */ ; - { - long __gen_e_acsl_n_9; - __e_acsl_mpz_t __gen_e_acsl_f5_10; - __e_acsl_mpz_t __gen_e_acsl__33; - int __gen_e_acsl_eq_5; - __e_acsl_assert_data_t __gen_e_acsl_assert_data_11 = - {.values = (void *)0}; - __gen_e_acsl_n_9 = 9223372036854775807L; - __gen_e_acsl_f5_2(& __gen_e_acsl_f5_10,__gen_e_acsl_n_9); - __gmpz_init_set_si(__gen_e_acsl__33,0L); - __gen_e_acsl_eq_5 = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_10), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__33)); - __e_acsl_assert_register_long(& __gen_e_acsl_assert_data_11,"n",0, - __gen_e_acsl_n_9); - __e_acsl_assert_register_mpz(& __gen_e_acsl_assert_data_11,"f5(n)",0, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_10)); - __gen_e_acsl_assert_data_11.blocking = 1; - __gen_e_acsl_assert_data_11.kind = "Assertion"; - __gen_e_acsl_assert_data_11.pred_txt = "\\let n = 0 == 0? 0x7fffffffffffffffL: -1; f5(n) == 0"; - __gen_e_acsl_assert_data_11.file = "functions_rec.c"; - __gen_e_acsl_assert_data_11.fct = "main"; - __gen_e_acsl_assert_data_11.line = 40; - __e_acsl_assert(__gen_e_acsl_eq_5 == 0,& __gen_e_acsl_assert_data_11); - __e_acsl_assert_clean(& __gen_e_acsl_assert_data_11); - __gmpz_clear(__gen_e_acsl_f5_10); - __gmpz_clear(__gen_e_acsl__33); + __gmpz_clear(__gen_e_acsl__11); } /*@ assert \let n = 0 == 0? 0x7fffffffffffffffL: -1; f5(n) == 0; */ ; __retres = 0; @@ -252,377 +234,106 @@ int main(void) return __retres; } -/*@ assigns (*__retres_arg)[0]; - assigns (*__retres_arg)[0] \from n; */ -void __gen_e_acsl_f1_2(__e_acsl_mpz_t *__retres_arg, long n) -{ - __e_acsl_mpz_t __gen_e_acsl_if_2; - if (n <= 0L) { - __e_acsl_mpz_t __gen_e_acsl__2; - __gmpz_init_set_si(__gen_e_acsl__2,0L); - __gmpz_init_set(__gen_e_acsl_if_2, - (__e_acsl_mpz_struct const *)(__gen_e_acsl__2)); - __gmpz_clear(__gen_e_acsl__2); - } - else { - __e_acsl_mpz_t __gen_e_acsl_n; - __e_acsl_mpz_t __gen_e_acsl__3; - __e_acsl_mpz_t __gen_e_acsl_sub; - __e_acsl_mpz_t __gen_e_acsl_f1_6; - __e_acsl_mpz_t __gen_e_acsl_add_2; - __gmpz_init_set_si(__gen_e_acsl_n,n); - __gmpz_init_set_si(__gen_e_acsl__3,1L); - __gmpz_init(__gen_e_acsl_sub); - __gmpz_sub(__gen_e_acsl_sub, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__3)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub); - */ - __gen_e_acsl_f1_3(& __gen_e_acsl_f1_6, - (__e_acsl_mpz_struct *)__gen_e_acsl_sub); - __gmpz_init(__gen_e_acsl_add_2); - __gmpz_add(__gen_e_acsl_add_2, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_6), - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n)); - __gmpz_init_set(__gen_e_acsl_if_2, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2)); - __gmpz_clear(__gen_e_acsl_n); - __gmpz_clear(__gen_e_acsl__3); - __gmpz_clear(__gen_e_acsl_sub); - __gmpz_clear(__gen_e_acsl_f1_6); - __gmpz_clear(__gen_e_acsl_add_2); - } - __gmpz_init_set(*__retres_arg, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_2)); - __gmpz_clear(__gen_e_acsl_if_2); - return; -} - /*@ assigns (*__retres_arg)[0]; assigns (*__retres_arg)[0] \from n; */ void __gen_e_acsl_f1(__e_acsl_mpz_t *__retres_arg, int n) { - __e_acsl_mpz_t __gen_e_acsl_if_3; + __e_acsl_mpz_t __gen_e_acsl_if; if (n <= 0) { __e_acsl_mpz_t __gen_e_acsl_; __gmpz_init_set_si(__gen_e_acsl_,0L); - __gmpz_init_set(__gen_e_acsl_if_3, + __gmpz_init_set(__gen_e_acsl_if, (__e_acsl_mpz_struct const *)(__gen_e_acsl_)); __gmpz_clear(__gen_e_acsl_); } else { - __e_acsl_mpz_t __gen_e_acsl_f1_7; - __e_acsl_mpz_t __gen_e_acsl_n_2; - __e_acsl_mpz_t __gen_e_acsl_add_3; - __gen_e_acsl_f1_2(& __gen_e_acsl_f1_7,n - 1L); - __gmpz_init_set_si(__gen_e_acsl_n_2,(long)n); - __gmpz_init(__gen_e_acsl_add_3); - __gmpz_add(__gen_e_acsl_add_3, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_7), - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_2)); - __gmpz_init_set(__gen_e_acsl_if_3, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_3)); - __gmpz_clear(__gen_e_acsl_f1_7); - __gmpz_clear(__gen_e_acsl_n_2); - __gmpz_clear(__gen_e_acsl_add_3); - } - __gmpz_init_set(*__retres_arg, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_3)); - __gmpz_clear(__gen_e_acsl_if_3); - return; -} - -/*@ assigns (*__retres_arg)[0]; - assigns (*__retres_arg)[0] \from *((__e_acsl_mpz_struct *)n); - */ -void __gen_e_acsl_f1_3(__e_acsl_mpz_t *__retres_arg, __e_acsl_mpz_struct * n) -{ - __e_acsl_mpz_t __gen_e_acsl__4; - int __gen_e_acsl_le; - __e_acsl_mpz_t __gen_e_acsl_if; - __gmpz_init_set_si(__gen_e_acsl__4,0L); - __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__4)); - if (__gen_e_acsl_le <= 0) { - __e_acsl_mpz_t __gen_e_acsl__5; - __gmpz_init_set_si(__gen_e_acsl__5,0L); - __gmpz_init_set(__gen_e_acsl_if, - (__e_acsl_mpz_struct const *)(__gen_e_acsl__5)); - __gmpz_clear(__gen_e_acsl__5); - } - else { - __e_acsl_mpz_t __gen_e_acsl__6; - __e_acsl_mpz_t __gen_e_acsl_sub_2; - __e_acsl_mpz_t __gen_e_acsl_f1_5; + __e_acsl_mpz_t __gen_e_acsl_f1_3; + __e_acsl_mpz_t __gen_e_acsl_n; __e_acsl_mpz_t __gen_e_acsl_add; - __gmpz_init_set_si(__gen_e_acsl__6,1L); - __gmpz_init(__gen_e_acsl_sub_2); - __gmpz_sub(__gen_e_acsl_sub_2,(__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__6)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_2); - */ - __gen_e_acsl_f1_3(& __gen_e_acsl_f1_5, - (__e_acsl_mpz_struct *)__gen_e_acsl_sub_2); + __gen_e_acsl_f1(& __gen_e_acsl_f1_3,n - 1); + __gmpz_init_set_si(__gen_e_acsl_n,(long)n); __gmpz_init(__gen_e_acsl_add); __gmpz_add(__gen_e_acsl_add, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_5), - (__e_acsl_mpz_struct const *)(n)); + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f1_3), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_n)); __gmpz_init_set(__gen_e_acsl_if, (__e_acsl_mpz_struct const *)(__gen_e_acsl_add)); - __gmpz_clear(__gen_e_acsl__6); - __gmpz_clear(__gen_e_acsl_sub_2); - __gmpz_clear(__gen_e_acsl_f1_5); + __gmpz_clear(__gen_e_acsl_f1_3); + __gmpz_clear(__gen_e_acsl_n); __gmpz_clear(__gen_e_acsl_add); } __gmpz_init_set(*__retres_arg, (__e_acsl_mpz_struct const *)(__gen_e_acsl_if)); - __gmpz_clear(__gen_e_acsl__4); __gmpz_clear(__gen_e_acsl_if); return; } -/*@ assigns \result; - assigns \result \from n; */ -int __gen_e_acsl_f2_2(long n) -{ - int __gen_e_acsl_if_5; - if (n < 0L) __gen_e_acsl_if_5 = 1; - else { - __e_acsl_mpz_t __gen_e_acsl_n_3; - __e_acsl_mpz_t __gen_e_acsl__10; - __e_acsl_mpz_t __gen_e_acsl_sub_3; - int __gen_e_acsl_f2_10; - __e_acsl_mpz_t __gen_e_acsl__15; - __e_acsl_mpz_t __gen_e_acsl_sub_7; - int __gen_e_acsl_f2_12; - __e_acsl_mpz_t __gen_e_acsl__16; - __e_acsl_mpz_t __gen_e_acsl_sub_8; - int __gen_e_acsl_f2_14; - __gmpz_init_set_si(__gen_e_acsl_n_3,n); - __gmpz_init_set_si(__gen_e_acsl__10,1L); - __gmpz_init(__gen_e_acsl_sub_3); - __gmpz_sub(__gen_e_acsl_sub_3, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_3), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__10)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_3); - */ - __gen_e_acsl_f2_10 = __gen_e_acsl_f2_3((__e_acsl_mpz_struct *)__gen_e_acsl_sub_3); - __gmpz_init_set_si(__gen_e_acsl__15,2L); - __gmpz_init(__gen_e_acsl_sub_7); - __gmpz_sub(__gen_e_acsl_sub_7, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_3), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__15)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_7); - */ - __gen_e_acsl_f2_12 = __gen_e_acsl_f2_3((__e_acsl_mpz_struct *)__gen_e_acsl_sub_7); - __gmpz_init_set_si(__gen_e_acsl__16,3L); - __gmpz_init(__gen_e_acsl_sub_8); - __gmpz_sub(__gen_e_acsl_sub_8, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_3), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__16)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_8); - */ - __gen_e_acsl_f2_14 = __gen_e_acsl_f2_3((__e_acsl_mpz_struct *)__gen_e_acsl_sub_8); - __e_acsl_assert_data_t __gen_e_acsl_assert_data_6 = - {.values = (void *)0}; - __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_6, - "__gen_e_acsl_f2_14",0,__gen_e_acsl_f2_14); - __gen_e_acsl_assert_data_6.blocking = 1; - __gen_e_acsl_assert_data_6.kind = "RTE"; - __gen_e_acsl_assert_data_6.pred_txt = "__gen_e_acsl_f2_14 != 0"; - __gen_e_acsl_assert_data_6.file = "functions_rec.c"; - __gen_e_acsl_assert_data_6.fct = "f2_2"; - __gen_e_acsl_assert_data_6.line = 13; - __gen_e_acsl_assert_data_6.name = "division_by_zero"; - __e_acsl_assert(__gen_e_acsl_f2_14 != 0,& __gen_e_acsl_assert_data_6); - __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6); - /*@ assert Eva: division_by_zero: __gen_e_acsl_f2_14 != 0; */ - /*@ assert - Eva: signed_overflow: - -2147483648 <= __gen_e_acsl_f2_10 * __gen_e_acsl_f2_12; - */ - /*@ assert - Eva: signed_overflow: - __gen_e_acsl_f2_10 * __gen_e_acsl_f2_12 <= 2147483647; - */ - /*@ assert - Eva: signed_overflow: - (int)(__gen_e_acsl_f2_10 * __gen_e_acsl_f2_12) / __gen_e_acsl_f2_14 - <= 2147483647; - */ - __gen_e_acsl_if_5 = (__gen_e_acsl_f2_10 * __gen_e_acsl_f2_12) / __gen_e_acsl_f2_14; - __gmpz_clear(__gen_e_acsl_n_3); - __gmpz_clear(__gen_e_acsl__10); - __gmpz_clear(__gen_e_acsl_sub_3); - __gmpz_clear(__gen_e_acsl__15); - __gmpz_clear(__gen_e_acsl_sub_7); - __gmpz_clear(__gen_e_acsl__16); - __gmpz_clear(__gen_e_acsl_sub_8); - } - return __gen_e_acsl_if_5; -} - -/*@ assigns \result; - assigns \result \from n; */ -int __gen_e_acsl_f2(int n) +/*@ assigns (*__retres_arg)[0]; + assigns (*__retres_arg)[0] \from n; */ +void __gen_e_acsl_f2(__e_acsl_mpz_t *__retres_arg, int n) { - int __gen_e_acsl_if_6; - if (n < 0) __gen_e_acsl_if_6 = 1; - else { - int __gen_e_acsl_f2_15; - int __gen_e_acsl_f2_17; - int __gen_e_acsl_f2_19; - __gen_e_acsl_f2_15 = __gen_e_acsl_f2_2(n - 1L); - __gen_e_acsl_f2_17 = __gen_e_acsl_f2_2(n - 2L); - __gen_e_acsl_f2_19 = __gen_e_acsl_f2_2(n - 3L); - __e_acsl_assert_data_t __gen_e_acsl_assert_data_7 = - {.values = (void *)0}; - __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_7, - "__gen_e_acsl_f2_19",0,__gen_e_acsl_f2_19); - __gen_e_acsl_assert_data_7.blocking = 1; - __gen_e_acsl_assert_data_7.kind = "RTE"; - __gen_e_acsl_assert_data_7.pred_txt = "__gen_e_acsl_f2_19 != 0"; - __gen_e_acsl_assert_data_7.file = "functions_rec.c"; - __gen_e_acsl_assert_data_7.fct = "f2"; - __gen_e_acsl_assert_data_7.line = 13; - __gen_e_acsl_assert_data_7.name = "division_by_zero"; - __e_acsl_assert(__gen_e_acsl_f2_19 != 0,& __gen_e_acsl_assert_data_7); - __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7); - /*@ assert Eva: division_by_zero: __gen_e_acsl_f2_19 != 0; */ - /*@ assert - Eva: signed_overflow: - -2147483648 <= __gen_e_acsl_f2_15 * __gen_e_acsl_f2_17; - */ - /*@ assert - Eva: signed_overflow: - __gen_e_acsl_f2_15 * __gen_e_acsl_f2_17 <= 2147483647; - */ - /*@ assert - Eva: signed_overflow: - (int)(__gen_e_acsl_f2_15 * __gen_e_acsl_f2_17) / __gen_e_acsl_f2_19 - <= 2147483647; - */ - __gen_e_acsl_if_6 = (__gen_e_acsl_f2_15 * __gen_e_acsl_f2_17) / __gen_e_acsl_f2_19; + __e_acsl_mpz_t __gen_e_acsl_if_2; + if (n < 0) { + __e_acsl_mpz_t __gen_e_acsl__5; + __gmpz_init_set_si(__gen_e_acsl__5,1L); + __gmpz_init_set(__gen_e_acsl_if_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl__5)); + __gmpz_clear(__gen_e_acsl__5); } - return __gen_e_acsl_if_6; -} - -/*@ assigns \result; - assigns \result \from *((__e_acsl_mpz_struct *)n); */ -int __gen_e_acsl_f2_3(__e_acsl_mpz_struct * n) -{ - __e_acsl_mpz_t __gen_e_acsl__11; - int __gen_e_acsl_lt; - int __gen_e_acsl_if_4; - __gmpz_init_set_si(__gen_e_acsl__11,0L); - __gen_e_acsl_lt = __gmpz_cmp((__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__11)); - if (__gen_e_acsl_lt < 0) __gen_e_acsl_if_4 = 1; else { - __e_acsl_mpz_t __gen_e_acsl__12; - __e_acsl_mpz_t __gen_e_acsl_sub_4; - int __gen_e_acsl_f2_5; - __e_acsl_mpz_t __gen_e_acsl__13; - __e_acsl_mpz_t __gen_e_acsl_sub_5; - int __gen_e_acsl_f2_7; - __e_acsl_mpz_t __gen_e_acsl__14; - __e_acsl_mpz_t __gen_e_acsl_sub_6; - int __gen_e_acsl_f2_9; - __gmpz_init_set_si(__gen_e_acsl__12,1L); - __gmpz_init(__gen_e_acsl_sub_4); - __gmpz_sub(__gen_e_acsl_sub_4,(__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__12)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_4); - */ - __gen_e_acsl_f2_5 = __gen_e_acsl_f2_3((__e_acsl_mpz_struct *)__gen_e_acsl_sub_4); - __gmpz_init_set_si(__gen_e_acsl__13,2L); - __gmpz_init(__gen_e_acsl_sub_5); - __gmpz_sub(__gen_e_acsl_sub_5,(__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__13)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_5); - */ - __gen_e_acsl_f2_7 = __gen_e_acsl_f2_3((__e_acsl_mpz_struct *)__gen_e_acsl_sub_5); - __gmpz_init_set_si(__gen_e_acsl__14,3L); - __gmpz_init(__gen_e_acsl_sub_6); - __gmpz_sub(__gen_e_acsl_sub_6,(__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__14)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_6); - */ - __gen_e_acsl_f2_9 = __gen_e_acsl_f2_3((__e_acsl_mpz_struct *)__gen_e_acsl_sub_6); + __e_acsl_mpz_t __gen_e_acsl_f2_3; + __e_acsl_mpz_t __gen_e_acsl_f2_5; + __e_acsl_mpz_t __gen_e_acsl_mul; + __e_acsl_mpz_t __gen_e_acsl_f2_7; + __e_acsl_mpz_t __gen_e_acsl__6; + int __gen_e_acsl_div_guard; + __e_acsl_mpz_t __gen_e_acsl_div; + __gen_e_acsl_f2(& __gen_e_acsl_f2_3,n - 1); + __gen_e_acsl_f2(& __gen_e_acsl_f2_5,n - 2); + __gmpz_init(__gen_e_acsl_mul); + __gmpz_mul(__gen_e_acsl_mul, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_3), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_5)); __e_acsl_assert_data_t __gen_e_acsl_assert_data_5 = {.values = (void *)0}; - __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5, - "__gen_e_acsl_f2_9",0,__gen_e_acsl_f2_9); - __gen_e_acsl_assert_data_5.blocking = 1; - __gen_e_acsl_assert_data_5.kind = "RTE"; - __gen_e_acsl_assert_data_5.pred_txt = "__gen_e_acsl_f2_9 != 0"; - __gen_e_acsl_assert_data_5.file = "functions_rec.c"; - __gen_e_acsl_assert_data_5.fct = "f2_3"; - __gen_e_acsl_assert_data_5.line = 13; - __gen_e_acsl_assert_data_5.name = "division_by_zero"; - __e_acsl_assert(__gen_e_acsl_f2_9 != 0,& __gen_e_acsl_assert_data_5); - __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5); - /*@ assert Eva: division_by_zero: __gen_e_acsl_f2_9 != 0; */ - /*@ assert - Eva: signed_overflow: - -2147483648 <= __gen_e_acsl_f2_5 * __gen_e_acsl_f2_7; - */ - /*@ assert - Eva: signed_overflow: - __gen_e_acsl_f2_5 * __gen_e_acsl_f2_7 <= 2147483647; - */ - /*@ assert - Eva: signed_overflow: - (int)(__gen_e_acsl_f2_5 * __gen_e_acsl_f2_7) / __gen_e_acsl_f2_9 <= - 2147483647; - */ - __gen_e_acsl_if_4 = (__gen_e_acsl_f2_5 * __gen_e_acsl_f2_7) / __gen_e_acsl_f2_9; - __gmpz_clear(__gen_e_acsl__12); - __gmpz_clear(__gen_e_acsl_sub_4); - __gmpz_clear(__gen_e_acsl__13); - __gmpz_clear(__gen_e_acsl_sub_5); - __gmpz_clear(__gen_e_acsl__14); - __gmpz_clear(__gen_e_acsl_sub_6); + __gen_e_acsl_f2(& __gen_e_acsl_f2_7,n - 3); + __gmpz_init_set_si(__gen_e_acsl__6,0L); + __gen_e_acsl_div_guard = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_7), + (__e_acsl_mpz_struct const *)(__gen_e_acsl__6)); + __gmpz_init(__gen_e_acsl_div); + /*@ assert E_ACSL: f2(n - 3) != 0; */ + { + __gen_e_acsl_assert_data_5.blocking = 1; + __gen_e_acsl_assert_data_5.kind = "Assertion"; + __gen_e_acsl_assert_data_5.pred_txt = "f2(n - 3) != 0"; + __gen_e_acsl_assert_data_5.file = "functions_rec.c"; + __gen_e_acsl_assert_data_5.fct = "f2"; + __gen_e_acsl_assert_data_5.line = 13; + __e_acsl_assert(__gen_e_acsl_div_guard != 0, + & __gen_e_acsl_assert_data_5); + __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5); + } + __gmpz_tdiv_q(__gen_e_acsl_div, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_mul), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f2_7)); + __gmpz_init_set(__gen_e_acsl_if_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_div)); + __gmpz_clear(__gen_e_acsl_f2_3); + __gmpz_clear(__gen_e_acsl_f2_5); + __gmpz_clear(__gen_e_acsl_mul); + __gmpz_clear(__gen_e_acsl_f2_7); + __gmpz_clear(__gen_e_acsl__6); + __gmpz_clear(__gen_e_acsl_div); } - __gmpz_clear(__gen_e_acsl__11); - return __gen_e_acsl_if_4; -} - -/*@ assigns \result; - assigns \result \from n; */ -int __gen_e_acsl_g_3(long n) -{ - int __retres = 0; - return __retres; -} - -/*@ assigns \result; - assigns \result \from *((__e_acsl_mpz_struct *)n); */ -int __gen_e_acsl_g_9(__e_acsl_mpz_struct * n) -{ - int __retres = 0; - return __retres; + __gmpz_init_set(*__retres_arg, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_2)); + __gmpz_clear(__gen_e_acsl_if_2); + return; } /*@ assigns \result; assigns \result \from n; */ -int __gen_e_acsl_g(int n) +int __gen_e_acsl_g_3(int n) { int __retres = 0; return __retres; @@ -630,357 +341,116 @@ int __gen_e_acsl_g(int n) /*@ assigns \result; assigns \result \from n; */ -int __gen_e_acsl_g_11(long n) -{ - int __retres = 0; - return __retres; -} - -/*@ assigns \result; - assigns \result \from *((__e_acsl_mpz_struct *)n); */ -int __gen_e_acsl_g_5(__e_acsl_mpz_struct * n) +int __gen_e_acsl_g(unsigned int n) { int __retres = 0; return __retres; } -/*@ assigns \result; - assigns \result \from n; */ -int __gen_e_acsl_f3_2(long n) -{ - int __gen_e_acsl_if_8; - if (n > 0L) { - int __gen_e_acsl_g_4; - __e_acsl_mpz_t __gen_e_acsl_n_4; - __e_acsl_mpz_t __gen_e_acsl__17; - __e_acsl_mpz_t __gen_e_acsl_sub_9; - int __gen_e_acsl_f3_6; - __gen_e_acsl_g_4 = __gen_e_acsl_g_3(n); - __gmpz_init_set_si(__gen_e_acsl_n_4,n); - __gmpz_init_set_si(__gen_e_acsl__17,1L); - __gmpz_init(__gen_e_acsl_sub_9); - __gmpz_sub(__gen_e_acsl_sub_9, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_4), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__17)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_9); - */ - __gen_e_acsl_f3_6 = __gen_e_acsl_f3_3((__e_acsl_mpz_struct *)__gen_e_acsl_sub_9); - __gen_e_acsl_if_8 = __gen_e_acsl_g_4 * __gen_e_acsl_f3_6 - 5; - __gmpz_clear(__gen_e_acsl_n_4); - __gmpz_clear(__gen_e_acsl__17); - __gmpz_clear(__gen_e_acsl_sub_9); - } - else { - __e_acsl_mpz_t __gen_e_acsl_n_5; - __e_acsl_mpz_t __gen_e_acsl__21; - __e_acsl_mpz_t __gen_e_acsl_add_5; - int __gen_e_acsl_g_10; - __gmpz_init_set_si(__gen_e_acsl_n_5,n); - __gmpz_init_set_si(__gen_e_acsl__21,1L); - __gmpz_init(__gen_e_acsl_add_5); - __gmpz_add(__gen_e_acsl_add_5, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_5), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__21)); - __gen_e_acsl_g_10 = __gen_e_acsl_g_9((__e_acsl_mpz_struct *)__gen_e_acsl_add_5); - __gen_e_acsl_if_8 = __gen_e_acsl_g_10; - __gmpz_clear(__gen_e_acsl_n_5); - __gmpz_clear(__gen_e_acsl__21); - __gmpz_clear(__gen_e_acsl_add_5); - } - return __gen_e_acsl_if_8; -} - /*@ assigns \result; assigns \result \from n; */ int __gen_e_acsl_f3(int n) { - int __gen_e_acsl_if_9; + int __gen_e_acsl_if_3; if (n > 0) { int __gen_e_acsl_g_2; - int __gen_e_acsl_f3_7; - __gen_e_acsl_g_2 = __gen_e_acsl_g(n); - __gen_e_acsl_f3_7 = __gen_e_acsl_f3_2(n - 1L); - __gen_e_acsl_if_9 = __gen_e_acsl_g_2 * __gen_e_acsl_f3_7 - 5; + int __gen_e_acsl_f3_3; + __gen_e_acsl_g_2 = __gen_e_acsl_g((unsigned int)n); + __gen_e_acsl_f3_3 = __gen_e_acsl_f3(n - 1); + __gen_e_acsl_if_3 = __gen_e_acsl_g_2 * __gen_e_acsl_f3_3 - 5; } else { - int __gen_e_acsl_g_12; - __gen_e_acsl_g_12 = __gen_e_acsl_g_11(n + 1L); - __gen_e_acsl_if_9 = __gen_e_acsl_g_12; - } - return __gen_e_acsl_if_9; -} - -/*@ assigns \result; - assigns \result \from *((__e_acsl_mpz_struct *)n); */ -int __gen_e_acsl_f3_3(__e_acsl_mpz_struct * n) -{ - __e_acsl_mpz_t __gen_e_acsl__18; - int __gen_e_acsl_gt; - int __gen_e_acsl_if_7; - __gmpz_init_set_si(__gen_e_acsl__18,0L); - __gen_e_acsl_gt = __gmpz_cmp((__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__18)); - if (__gen_e_acsl_gt > 0) { - int __gen_e_acsl_g_6; - __e_acsl_mpz_t __gen_e_acsl__19; - __e_acsl_mpz_t __gen_e_acsl_sub_10; - int __gen_e_acsl_f3_5; - __gen_e_acsl_g_6 = __gen_e_acsl_g_5(n); - __gmpz_init_set_si(__gen_e_acsl__19,1L); - __gmpz_init(__gen_e_acsl_sub_10); - __gmpz_sub(__gen_e_acsl_sub_10,(__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__19)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_sub_10); - */ - __gen_e_acsl_f3_5 = __gen_e_acsl_f3_3((__e_acsl_mpz_struct *)__gen_e_acsl_sub_10); - __gen_e_acsl_if_7 = __gen_e_acsl_g_6 * __gen_e_acsl_f3_5 - 5; - __gmpz_clear(__gen_e_acsl__19); - __gmpz_clear(__gen_e_acsl_sub_10); - } - else { - __e_acsl_mpz_t __gen_e_acsl__20; - __e_acsl_mpz_t __gen_e_acsl_add_4; - int __gen_e_acsl_g_8; - __gmpz_init_set_si(__gen_e_acsl__20,1L); - __gmpz_init(__gen_e_acsl_add_4); - __gmpz_add(__gen_e_acsl_add_4,(__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__20)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_add_4); - */ - __gen_e_acsl_g_8 = __gen_e_acsl_g_5((__e_acsl_mpz_struct *)__gen_e_acsl_add_4); - __gen_e_acsl_if_7 = __gen_e_acsl_g_8; - __gmpz_clear(__gen_e_acsl__20); - __gmpz_clear(__gen_e_acsl_add_4); - } - __gmpz_clear(__gen_e_acsl__18); - return __gen_e_acsl_if_7; -} - -/*@ assigns \result; - assigns \result \from n; */ -unsigned long __gen_e_acsl_f4_2(long n) -{ - unsigned long __gen_e_acsl_if_13; - if (n < 100L) { - __e_acsl_mpz_t __gen_e_acsl_n_6; - __e_acsl_mpz_t __gen_e_acsl__22; - __e_acsl_mpz_t __gen_e_acsl_add_6; - unsigned long __gen_e_acsl_f4_6; - __gmpz_init_set_si(__gen_e_acsl_n_6,n); - __gmpz_init_set_si(__gen_e_acsl__22,1L); - __gmpz_init(__gen_e_acsl_add_6); - __gmpz_add(__gen_e_acsl_add_6, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_6), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__22)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_add_6); - */ - __gen_e_acsl_f4_6 = __gen_e_acsl_f4_3((__e_acsl_mpz_struct *)__gen_e_acsl_add_6); - __gen_e_acsl_if_13 = __gen_e_acsl_f4_6; - __gmpz_clear(__gen_e_acsl_n_6); - __gmpz_clear(__gen_e_acsl__22); - __gmpz_clear(__gen_e_acsl_add_6); - } - else { - unsigned long __gen_e_acsl_if_12; - if (n < 9223372036854775807L) __gen_e_acsl_if_12 = 9223372036854775807UL; - else __gen_e_acsl_if_12 = 6UL; - __gen_e_acsl_if_13 = __gen_e_acsl_if_12; + int __gen_e_acsl_g_4; + __gen_e_acsl_g_4 = __gen_e_acsl_g_3(n + 1); + __gen_e_acsl_if_3 = __gen_e_acsl_g_4; } - return __gen_e_acsl_if_13; + return __gen_e_acsl_if_3; } /*@ assigns \result; assigns \result \from n; */ unsigned long __gen_e_acsl_f4(int n) { - unsigned long __gen_e_acsl_if_15; + unsigned long __gen_e_acsl_if_5; if (n < 100) { - unsigned long __gen_e_acsl_f4_7; - __gen_e_acsl_f4_7 = __gen_e_acsl_f4_2(n + 1L); - __gen_e_acsl_if_15 = __gen_e_acsl_f4_7; + unsigned long __gen_e_acsl_f4_3; + __gen_e_acsl_f4_3 = __gen_e_acsl_f4(n + 1); + __gen_e_acsl_if_5 = __gen_e_acsl_f4_3; } else { - unsigned long __gen_e_acsl_if_14; - if ((long)n < 9223372036854775807L) __gen_e_acsl_if_14 = 9223372036854775807UL; - else __gen_e_acsl_if_14 = 6UL; - __gen_e_acsl_if_15 = __gen_e_acsl_if_14; + unsigned long __gen_e_acsl_if_4; + if ((unsigned long)n < 9223372036854775807UL) __gen_e_acsl_if_4 = 9223372036854775807UL; + else __gen_e_acsl_if_4 = 6UL; + __gen_e_acsl_if_5 = __gen_e_acsl_if_4; } - return __gen_e_acsl_if_15; -} - -/*@ assigns \result; - assigns \result \from *((__e_acsl_mpz_struct *)n); */ -unsigned long __gen_e_acsl_f4_3(__e_acsl_mpz_struct * n) -{ - __e_acsl_mpz_t __gen_e_acsl__23; - int __gen_e_acsl_lt_2; - unsigned long __gen_e_acsl_if_11; - __gmpz_init_set_si(__gen_e_acsl__23,100L); - __gen_e_acsl_lt_2 = __gmpz_cmp((__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__23)); - if (__gen_e_acsl_lt_2 < 0) { - __e_acsl_mpz_t __gen_e_acsl__24; - __e_acsl_mpz_t __gen_e_acsl_add_7; - unsigned long __gen_e_acsl_f4_5; - __gmpz_init_set_si(__gen_e_acsl__24,1L); - __gmpz_init(__gen_e_acsl_add_7); - __gmpz_add(__gen_e_acsl_add_7,(__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__24)); - /*@ assert - Eva: initialization: - \initialized((__e_acsl_mpz_struct *)__gen_e_acsl_add_7); - */ - __gen_e_acsl_f4_5 = __gen_e_acsl_f4_3((__e_acsl_mpz_struct *)__gen_e_acsl_add_7); - __gen_e_acsl_if_11 = __gen_e_acsl_f4_5; - __gmpz_clear(__gen_e_acsl__24); - __gmpz_clear(__gen_e_acsl_add_7); - } - else { - __e_acsl_mpz_t __gen_e_acsl__25; - int __gen_e_acsl_lt_3; - unsigned long __gen_e_acsl_if_10; - __gmpz_init_set_ui(__gen_e_acsl__25,9223372036854775807UL); - __gen_e_acsl_lt_3 = __gmpz_cmp((__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__25)); - if (__gen_e_acsl_lt_3 < 0) __gen_e_acsl_if_10 = 9223372036854775807UL; - else __gen_e_acsl_if_10 = 6UL; - __gen_e_acsl_if_11 = __gen_e_acsl_if_10; - __gmpz_clear(__gen_e_acsl__25); - } - __gmpz_clear(__gen_e_acsl__23); - return __gen_e_acsl_if_11; + return __gen_e_acsl_if_5; } /*@ assigns (*__retres_arg)[0]; assigns (*__retres_arg)[0] \from n; */ -void __gen_e_acsl_f5_2(__e_acsl_mpz_t *__retres_arg, long n) +void __gen_e_acsl_f5_5(__e_acsl_mpz_t *__retres_arg, long n) { - __e_acsl_mpz_t __gen_e_acsl_if_17; + __e_acsl_mpz_t __gen_e_acsl_if_7; if (n >= 0L) { - __e_acsl_mpz_t __gen_e_acsl__27; - __gmpz_init_set_si(__gen_e_acsl__27,0L); - __gmpz_init_set(__gen_e_acsl_if_17, - (__e_acsl_mpz_struct const *)(__gen_e_acsl__27)); - __gmpz_clear(__gen_e_acsl__27); - } - else { - __e_acsl_mpz_t __gen_e_acsl_n_7; - __e_acsl_mpz_t __gen_e_acsl__28; - __e_acsl_mpz_t __gen_e_acsl_add_8; - __e_acsl_mpz_t __gen_e_acsl_f5_6; - __e_acsl_mpz_t __gen_e_acsl_add_11; - __gmpz_init_set_si(__gen_e_acsl_n_7,n); - __gmpz_init_set_si(__gen_e_acsl__28,1L); - __gmpz_init(__gen_e_acsl_add_8); - __gmpz_add(__gen_e_acsl_add_8, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_7), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__28)); - __gen_e_acsl_f5_3(& __gen_e_acsl_f5_6, - (__e_acsl_mpz_struct *)__gen_e_acsl_add_8); - __gmpz_init(__gen_e_acsl_add_11); - __gmpz_add(__gen_e_acsl_add_11, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_6), - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_7)); - __gmpz_init_set(__gen_e_acsl_if_17, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_11)); - __gmpz_clear(__gen_e_acsl_n_7); - __gmpz_clear(__gen_e_acsl__28); - __gmpz_clear(__gen_e_acsl_add_8); - __gmpz_clear(__gen_e_acsl_f5_6); - __gmpz_clear(__gen_e_acsl_add_11); - } - __gmpz_init_set(*__retres_arg, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_17)); - __gmpz_clear(__gen_e_acsl_if_17); - return; -} - -/*@ assigns (*__retres_arg)[0]; - assigns (*__retres_arg)[0] \from n; */ -void __gen_e_acsl_f5(__e_acsl_mpz_t *__retres_arg, int n) -{ - __e_acsl_mpz_t __gen_e_acsl_if_18; - if (n >= 0) { - __e_acsl_mpz_t __gen_e_acsl__26; - __gmpz_init_set_si(__gen_e_acsl__26,0L); - __gmpz_init_set(__gen_e_acsl_if_18, - (__e_acsl_mpz_struct const *)(__gen_e_acsl__26)); - __gmpz_clear(__gen_e_acsl__26); + __e_acsl_mpz_t __gen_e_acsl__10; + __gmpz_init_set_si(__gen_e_acsl__10,0L); + __gmpz_init_set(__gen_e_acsl_if_7, + (__e_acsl_mpz_struct const *)(__gen_e_acsl__10)); + __gmpz_clear(__gen_e_acsl__10); } else { __e_acsl_mpz_t __gen_e_acsl_f5_7; - __e_acsl_mpz_t __gen_e_acsl_n_8; - __e_acsl_mpz_t __gen_e_acsl_add_12; - __gen_e_acsl_f5_2(& __gen_e_acsl_f5_7,n + 1L); - __gmpz_init_set_si(__gen_e_acsl_n_8,(long)n); - __gmpz_init(__gen_e_acsl_add_12); - __gmpz_add(__gen_e_acsl_add_12, + __e_acsl_mpz_t __gen_e_acsl_n_4; + __e_acsl_mpz_t __gen_e_acsl_add_3; + __gen_e_acsl_f5_5(& __gen_e_acsl_f5_7,n + 1L); + __gmpz_init_set_si(__gen_e_acsl_n_4,n); + __gmpz_init(__gen_e_acsl_add_3); + __gmpz_add(__gen_e_acsl_add_3, (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_7), - (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_8)); - __gmpz_init_set(__gen_e_acsl_if_18, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_12)); + (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_4)); + __gmpz_init_set(__gen_e_acsl_if_7, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_3)); __gmpz_clear(__gen_e_acsl_f5_7); - __gmpz_clear(__gen_e_acsl_n_8); - __gmpz_clear(__gen_e_acsl_add_12); + __gmpz_clear(__gen_e_acsl_n_4); + __gmpz_clear(__gen_e_acsl_add_3); } __gmpz_init_set(*__retres_arg, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_18)); - __gmpz_clear(__gen_e_acsl_if_18); + (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_7)); + __gmpz_clear(__gen_e_acsl_if_7); return; } /*@ assigns (*__retres_arg)[0]; - assigns (*__retres_arg)[0] \from *((__e_acsl_mpz_struct *)n); - */ -void __gen_e_acsl_f5_3(__e_acsl_mpz_t *__retres_arg, __e_acsl_mpz_struct * n) + assigns (*__retres_arg)[0] \from n; */ +void __gen_e_acsl_f5(__e_acsl_mpz_t *__retres_arg, int n) { - __e_acsl_mpz_t __gen_e_acsl__29; - int __gen_e_acsl_ge; - __e_acsl_mpz_t __gen_e_acsl_if_16; - __gmpz_init_set_si(__gen_e_acsl__29,0L); - __gen_e_acsl_ge = __gmpz_cmp((__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__29)); - if (__gen_e_acsl_ge >= 0) { - __e_acsl_mpz_t __gen_e_acsl__30; - __gmpz_init_set_si(__gen_e_acsl__30,0L); - __gmpz_init_set(__gen_e_acsl_if_16, - (__e_acsl_mpz_struct const *)(__gen_e_acsl__30)); - __gmpz_clear(__gen_e_acsl__30); + __e_acsl_mpz_t __gen_e_acsl_if_6; + if (n >= 0) { + __e_acsl_mpz_t __gen_e_acsl__8; + __gmpz_init_set_si(__gen_e_acsl__8,0L); + __gmpz_init_set(__gen_e_acsl_if_6, + (__e_acsl_mpz_struct const *)(__gen_e_acsl__8)); + __gmpz_clear(__gen_e_acsl__8); } else { - __e_acsl_mpz_t __gen_e_acsl__31; - __e_acsl_mpz_t __gen_e_acsl_add_9; - __e_acsl_mpz_t __gen_e_acsl_f5_5; - __e_acsl_mpz_t __gen_e_acsl_add_10; - __gmpz_init_set_si(__gen_e_acsl__31,1L); - __gmpz_init(__gen_e_acsl_add_9); - __gmpz_add(__gen_e_acsl_add_9,(__e_acsl_mpz_struct const *)(n), - (__e_acsl_mpz_struct const *)(__gen_e_acsl__31)); - __gen_e_acsl_f5_3(& __gen_e_acsl_f5_5, - (__e_acsl_mpz_struct *)__gen_e_acsl_add_9); - __gmpz_init(__gen_e_acsl_add_10); - __gmpz_add(__gen_e_acsl_add_10, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_5), - (__e_acsl_mpz_struct const *)(n)); - __gmpz_init_set(__gen_e_acsl_if_16, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_10)); - __gmpz_clear(__gen_e_acsl__31); - __gmpz_clear(__gen_e_acsl_add_9); - __gmpz_clear(__gen_e_acsl_f5_5); - __gmpz_clear(__gen_e_acsl_add_10); + __e_acsl_mpz_t __gen_e_acsl_f5_3; + __e_acsl_mpz_t __gen_e_acsl_n_2; + __e_acsl_mpz_t __gen_e_acsl_add_2; + __gen_e_acsl_f5(& __gen_e_acsl_f5_3,n + 1); + __gmpz_init_set_si(__gen_e_acsl_n_2,(long)n); + __gmpz_init(__gen_e_acsl_add_2); + __gmpz_add(__gen_e_acsl_add_2, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_f5_3), + (__e_acsl_mpz_struct const *)(__gen_e_acsl_n_2)); + __gmpz_init_set(__gen_e_acsl_if_6, + (__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2)); + __gmpz_clear(__gen_e_acsl_f5_3); + __gmpz_clear(__gen_e_acsl_n_2); + __gmpz_clear(__gen_e_acsl_add_2); } __gmpz_init_set(*__retres_arg, - (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_16)); - __gmpz_clear(__gen_e_acsl__29); - __gmpz_clear(__gen_e_acsl_if_16); + (__e_acsl_mpz_struct const *)(__gen_e_acsl_if_6)); + __gmpz_clear(__gen_e_acsl_if_6); return; }