diff --git a/src/plugins/aorai/tests/ya/oracle/aorai_ptr_field.res.oracle b/src/plugins/aorai/tests/ya/oracle/aorai_ptr_field.res.oracle index e8f31d7d12c410b9fe704537bb36d02eeb706b05..37b9968d9332e932d18bd4d961fe0c8606140abc 100644 --- a/src/plugins/aorai/tests/ya/oracle/aorai_ptr_field.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/aorai_ptr_field.res.oracle @@ -44,6 +44,7 @@ enum aorai_OpStatusList { int S0_tmp; int S1_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S0_tmp = S0; @@ -93,6 +94,7 @@ enum aorai_OpStatusList { int S0_tmp; int S1_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S0_tmp = S0; diff --git a/src/plugins/aorai/tests/ya/oracle/assigns.0.res.oracle b/src/plugins/aorai/tests/ya/oracle/assigns.0.res.oracle index 6f35fd44384ee6713e2fcba2b8c8141febfdc79c..4c3791659969fb3fd12b879ac0ec78ad55269c7a 100644 --- a/src/plugins/aorai/tests/ya/oracle/assigns.0.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/assigns.0.res.oracle @@ -74,6 +74,7 @@ int X; int Sf_tmp; int in_main_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; S1_tmp = S1; @@ -153,6 +154,7 @@ int X; int Sf_tmp; int in_main_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; S1_tmp = S1; @@ -247,6 +249,7 @@ void f(void) int Sf_tmp; int in_main_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S1_tmp = S1; @@ -326,6 +329,7 @@ void f(void) int Sf_tmp; int in_main_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S1_tmp = S1; diff --git a/src/plugins/aorai/tests/ya/oracle/assigns.1.res.oracle b/src/plugins/aorai/tests/ya/oracle/assigns.1.res.oracle index 62b636da6ec0e8e6400496ef5ad8727ca0214cb0..d5aa249647d0f929f15b6ea15f3079409953728e 100644 --- a/src/plugins/aorai/tests/ya/oracle/assigns.1.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/assigns.1.res.oracle @@ -71,6 +71,7 @@ int X; void f_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; if ((unsigned int)3 == aorai_CurStates) aorai_CurStates = S_in_f; @@ -118,6 +119,7 @@ int X; void f_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; if ((unsigned int)2 == aorai_CurStates) aorai_CurStates = in_main; @@ -178,6 +180,7 @@ void f(void) void main_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; if ((unsigned int)0 == aorai_CurStates) aorai_CurStates = Sf; @@ -225,6 +228,7 @@ void f(void) void main_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; if ((unsigned int)5 == aorai_CurStates) aorai_CurStates = S2; diff --git a/src/plugins/aorai/tests/ya/oracle/bts1289.0.res.oracle b/src/plugins/aorai/tests/ya/oracle/bts1289.0.res.oracle index b0cac6b01b25d96355241a543e34d95d5818b2ca..6c033979bd1de21bc5c66b78abefa5fbbecd8e26 100644 --- a/src/plugins/aorai/tests/ya/oracle/bts1289.0.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/bts1289.0.res.oracle @@ -31,6 +31,7 @@ enum aorai_OpStatusList { { int S_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_a; S_tmp = S; @@ -59,6 +60,7 @@ enum aorai_OpStatusList { { int S_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_a; S_tmp = S; @@ -98,6 +100,7 @@ void a(void) { int S_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S_tmp = S; @@ -126,6 +129,7 @@ void a(void) { int S_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S_tmp = S; diff --git a/src/plugins/aorai/tests/ya/oracle/bts1289.1.res.oracle b/src/plugins/aorai/tests/ya/oracle/bts1289.1.res.oracle index a721d8db11216ab7be3d6b63317fa08393df9473..f123a10ea1d4899ff824644d1c5a355cbde2c03f 100644 --- a/src/plugins/aorai/tests/ya/oracle/bts1289.1.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/bts1289.1.res.oracle @@ -79,6 +79,7 @@ enum aorai_OpStatusList { int aorai_intermediate_state_0_tmp; int init_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_a; S_tmp = S; @@ -166,6 +167,7 @@ enum aorai_OpStatusList { int aorai_intermediate_state_0_tmp; int init_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_a; S_tmp = S; @@ -284,6 +286,7 @@ void a(void) int aorai_intermediate_state_0_tmp; int init_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S_tmp = S; @@ -364,6 +367,7 @@ void a(void) int aorai_intermediate_state_0_tmp; int init_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S_tmp = S; diff --git a/src/plugins/aorai/tests/ya/oracle/declared_function.res.oracle b/src/plugins/aorai/tests/ya/oracle/declared_function.res.oracle index f113e21eac4377c67da6c6c364e25564a3e778a5..bc1980f8dd6c6868c498af6df66a1fe4807b206b 100644 --- a/src/plugins/aorai/tests/ya/oracle/declared_function.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/declared_function.res.oracle @@ -72,6 +72,7 @@ check lemma I_deterministic_trans{L}: void main_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; if ((unsigned int)0 == aorai_CurStates) aorai_CurStates = I; @@ -107,6 +108,7 @@ check lemma I_deterministic_trans{L}: void main_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; if ((unsigned int)0 == aorai_CurStates) aorai_CurStates = I; diff --git a/src/plugins/aorai/tests/ya/oracle/deterministic.res.oracle b/src/plugins/aorai/tests/ya/oracle/deterministic.res.oracle index 694a3817026e82af27d0e838b2533c54dbc3baf6..923b8de4a8696df470651d5d6c41c73eb33aaa98 100644 --- a/src/plugins/aorai/tests/ya/oracle/deterministic.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/deterministic.res.oracle @@ -116,6 +116,7 @@ check lemma S0_deterministic_trans{L}: void g_pre_func(int x) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_g; if ((unsigned int)3 == aorai_CurStates) { @@ -185,6 +186,7 @@ check lemma S0_deterministic_trans{L}: void g_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_g; if ((unsigned int)5 == aorai_CurStates) aorai_CurStates = S1; @@ -263,6 +265,7 @@ void g(int x) void f_pre_func(int x) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; if ((unsigned int)1 == aorai_CurStates) @@ -321,6 +324,7 @@ void g(int x) void f_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; if ((unsigned int)1 == aorai_CurStates) @@ -407,6 +411,7 @@ int f(int x) void real_main_pre_func(int c) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_real_main; if ((unsigned int)0 == aorai_CurStates) { @@ -471,6 +476,7 @@ int f(int x) void real_main_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_real_main; if ((unsigned int)2 == aorai_CurStates) aorai_CurStates = Sf; @@ -543,6 +549,7 @@ int real_main(int c) void main_pre_func(int c) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; if ((unsigned int)7 == aorai_CurStates) aorai_CurStates = S0; @@ -599,6 +606,7 @@ int real_main(int c) void main_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; if ((unsigned int)6 == aorai_CurStates) aorai_CurStates = Sf; diff --git a/src/plugins/aorai/tests/ya/oracle/floats.res.oracle b/src/plugins/aorai/tests/ya/oracle/floats.res.oracle index a5a1b263a40e8a838d4fe35a43b3b6cd12fce6f1..c813ffb28c36688e5a55a25d199070d18baa59e1 100644 --- a/src/plugins/aorai/tests/ya/oracle/floats.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/floats.res.oracle @@ -173,6 +173,7 @@ check lemma B_deterministic_trans{L}: void square_root_aux_pre_func(float x, float n) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_square_root_aux; if ((unsigned int)1 == aorai_CurStates) @@ -223,6 +224,7 @@ check lemma B_deterministic_trans{L}: void square_root_aux_post_func(float res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_square_root_aux; if ((unsigned int)1 == aorai_CurStates) aorai_CurStates = B; @@ -301,6 +303,7 @@ float square_root_aux(float x, float n) void square_root_pre_func(float n) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_square_root; if ((unsigned int)0 == aorai_CurStates) aorai_CurStates = B; @@ -348,6 +351,7 @@ float square_root_aux(float x, float n) void square_root_post_func(float res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_square_root; if ((unsigned int)1 == aorai_CurStates) aorai_CurStates = C; @@ -409,6 +413,7 @@ float square_root(float n) void main_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; if ((unsigned int)4 == aorai_CurStates) aorai_CurStates = A; @@ -456,6 +461,7 @@ float square_root(float n) void main_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; if ((unsigned int)2 == aorai_CurStates) aorai_CurStates = E; diff --git a/src/plugins/aorai/tests/ya/oracle/formals.res.oracle b/src/plugins/aorai/tests/ya/oracle/formals.res.oracle index 6f46969556260e169dd1f26d050cdae831719329..3e76cd392c78a6744e7ab6e97911684a0353a815 100644 --- a/src/plugins/aorai/tests/ya/oracle/formals.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/formals.res.oracle @@ -139,6 +139,7 @@ check lemma aorai_intermediate_state_deterministic_trans{L}: void f_pre_func(int x) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; if ((unsigned int)7 == aorai_CurStates) { @@ -238,6 +239,7 @@ check lemma aorai_intermediate_state_deterministic_trans{L}: void f_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; if ((unsigned int)4 == aorai_CurStates) { @@ -394,6 +396,7 @@ int f(int x) void g_pre_func(int y) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_g; if ((unsigned int)0 == aorai_CurStates) aorai_CurStates = OK; @@ -474,6 +477,7 @@ int f(int x) void g_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_g; if ((unsigned int)3 == aorai_CurStates) { @@ -575,6 +579,7 @@ int g(int y) void main_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; if ((unsigned int)6 == aorai_CurStates) aorai_CurStates = main_0; @@ -633,6 +638,7 @@ int g(int y) void main_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; if ((unsigned int)0 == aorai_CurStates) aorai_CurStates = OK; diff --git a/src/plugins/aorai/tests/ya/oracle/function_ptr.res.oracle b/src/plugins/aorai/tests/ya/oracle/function_ptr.res.oracle index a52a7c7881ae98d4f7a8021ef0f28b85bc7b698f..d3769b352d33da71077733114223d69059d67c7a 100644 --- a/src/plugins/aorai/tests/ya/oracle/function_ptr.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/function_ptr.res.oracle @@ -121,6 +121,7 @@ check lemma aorai_intermediate_state_deterministic_trans{L}: void f_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; if ((unsigned int)9 == aorai_CurStates) aorai_CurStates = aorai_intermediate_state; @@ -189,6 +190,7 @@ check lemma aorai_intermediate_state_deterministic_trans{L}: void f_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; if ((unsigned int)0 == aorai_CurStates) aorai_CurStates = f_called; @@ -275,6 +277,7 @@ void f(void) void g_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_g; if ((unsigned int)9 == aorai_CurStates) aorai_CurStates = aorai_intermediate_state_0; @@ -343,6 +346,7 @@ void f(void) void g_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_g; if ((unsigned int)1 == aorai_CurStates) aorai_CurStates = g_called; @@ -424,6 +428,7 @@ void g(void) void main_pre_func(int c) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; if ((unsigned int)7 == aorai_CurStates) aorai_CurStates = s1; @@ -483,6 +488,7 @@ void g(void) void main_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; if ((unsigned int)8 == aorai_CurStates) aorai_CurStates = ok; diff --git a/src/plugins/aorai/tests/ya/oracle/generate_assigns_bts1290.res.oracle b/src/plugins/aorai/tests/ya/oracle/generate_assigns_bts1290.res.oracle index 34366aa9fd40d3c26130b980494067d8a27b055a..2f0e7ce8e84ab43d8cba663cecc7766c1d3d8f73 100644 --- a/src/plugins/aorai/tests/ya/oracle/generate_assigns_bts1290.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/generate_assigns_bts1290.res.oracle @@ -34,6 +34,7 @@ enum aorai_OpStatusList { { int S_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S_tmp = S; @@ -67,6 +68,7 @@ enum aorai_OpStatusList { { int S_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S_tmp = S; diff --git a/src/plugins/aorai/tests/ya/oracle/hoare_seq.res.oracle b/src/plugins/aorai/tests/ya/oracle/hoare_seq.res.oracle index 0c22ea3ad2c717deed55f7fd804d2d8cf012610d..1a40c608459f2eabd9189ba8c1374eb87f5663b3 100644 --- a/src/plugins/aorai/tests/ya/oracle/hoare_seq.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/hoare_seq.res.oracle @@ -116,6 +116,7 @@ enum aorai_OpStatusList { int aorai_intermediate_state_2_tmp; int aorai_reject_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; S0_tmp = S0; @@ -244,6 +245,7 @@ enum aorai_OpStatusList { int aorai_intermediate_state_2_tmp; int aorai_reject_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; S0_tmp = S0; @@ -440,6 +442,7 @@ int main_bhv_bhv(int c); */ int aorai_intermediate_state_2_tmp; int aorai_reject_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S0_tmp = S0; @@ -584,6 +587,7 @@ int main_bhv_bhv(int c); */ int aorai_intermediate_state_2_tmp; int aorai_reject_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S0_tmp = S0; diff --git a/src/plugins/aorai/tests/ya/oracle/incorrect.res.oracle b/src/plugins/aorai/tests/ya/oracle/incorrect.res.oracle index df2ece4c7b586cdaf2e3dcf2220556efe75f4534..4e77b2b2d82c624882c4cf7e1996d96a3a3a53f2 100644 --- a/src/plugins/aorai/tests/ya/oracle/incorrect.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/incorrect.res.oracle @@ -44,6 +44,7 @@ int f(void); void main_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; aorai_CurStates = aorai_reject; @@ -73,6 +74,7 @@ int f(void); void main_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; aorai_CurStates = aorai_reject; diff --git a/src/plugins/aorai/tests/ya/oracle/logical_operators.res.oracle b/src/plugins/aorai/tests/ya/oracle/logical_operators.res.oracle index 4aa48e2ee5d7fa37f6d81627004ac5e7f4955b9d..9257d2c5d17a1376ece0f36e6266d24c35657853 100644 --- a/src/plugins/aorai/tests/ya/oracle/logical_operators.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/logical_operators.res.oracle @@ -36,6 +36,7 @@ enum aorai_OpStatusList { { int I_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; I_tmp = I; @@ -77,6 +78,7 @@ enum aorai_OpStatusList { { int I_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; I_tmp = I; @@ -124,6 +126,7 @@ void f(int x) { int I_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; I_tmp = I; @@ -157,6 +160,7 @@ void f(int x) { int I_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; I_tmp = I; diff --git a/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle b/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle index 260cb460abb1c282a351d5544b232ff3f342f913..7d8927d391b2e483f1aacb22b9387b8794098d3c 100644 --- a/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/loop_bts1050.res.oracle @@ -129,6 +129,7 @@ enum aorai_OpStatusList { int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; S0_tmp = S0; @@ -259,6 +260,7 @@ enum aorai_OpStatusList { int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; S0_tmp = S0; @@ -415,6 +417,7 @@ void f(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_g; S0_tmp = S0; @@ -538,6 +541,7 @@ void f(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_g; S0_tmp = S0; @@ -680,6 +684,7 @@ void g(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S0_tmp = S0; @@ -804,6 +809,7 @@ void g(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S0_tmp = S0; diff --git a/src/plugins/aorai/tests/ya/oracle/metavariables-right.res.oracle b/src/plugins/aorai/tests/ya/oracle/metavariables-right.res.oracle index 2d23df5c6afed4801e4a1526868dc0b631dc31f2..67b68e9ab8ce82621e6b83f8ddc7066482f4d57c 100644 --- a/src/plugins/aorai/tests/ya/oracle/metavariables-right.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/metavariables-right.res.oracle @@ -120,6 +120,7 @@ check lemma e_deterministic_trans{L}: void f_pre_func(int x) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; if ((unsigned int)2 == aorai_CurStates) { @@ -183,6 +184,7 @@ check lemma e_deterministic_trans{L}: void f_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; if ((unsigned int)3 == aorai_CurStates) aorai_CurStates = e; @@ -260,6 +262,7 @@ void f(int x) void g_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_g; if ((unsigned int)2 == aorai_CurStates) aorai_CurStates = d; @@ -319,6 +322,7 @@ void f(int x) void g_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_g; if ((unsigned int)4 == aorai_CurStates) aorai_CurStates = g_0; @@ -391,6 +395,7 @@ void g(void) void h_pre_func(int x) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_h; if ((unsigned int)5 == aorai_CurStates) @@ -452,6 +457,7 @@ void g(void) void h_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_h; if ((unsigned int)6 == aorai_CurStates) aorai_CurStates = g_0; @@ -524,6 +530,7 @@ void h(int x) void i_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_i; if ((unsigned int)7 == aorai_CurStates) aorai_CurStates = h_0; @@ -594,6 +601,7 @@ void h(int x) void i_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_i; if ((unsigned int)8 == aorai_CurStates) { @@ -675,6 +683,7 @@ void i(void) void main_pre_func(int t) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; if ((unsigned int)0 == aorai_CurStates) aorai_CurStates = b; @@ -734,6 +743,7 @@ void i(void) void main_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; if ((unsigned int)5 == aorai_CurStates) aorai_CurStates = i_0; diff --git a/src/plugins/aorai/tests/ya/oracle/monostate.res.oracle b/src/plugins/aorai/tests/ya/oracle/monostate.res.oracle index 94078981b439ae01e7706cb954d299d2fe5d43d8..eb4fbb3195124e602785ea9f55efa0161e20105b 100644 --- a/src/plugins/aorai/tests/ya/oracle/monostate.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/monostate.res.oracle @@ -69,6 +69,7 @@ check lemma Init_deterministic_trans{L}: void f_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; if ((unsigned int)2 == aorai_CurStates) aorai_CurStates = aorai_reject; @@ -109,6 +110,7 @@ check lemma Init_deterministic_trans{L}: void f_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; if ((unsigned int)2 == aorai_CurStates) aorai_CurStates = aorai_reject; @@ -160,6 +162,7 @@ void f(void) void main_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; aorai_CurStates = aorai_reject; @@ -192,6 +195,7 @@ void f(void) void main_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; aorai_CurStates = aorai_reject; diff --git a/src/plugins/aorai/tests/ya/oracle/not_prm.res.oracle b/src/plugins/aorai/tests/ya/oracle/not_prm.res.oracle index 3caffe84fad47612be18e7e4c3fec7446a18c2c2..36fba5e9a2d04d52b622e0a3b0568d069c3e8b55 100644 --- a/src/plugins/aorai/tests/ya/oracle/not_prm.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/not_prm.res.oracle @@ -41,6 +41,7 @@ enum aorai_OpStatusList { int S0_tmp; int Sf_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; S0_tmp = S0; @@ -84,6 +85,7 @@ enum aorai_OpStatusList { int S0_tmp; int Sf_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; S0_tmp = S0; diff --git a/src/plugins/aorai/tests/ya/oracle/observed.res.oracle b/src/plugins/aorai/tests/ya/oracle/observed.res.oracle index e2e3a4fe94ea87191bbb7caa3162cf0bc7f927e5..05170397e238edc619affe696d5404119fa60430 100644 --- a/src/plugins/aorai/tests/ya/oracle/observed.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/observed.res.oracle @@ -74,6 +74,7 @@ enum aorai_OpStatusList { int first_step_tmp; int init_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; aorai_intermediate_state_tmp = aorai_intermediate_state; @@ -156,6 +157,7 @@ enum aorai_OpStatusList { int first_step_tmp; int init_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; aorai_intermediate_state_tmp = aorai_intermediate_state; @@ -325,6 +327,7 @@ void g(void) int first_step_tmp; int init_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_h; aorai_intermediate_state_tmp = aorai_intermediate_state; @@ -407,6 +410,7 @@ void g(void) int first_step_tmp; int init_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_h; aorai_intermediate_state_tmp = aorai_intermediate_state; diff --git a/src/plugins/aorai/tests/ya/oracle/other.res.oracle b/src/plugins/aorai/tests/ya/oracle/other.res.oracle index f83db815ae931852f8760e80e33016d64bfa76e4..7879583a70dd773cd54f39c03ff52d1251861310 100644 --- a/src/plugins/aorai/tests/ya/oracle/other.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/other.res.oracle @@ -70,6 +70,7 @@ int x = 0; int last_tmp; int step1_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; init_tmp = init; @@ -173,6 +174,7 @@ int x = 0; int last_tmp; int step1_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; init_tmp = init; @@ -340,6 +342,7 @@ void f(void) int last_tmp; int step1_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_g; init_tmp = init; @@ -443,6 +446,7 @@ void f(void) int last_tmp; int step1_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_g; init_tmp = init; @@ -597,6 +601,7 @@ void g(void) int last_tmp; int step1_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; init_tmp = init; @@ -671,6 +676,7 @@ void g(void) int last_tmp; int step1_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; init_tmp = init; diff --git a/src/plugins/aorai/tests/ya/oracle/seq.res.oracle b/src/plugins/aorai/tests/ya/oracle/seq.res.oracle index b2f0a865f3d5c032ce7fbb3fca1f315091ada68d..4c0723689a86db3c32bfe5df30121f87991842ed 100644 --- a/src/plugins/aorai/tests/ya/oracle/seq.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/seq.res.oracle @@ -114,6 +114,7 @@ enum aorai_OpStatusList { int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; S0_tmp = S0; @@ -237,6 +238,7 @@ enum aorai_OpStatusList { int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; S0_tmp = S0; @@ -406,6 +408,7 @@ void f(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_g; S0_tmp = S0; @@ -539,6 +542,7 @@ void f(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_g; S0_tmp = S0; @@ -705,6 +709,7 @@ void g(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S0_tmp = S0; @@ -829,6 +834,7 @@ void g(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S0_tmp = S0; diff --git a/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle b/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle index bae62a6316898061fab0f135c5d8568de8d0e381..b256e59ddb8d0654c2d0c6a2a794045b9ac22c13 100644 --- a/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/seq_loop.res.oracle @@ -129,6 +129,7 @@ enum aorai_OpStatusList { int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_f; S0_tmp = S0; @@ -259,6 +260,7 @@ enum aorai_OpStatusList { int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_f; S0_tmp = S0; @@ -415,6 +417,7 @@ void f(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_g; S0_tmp = S0; @@ -538,6 +541,7 @@ void f(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_g; S0_tmp = S0; @@ -680,6 +684,7 @@ void g(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S0_tmp = S0; @@ -804,6 +809,7 @@ void g(void) int aorai_intermediate_state_2_tmp; int aorai_intermediate_state_3_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S0_tmp = S0; diff --git a/src/plugins/aorai/tests/ya/oracle/seq_unlimited.res.oracle b/src/plugins/aorai/tests/ya/oracle/seq_unlimited.res.oracle index bc811deb4c000e56efe88e9f6b1c96c59a0e234e..0b47507c6a2054e9e7352bfdce2a60e6174ba412 100644 --- a/src/plugins/aorai/tests/ya/oracle/seq_unlimited.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/seq_unlimited.res.oracle @@ -93,6 +93,7 @@ check lemma aorai_intermediate_state_0_deterministic_trans{L}: void init_pre_func(int *a, int n) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_init; if ((unsigned int)4 == aorai_CurStates) aorai_CurStates = aorai_intermediate_state; @@ -146,6 +147,7 @@ check lemma aorai_intermediate_state_0_deterministic_trans{L}: void init_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_init; if ((unsigned int)0 == aorai_CurStates) aorai_CurStates = c; @@ -235,6 +237,7 @@ void init(int *a, int n) void find_pre_func(int *a, int n, int k) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_find; if ((unsigned int)5 == aorai_CurStates) aorai_CurStates = aorai_intermediate_state_1; @@ -290,6 +293,7 @@ void init(int *a, int n) void find_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_find; if ((unsigned int)2 == aorai_CurStates) aorai_CurStates = aorai_intermediate_state_0; @@ -394,6 +398,7 @@ int find(int *a, int n, int k) void main_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; if ((unsigned int)6 == aorai_CurStates) aorai_CurStates = b; @@ -447,6 +452,7 @@ int find(int *a, int n, int k) void main_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; if ((unsigned int)1 == aorai_CurStates) aorai_CurStates = ok; diff --git a/src/plugins/aorai/tests/ya/oracle/serial.res.oracle b/src/plugins/aorai/tests/ya/oracle/serial.res.oracle index d6155c7faefc43a976157b9d44ee8eae1a3016e2..843d3f17a658bb06d8c331b1b18d58f9c03ef5a7 100644 --- a/src/plugins/aorai/tests/ya/oracle/serial.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/serial.res.oracle @@ -20,28 +20,24 @@ [eva] using specification for function Frama_C_interval [eva] serial.c:58: starting to merge loop iterations [eva] serial.c:63: Trace partitioning superposing up to 100 states -[eva] serial.c:63: Trace partitioning superposing up to 300 states +[eva] serial.c:63: Trace partitioning superposing up to 200 states [eva:alarm] serial.c:33: Warning: assertion 'Aorai,aorai_smoke_test' got status invalid (stopping propagation). [aorai] serial.c:92: Wait1 <- Wait1 <- Complete -[aorai] serial.c:92: n in {5},x in [0..16383],y in [8192..16383] -[aorai] serial.c:92: Wait1 <- Wait1 <- Complete -[aorai] serial.c:92: n in {5},x in [0..16383],y in [0..8191] -[eva] serial.c:63: Trace partitioning superposing up to 500 states -[eva] serial.c:63: Trace partitioning superposing up to 700 states +[aorai] serial.c:92: n in {5},x in [0..16383],y in [0..16383] +[eva] serial.c:63: Trace partitioning superposing up to 400 states +[eva] serial.c:63: Trace partitioning superposing up to 600 states +[eva] serial.c:63: Trace partitioning superposing up to 800 states [eva] serial.c:63: Trace partitioning superposing up to 900 states -[eva] serial.c:63: Trace partitioning superposing up to 1200 states -[eva] serial.c:63: Trace partitioning superposing up to 1400 states -[eva] serial.c:63: Trace partitioning superposing up to 1500 states -[eva] serial.c:63: Trace partitioning superposing up to 1600 states -[eva] serial.c:63: Trace partitioning superposing up to 1700 states +[eva] serial.c:63: Trace partitioning superposing up to 1000 states +[eva] serial.c:63: Trace partitioning superposing up to 1100 states [eva] done for function main [eva] ====== VALUES COMPUTED ====== [eva:final-states] Values at end of function input_data_post_func: aorai_x1 ∈ [0..127] aorai_x2 ∈ [0..127] aorai_y1 ∈ [0..127] - aorai_y2 ∈ [0..2147483647] + aorai_y2 ∈ [0..127] aorai_CurOperation ∈ {op_input_data} aorai_CurOpStatus ∈ {aorai_Terminated} aorai_CurStates ∈ {Complete; Wait1; Wait2; Wait3; Wait4; Wait5} @@ -59,7 +55,7 @@ aorai_x1 ∈ [0..127] aorai_x2 ∈ [0..127] aorai_y1 ∈ [0..127] - aorai_y2 ∈ [0..2147483647] + aorai_y2 ∈ [0..127] aorai_CurOperation ∈ {op_input_data} aorai_CurOpStatus ∈ {aorai_Terminated} aorai_CurStates ∈ {Complete; Wait1; Wait2; Wait3; Wait4; Wait5} @@ -115,7 +111,7 @@ aorai_x1 ∈ [0..127] aorai_x2 ∈ [0..127] aorai_y1 ∈ [0..127] - aorai_y2 ∈ [0..2147483647] + aorai_y2 ∈ [0..127] aorai_CurOperation ∈ {op_input_status; op_input_data} aorai_CurOpStatus ∈ {aorai_Terminated} aorai_CurStates ∈ {Complete; Wait1; Wait2; Wait3; Wait4; Wait5} @@ -124,13 +120,12 @@ [eva:final-states] Values at end of function main: Frama_C_entropy_source ∈ [--..--] buffer[0] ∈ {0} ∪ [128..255] - [1..2] ∈ [0..127] - [3..4] ∈ [0..2147483647] + [1..4] ∈ [0..127] n ∈ {0; 1; 2; 3; 4} aorai_x1 ∈ [0..127] aorai_x2 ∈ [0..127] aorai_y1 ∈ [0..127] - aorai_y2 ∈ [0..2147483647] + aorai_y2 ∈ [0..127] aorai_CurOperation ∈ {op_output; op_input_status; op_input_data} aorai_CurOpStatus ∈ {aorai_Called; aorai_Terminated} aorai_CurStates ∈ {Complete; Wait1; Wait2; Wait3; Wait4; Wait5} @@ -218,6 +213,7 @@ int n = 0; void input_status_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_input_status; aorai_StatesHistory_2 = aorai_StatesHistory_1; @@ -257,6 +253,7 @@ int n = 0; void input_status_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_input_status; aorai_StatesHistory_2 = aorai_StatesHistory_1; @@ -403,6 +400,7 @@ int input_status(void) void input_data_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_input_data; aorai_StatesHistory_2 = aorai_StatesHistory_1; @@ -440,6 +438,7 @@ int input_status(void) void input_data_post_func(int res) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_input_data; aorai_StatesHistory_2 = aorai_StatesHistory_1; @@ -584,6 +583,7 @@ int input_data(void) void output_pre_func(int x, int y) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_output; aorai_StatesHistory_2 = aorai_StatesHistory_1; @@ -636,6 +636,7 @@ int input_data(void) void output_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_output; aorai_StatesHistory_2 = aorai_StatesHistory_1; @@ -690,11 +691,10 @@ void main(void) n = 0; continue; } - } - else { /*@ split data & 0x40; */ ; - if (n == 0) continue; } + else + if (n == 0) continue; tmp_0 = n; n ++; buffer[tmp_0] = data; diff --git a/src/plugins/aorai/tests/ya/oracle/single_call.res.oracle b/src/plugins/aorai/tests/ya/oracle/single_call.res.oracle index 2b50360158fb85efec7991a9ae0405c2d4cf4af8..e59b671a435d7944dbe7c3aa9757b967206ebaad 100644 --- a/src/plugins/aorai/tests/ya/oracle/single_call.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/single_call.res.oracle @@ -55,6 +55,7 @@ enum aorai_OpStatusList { int Sf_tmp; int aorai_intermediate_state_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S0_tmp = S0; @@ -114,6 +115,7 @@ enum aorai_OpStatusList { int Sf_tmp; int aorai_intermediate_state_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S0_tmp = S0; diff --git a/src/plugins/aorai/tests/ya/oracle/singleassignment-right.res.oracle b/src/plugins/aorai/tests/ya/oracle/singleassignment-right.res.oracle index 460a3a7b4fc13a991b6bc77d4feb772e01258dba..da7359cdf61dccd1fcf9f8ce3f6696cc4032efb4 100644 --- a/src/plugins/aorai/tests/ya/oracle/singleassignment-right.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/singleassignment-right.res.oracle @@ -70,6 +70,7 @@ enum aorai_OpStatusList { void main_pre_func(int *x, int *y) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; if ((unsigned int)0 == aorai_CurStates) { @@ -126,6 +127,7 @@ enum aorai_OpStatusList { void main_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; if ((unsigned int)2 == aorai_CurStates) { diff --git a/src/plugins/aorai/tests/ya/oracle/stack.res.oracle b/src/plugins/aorai/tests/ya/oracle/stack.res.oracle index 967ab213ada1147a808d7fe46b38741cbd42c446..4071686554d5628c250e63e0f5ae8ba494fb2903 100644 --- a/src/plugins/aorai/tests/ya/oracle/stack.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/stack.res.oracle @@ -97,6 +97,7 @@ check lemma emptying_stack_deterministic_trans{L}: void push_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_push; if ((unsigned int)4 == aorai_CurStates) aorai_CurStates = filling_stack; @@ -155,6 +156,7 @@ check lemma emptying_stack_deterministic_trans{L}: void push_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_push; if ((unsigned int)5 == aorai_CurStates) { @@ -235,6 +237,7 @@ void push(void) void pop_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_pop; if ((unsigned int)4 == aorai_CurStates) @@ -301,6 +304,7 @@ void push(void) void pop_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_pop; if ((unsigned int)3 == aorai_CurStates) { @@ -398,6 +402,7 @@ void pop(void) void main_pre_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; if ((unsigned int)6 == aorai_CurStates) { @@ -451,6 +456,7 @@ void pop(void) void main_post_func(void) { /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; if ((unsigned int)2 == aorai_CurStates) aorai_CurStates = accept; diff --git a/src/plugins/aorai/tests/ya/oracle/test_acces_params.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_acces_params.res.oracle index c2fc72913e5f6c258e29064424942812828bf85e..e31ea6083264fd52bf1004dc3636195c6286f40f 100644 --- a/src/plugins/aorai/tests/ya/oracle/test_acces_params.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/test_acces_params.res.oracle @@ -88,6 +88,7 @@ int rr = 1; int SF_tmp; int mainst_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_opa; S1_tmp = S1; @@ -180,6 +181,7 @@ int rr = 1; int SF_tmp; int mainst_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_opa; S1_tmp = S1; @@ -292,6 +294,7 @@ void opa(int i, int j) int SF_tmp; int mainst_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_opb; S1_tmp = S1; @@ -383,6 +386,7 @@ void opa(int i, int j) int SF_tmp; int mainst_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_opb; S1_tmp = S1; @@ -495,6 +499,7 @@ int opb(void) int SF_tmp; int mainst_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S1_tmp = S1; @@ -585,6 +590,7 @@ int opb(void) int SF_tmp; int mainst_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S1_tmp = S1; diff --git a/src/plugins/aorai/tests/ya/oracle/test_acces_params2.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_acces_params2.res.oracle index 59019d29de575c9d3c002abce06057b5d09f7361..6b1289c2a6d4bd4088ecc020cf530f9a0f6afbb1 100644 --- a/src/plugins/aorai/tests/ya/oracle/test_acces_params2.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/test_acces_params2.res.oracle @@ -96,6 +96,7 @@ int rr = 1; int S6_tmp; int S7_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_opa; S1_tmp = S1; @@ -199,6 +200,7 @@ int rr = 1; int S6_tmp; int S7_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_opa; S1_tmp = S1; @@ -326,6 +328,7 @@ int opa(int r) int S6_tmp; int S7_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_opb; S1_tmp = S1; @@ -426,6 +429,7 @@ int opa(int r) int S6_tmp; int S7_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_opb; S1_tmp = S1; @@ -541,6 +545,7 @@ void opb(void) int S6_tmp; int S7_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_opc; S1_tmp = S1; @@ -634,6 +639,7 @@ void opb(void) int S6_tmp; int S7_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_opc; S1_tmp = S1; @@ -768,6 +774,7 @@ void opc(void) int S6_tmp; int S7_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S1_tmp = S1; @@ -868,6 +875,7 @@ void opc(void) int S6_tmp; int S7_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S1_tmp = S1; diff --git a/src/plugins/aorai/tests/ya/oracle/test_boucle_rechercheTableau.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_boucle_rechercheTableau.res.oracle index 1431fa716c3b4d91756d07526ea2c633f1174e1f..bc444e4bbcc155c9a6583fa490dc91905ea42ea4 100644 --- a/src/plugins/aorai/tests/ya/oracle/test_boucle_rechercheTableau.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/test_boucle_rechercheTableau.res.oracle @@ -55,6 +55,7 @@ enum aorai_OpStatusList { int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_isPresent; End_tmp = End; @@ -113,6 +114,7 @@ enum aorai_OpStatusList { int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_isPresent; End_tmp = End; @@ -225,6 +227,7 @@ int isPresent(int *t, int max, int val) int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_foo; End_tmp = End; @@ -277,6 +280,7 @@ int isPresent(int *t, int max, int val) int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_foo; End_tmp = End; @@ -342,6 +346,7 @@ void foo(void) int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; End_tmp = End; @@ -394,6 +399,7 @@ void foo(void) int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; End_tmp = End; diff --git a/src/plugins/aorai/tests/ya/oracle/test_factorial.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_factorial.res.oracle index 56ba35bfc725a9e244a5be663abe9017446ccff9..429ca9bc1e86351a9db4ad2e0433457dd3de6063 100644 --- a/src/plugins/aorai/tests/ya/oracle/test_factorial.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/test_factorial.res.oracle @@ -49,6 +49,7 @@ enum aorai_OpStatusList { int S2_tmp; int main_0_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_decode_int; S1_tmp = S1; @@ -104,6 +105,7 @@ enum aorai_OpStatusList { int S2_tmp; int main_0_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_decode_int; S1_tmp = S1; @@ -234,6 +236,7 @@ int decode_int(char *s) int S2_tmp; int main_0_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_factorial; S1_tmp = S1; @@ -291,6 +294,7 @@ int decode_int(char *s) int S2_tmp; int main_0_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_factorial; S1_tmp = S1; @@ -372,6 +376,7 @@ int factorial(int value) int S2_tmp; int main_0_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S1_tmp = S1; @@ -427,6 +432,7 @@ int factorial(int value) int S2_tmp; int main_0_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S1_tmp = S1; diff --git a/src/plugins/aorai/tests/ya/oracle/test_recursion4.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_recursion4.res.oracle index 8c9faad26773d78513719836e6856f9cfd4abbb8..58125fc6e68b3c1c0076f63159238ddf0660ea4e 100644 --- a/src/plugins/aorai/tests/ya/oracle/test_recursion4.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/test_recursion4.res.oracle @@ -52,6 +52,7 @@ enum aorai_OpStatusList { int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_isPresent; End_tmp = End; @@ -116,6 +117,7 @@ enum aorai_OpStatusList { int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_isPresent; End_tmp = End; @@ -231,6 +233,7 @@ int isPresent(int *t, int size, int val) int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_foo; End_tmp = End; @@ -283,6 +286,7 @@ int isPresent(int *t, int size, int val) int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_foo; End_tmp = End; @@ -348,6 +352,7 @@ void foo(void) int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; End_tmp = End; @@ -400,6 +405,7 @@ void foo(void) int Idle_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; End_tmp = End; diff --git a/src/plugins/aorai/tests/ya/oracle/test_recursion5.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_recursion5.res.oracle index c7e017d08d504c11ddbf2c410794c4ab96b2c667..84601f1f62169f47d3e5cd4cebb7a384a421f840 100644 --- a/src/plugins/aorai/tests/ya/oracle/test_recursion5.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/test_recursion5.res.oracle @@ -71,6 +71,7 @@ enum aorai_OpStatusList { int IgnoreFoo_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_isPresentRec; End_tmp = End; @@ -154,6 +155,7 @@ enum aorai_OpStatusList { int IgnoreFoo_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_isPresentRec; End_tmp = End; @@ -285,6 +287,7 @@ int isPresentRec(int *t, int i, int max, int val) int IgnoreFoo_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_isPresent; End_tmp = End; @@ -361,6 +364,7 @@ int isPresentRec(int *t, int i, int max, int val) int IgnoreFoo_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_isPresent; End_tmp = End; @@ -463,6 +467,7 @@ int isPresent(int *t, int max, int val) int IgnoreFoo_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_foo; End_tmp = End; @@ -532,6 +537,7 @@ int isPresent(int *t, int max, int val) int IgnoreFoo_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_foo; End_tmp = End; @@ -615,6 +621,7 @@ void foo(void) int IgnoreFoo_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; End_tmp = End; @@ -684,6 +691,7 @@ void foo(void) int IgnoreFoo_tmp; int WillDoFoo_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; End_tmp = End; diff --git a/src/plugins/aorai/tests/ya/oracle/test_struct.res.oracle b/src/plugins/aorai/tests/ya/oracle/test_struct.res.oracle index 541b2c925a348a01a2ed36158f45f14207a5d55a..ecdc65fc67cbbff2acf74871a9420f36ed70efc1 100644 --- a/src/plugins/aorai/tests/ya/oracle/test_struct.res.oracle +++ b/src/plugins/aorai/tests/ya/oracle/test_struct.res.oracle @@ -50,6 +50,7 @@ int myAge = 0; int S1_tmp; int main_0_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_increment; S1_tmp = S1; @@ -96,6 +97,7 @@ int myAge = 0; int S1_tmp; int main_0_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_increment; S1_tmp = S1; @@ -159,6 +161,7 @@ void increment(void) int S1_tmp; int main_0_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Called; aorai_CurOperation = op_main; S1_tmp = S1; @@ -205,6 +208,7 @@ void increment(void) int S1_tmp; int main_0_tmp; /@ slevel full; @/ + ; aorai_CurOpStatus = aorai_Terminated; aorai_CurOperation = op_main; S1_tmp = S1; diff --git a/src/plugins/eva/engine/iterator.ml b/src/plugins/eva/engine/iterator.ml index 2ccf27969ed46fad6a08704b096a9ecf824fc026..2a0c7af021ac216b6eae8cea7f8315e3604f3ece 100644 --- a/src/plugins/eva/engine/iterator.ml +++ b/src/plugins/eva/engine/iterator.ml @@ -464,7 +464,7 @@ module Make_Dataflow end; (* Get vertex store *) let store = get_vertex_store v in - (* Join incoming s tates *) + (* Join incoming states *) let flow = Partitioning.join sources store in let flow = match v.vertex_start_of with diff --git a/src/plugins/eva/partitioning/partition.ml b/src/plugins/eva/partitioning/partition.ml index f0b7663f535570ad0678aa5c6f3f4617de67430c..14723800087101c1b1049d3fd7a0b910ff631278 100644 --- a/src/plugins/eva/partitioning/partition.ml +++ b/src/plugins/eva/partitioning/partition.ml @@ -655,8 +655,8 @@ struct in List.fold_left transfer [] p - let iter (f : state -> unit) (p : t) : unit = - List.iter (fun (_k,x) -> f x) p + let iter (f : key -> state -> unit) (p : t) : unit = + List.iter (fun (k, x) -> f k x) p let join_duplicate_keys (p : t) : t = let cmp (k, _) (k', _) = Key.compare k k' in diff --git a/src/plugins/eva/partitioning/partition.mli b/src/plugins/eva/partitioning/partition.mli index e1f6d42ab427ffc10fd192ba905db7fb1737731d..caf4e08c2487c27dba54be9916b43945669c14d4 100644 --- a/src/plugins/eva/partitioning/partition.mli +++ b/src/plugins/eva/partitioning/partition.mli @@ -195,7 +195,7 @@ sig val transfer : ((key * state) -> (key * state) list) -> t -> t val transfer_keys : t -> action -> t - val iter : (state -> unit) -> t -> unit + val iter : (key -> state -> unit) -> t -> unit val filter_map: (key -> state -> state option) -> t -> t val join_duplicate_keys: t -> t diff --git a/src/plugins/eva/partitioning/trace_partitioning.ml b/src/plugins/eva/partitioning/trace_partitioning.ml index 6e0868ccf242c011ba4763e2f0a5649a59eaae2f..2e38c548ff027ad0587432d265d6e0beaff02f6a 100644 --- a/src/plugins/eva/partitioning/trace_partitioning.ml +++ b/src/plugins/eva/partitioning/trace_partitioning.ml @@ -42,8 +42,8 @@ struct type state = Domain.t type store = { - rationing: Partition.rationing; (* slevel rationing at this point *) flow_actions : action list; (* partitioning actions to be applied *) + rationing: bool; (* Is there a slevel rationing in above actions? *) store_stmt : stmt option; store_index : Index.t; (* Index of all states stored: used to quickly remove new states that have already been propagated. *) @@ -72,13 +72,27 @@ struct (* Constructors *) let empty_store ~(stmt : stmt option) : store = - let limit, merge, flow_actions = match stmt with - | None -> max_int, false, [] - | Some stmt -> slevel stmt, merge stmt, flow_actions stmt + let rationing_parameters, flow_actions = match stmt with + | None -> None, [] + | Some stmt -> + let flow_actions = flow_actions stmt in + (* A skip statement is created on each split annotation: do not ration + states on them to avoid meddling in successive split directives. *) + if Cil.is_skip stmt.skind && flow_actions <> [] + then None, flow_actions + else Some (slevel stmt, merge stmt), flow_actions + in + let rationing = + match rationing_parameters with + | None -> Partition.new_rationing ~limit:max_int ~merge:false + | Some (limit, merge) -> Partition.new_rationing ~limit ~merge + in + let flow_actions = + (Ration rationing) :: Update_dynamic_splits :: flow_actions in - let rationing = Partition.new_rationing ~limit ~merge in { - rationing; flow_actions; + flow_actions; + rationing = rationing_parameters <> None; store_stmt = stmt; store_index = Index.empty (); store_partition = Partition.empty; @@ -109,7 +123,7 @@ struct Partition.iter (fun _key state -> Domain.pretty fmt state) s.store_partition let pretty_flow (fmt : Format.formatter) (flow : flow) = - Flow.iter (Domain.pretty fmt) flow + Flow.iter (fun _ -> Domain.pretty fmt) flow (* Accessors *) @@ -261,50 +275,49 @@ struct let flow_states = List.fold_left Flow.union Flow.empty sources_states in - (* Handle ration stamps *) - dest.incoming_states <- dest.incoming_states + Flow.size flow_states; - let rationing_action = Ration dest.rationing in - (* Handle Split / Merge operations *) - let flow_actions = Update_dynamic_splits :: dest.flow_actions in (* Execute actions *) - let actions = rationing_action :: flow_actions in let flow_states = - List.fold_left Flow.transfer_keys flow_states actions + List.fold_left Flow.transfer_keys flow_states dest.flow_actions in - (* Add states to the store but filter out already propagated states *) - let update key current_state = - (* Inclusion test *) - let state = - try - let previous_state = Partition.find key dest.store_partition in - if Domain.is_included current_state previous_state then - (* The current state is included in the previous; stop *) - None - else begin - (* Propagate the join of the two states *) - if is_loop_head then - Self.feedback ~level:1 ~once:true ~current:true - "starting to merge loop iterations"; - Some (Domain.join previous_state current_state) - end - with - (* There is no previous state, propagate normally *) - Not_found -> Some current_state - in - (* Add the propagated state to the store *) - let add s = - dest.store_partition <- Partition.replace key s dest.store_partition; - in - Option.iter add state; - (* Filter out already propagated states (only at statements). *) - if dest.store_stmt = None - then state - else Extlib.opt_filter (fun s -> Index.add s dest.store_index) state + (* Add the propagated state to the store *) + let add_state key s = + dest.store_partition <- Partition.replace key s dest.store_partition; in - let flow = Flow.join_duplicate_keys flow_states in - let flow = Flow.filter_map update flow in - Option.iter (partitioning_feedback dest flow) dest.store_stmt; - flow + if not (dest.rationing) then begin + Flow.iter add_state flow_states; + flow_states + end else begin + (* Handle ration stamps *) + dest.incoming_states <- dest.incoming_states + Flow.size flow_states; + (* Add states to the store but filter out already propagated states *) + let update key current_state = + (* Inclusion test *) + let state = + try + let previous_state = Partition.find key dest.store_partition in + if Domain.is_included current_state previous_state then + (* The current state is included in the previous; stop *) + None + else begin + (* Propagate the join of the two states *) + if is_loop_head then + Self.feedback ~level:1 ~once:true ~current:true + "starting to merge loop iterations"; + Some (Domain.join previous_state current_state) + end + with + (* There is no previous state, propagate normally *) + Not_found -> Some current_state + in + Option.iter (add_state key) state; + (* Filter out already propagated states. *) + Extlib.opt_filter (fun s -> Index.add s dest.store_index) state + in + let flow = Flow.join_duplicate_keys flow_states in + let flow = Flow.filter_map update flow in + Option.iter (partitioning_feedback dest flow) dest.store_stmt; + flow + end let widen (w : widening) (flow : flow) : flow = let stmt = w.widening_stmt in diff --git a/src/plugins/eva/utils/eva_annotations.ml b/src/plugins/eva/utils/eva_annotations.ml index dc8a7b04de93c3339b11c2a6491735cc636c6c9f..8a626416fecf5ab947f5dd52142218fb32d3b535 100644 --- a/src/plugins/eva/utils/eva_annotations.ml +++ b/src/plugins/eva/utils/eva_annotations.ml @@ -62,12 +62,18 @@ type allocation_kind = By_stack | Fresh | Fresh_weak | Imprecise exception Parse_error +(* Where an Eva directive is applied. *) +type kind = + | Here (* The directive is applied when encountered. *) + | Stmt (* The directive has effect on the next statement. *) + | Loop (* The directive concerns a loop. *) + module type Annotation = sig type t val name : string - val is_loop_annot : bool + val kind : kind val parse : typing_context:Logic_typing.typing_context -> lexpr list -> t val export : t -> acsl_extension_kind val import : acsl_extension_kind -> t @@ -87,16 +93,19 @@ struct print fmt (import lp) let () = - if is_loop_annot then - Acsl_extension.register_code_annot_next_loop name typer ~printer false - else - Acsl_extension.register_code_annot_next_stmt name typer ~printer false + let register = + match kind with + | Here -> Acsl_extension.register_code_annot + | Stmt -> Acsl_extension.register_code_annot_next_stmt + | Loop -> Acsl_extension.register_code_annot_next_loop + in + register name typer ~printer false let get stmt = let filter_add _emitter annot acc = match annot.annot_content with - | Cil_types.AExtended (_, is_loop_annot', {ext_name=name'; ext_kind}) - when name' = name && is_loop_annot' = is_loop_annot -> + | Cil_types.AExtended (_, is_loop_annot, {ext_name=name'; ext_kind}) + when name' = name && is_loop_annot = (kind = Loop) -> import ext_kind :: acc | _ -> acc in @@ -106,7 +115,7 @@ struct let loc = Cil_datatype.Stmt.loc stmt in let param = M.export annot in let extension = Logic_const.new_acsl_extension name loc false param in - let annot_node = Cil_types.AExtended ([], is_loop_annot, extension) in + let annot_node = Cil_types.AExtended ([], kind = Loop, extension) in let code_annotation = Logic_const.new_code_annotation annot_node in Annotations.add_code_annot emitter stmt code_annotation end @@ -116,7 +125,7 @@ module Slevel = Register (struct type t = slevel_annotation let name = "slevel" - let is_loop_annot = false + let kind = Here let parse ~typing_context:_ = function | [{lexpr_node = PLvar "default"}] -> SlevelDefault @@ -161,7 +170,7 @@ module Unroll = Register (struct type t = unroll_annotation let name = "unroll" - let is_loop_annot = true + let kind = Loop let parse ~typing_context = function | [] -> UnrollFull @@ -191,6 +200,8 @@ struct when possible, to avoid changes due to its reconversion to a C term. *) type t = split_term * Cil_types.term option + let kind = Here + let term_to_exp = Logic_to_c.term_to_exp ?result:None let parse ~typing_context:context = function @@ -231,19 +242,16 @@ end module Split = Register (struct include SplitTermAnnotation let name = "split" - let is_loop_annot = false end) module Merge = Register (struct include SplitTermAnnotation let name = "merge" - let is_loop_annot = false end) module DynamicSplit = Register (struct include SplitTermAnnotation let name = "dynamic_split" - let is_loop_annot = false end) let get_slevel_annot stmt = @@ -275,7 +283,7 @@ let add_flow_annot ~emitter stmt flow_annotation = module Subdivision = Register (struct type t = int let name = "subdivide" - let is_loop_annot = false + let kind = Stmt let parse ~typing_context:_ = function | [{lexpr_node = PLconstant (IntConstant i)}] -> @@ -316,7 +324,7 @@ module Allocation = struct include Register (struct type t = allocation_kind let name = "eva_allocate" - let is_loop_annot = false + let kind = Stmt let parse ~typing_context:_ = function | [{lexpr_node = PLvar s}] -> Extlib.the ~exn:Parse_error (of_string s) @@ -356,7 +364,7 @@ let get_allocation = Allocation.get module ArraySegmentation = Register (struct type t = Cil_types.varinfo * Cil_types.offset * Cil_types.exp list let name = "array_partition" - let is_loop_annot = false + let kind = Here let convert = function | {term_node = TLval (TVar {lv_origin=Some vi}, toffset)} :: tbounds -> @@ -402,7 +410,7 @@ let read_array_segmentation ext = ArraySegmentation.import ext.ext_kind module DomainScope = Register (struct type t = string * Cil_types.varinfo list let name = "eva_domain_scope" - let is_loop_annot = false + let kind = Here let parse ~typing_context:context = let parse_domain = function diff --git a/tests/libc/oracle/fc_libc.1.res.oracle b/tests/libc/oracle/fc_libc.1.res.oracle index 7d5d9b9a27ffa3af3cfee2f8c7c4a62d0ad02977..c06fe39d324009a48386b8d03101495e7bc319c6 100644 --- a/tests/libc/oracle/fc_libc.1.res.oracle +++ b/tests/libc/oracle/fc_libc.1.res.oracle @@ -4553,7 +4553,7 @@ int getaddrinfo(char const * restrict nodename, } tmp_3 = Frama_C_interval(0,43); sa->sa_family = (sa_family_t)tmp_3; - /*@ slevel 15; */ + /*@ slevel 15; */ ; { int i = 0; while (i < 14) { @@ -4565,7 +4565,7 @@ int getaddrinfo(char const * restrict nodename, i ++; } } - /*@ slevel default; */ + /*@ slevel default; */ ; ai->ai_flags = 0; ai->ai_family = (int)sa->sa_family; ai->ai_socktype = Frama_C_interval(0,5); diff --git a/tests/spec/oracle/kw.res.oracle b/tests/spec/oracle/kw.res.oracle index 8b6bdc8c2cc9b20df7e9ad0f3a7725e26d9855f8..cdc7824e878babe57e329155cace996037d20b38 100644 --- a/tests/spec/oracle/kw.res.oracle +++ b/tests/spec/oracle/kw.res.oracle @@ -30,7 +30,7 @@ int main(void) struct custom writes; struct at include; struct loop assert; - /*@ slevel 4; */ + /*@ slevel 4; */ ; behavior ++; /*@ assert diff --git a/tests/value/oracle/local_slevel.res.oracle b/tests/value/oracle/local_slevel.res.oracle index ed3e146882954d10d8006e8bff555354f887b127..8dfd964a3ce6047ef3a8f0a901faa3d9209f784f 100644 --- a/tests/value/oracle/local_slevel.res.oracle +++ b/tests/value/oracle/local_slevel.res.oracle @@ -78,7 +78,7 @@ [eva] local_slevel.i:37: Frama_C_show_each: {47} [eva] local_slevel.i:37: Frama_C_show_each: {48} [eva] local_slevel.i:37: Frama_C_show_each: {49} -[eva] local_slevel.i:43: Trace partitioning superposing up to 100 states +[eva] local_slevel.i:42: Trace partitioning superposing up to 100 states [eva] local_slevel.i:37: Frama_C_show_each: {50} [eva] local_slevel.i:37: Frama_C_show_each: {51} [eva] local_slevel.i:37: Frama_C_show_each: {52} @@ -129,7 +129,7 @@ [eva] local_slevel.i:37: Frama_C_show_each: {97} [eva] local_slevel.i:37: Frama_C_show_each: {98} [eva] local_slevel.i:37: Frama_C_show_each: {99} -[eva] local_slevel.i:43: Trace partitioning superposing up to 200 states +[eva] local_slevel.i:42: Trace partitioning superposing up to 200 states [eva] Recording results for main2 [eva] Done for function main2 [eva] Recording results for main @@ -185,7 +185,7 @@ void main1(void) while (i < 80) { /*@ ensures \true; assigns v; */ - /*@ slevel 50; */ + /*@ slevel 50; */ ; if (i % 2) v = 1; else v = -1; Frama_C_show_each(v,i,r); v *= v; @@ -251,7 +251,7 @@ void main1(void) while (i < 80) { /*@ ensures \true; assigns v; */ - /*@ slevel 50; */ + /*@ slevel 50; */ ; if (i % 2) v = 1; else v = -1; Frama_C_show_each(v,i,r); v *= v; @@ -317,7 +317,7 @@ void main1(void) while (i < 80) { /*@ ensures \true; assigns v; */ - /*@ slevel 50; */ + /*@ slevel 50; */ ; if (i % 2) v = 1; else v = -1; Frama_C_show_each(v,i,r); v *= v; @@ -446,7 +446,7 @@ void main(void) [eva] local_slevel.i:37: Frama_C_show_each: {47} [eva] local_slevel.i:37: Frama_C_show_each: {48} [eva] local_slevel.i:37: Frama_C_show_each: {49} -[eva] local_slevel.i:43: Trace partitioning superposing up to 100 states +[eva] local_slevel.i:42: Trace partitioning superposing up to 100 states [eva] local_slevel.i:37: Frama_C_show_each: {50} [eva] local_slevel.i:37: Frama_C_show_each: {51} [eva] local_slevel.i:37: Frama_C_show_each: {52} @@ -497,7 +497,7 @@ void main(void) [eva] local_slevel.i:37: Frama_C_show_each: {97} [eva] local_slevel.i:37: Frama_C_show_each: {98} [eva] local_slevel.i:37: Frama_C_show_each: {99} -[eva] local_slevel.i:43: Trace partitioning superposing up to 200 states +[eva] local_slevel.i:42: Trace partitioning superposing up to 200 states [eva] Recording results for main2 [eva] Done for function main2 [eva] Recording results for main diff --git a/tests/value/oracle/partitioning-annots.0.res.oracle b/tests/value/oracle/partitioning-annots.0.res.oracle index ef583a47f12fc77c9189539ef61777c459342e78..aa52873360db70044e939172e2cff1a5bba13fdb 100644 --- a/tests/value/oracle/partitioning-annots.0.res.oracle +++ b/tests/value/oracle/partitioning-annots.0.res.oracle @@ -6,13 +6,13 @@ nondet ∈ [--..--] k ∈ {0} [eva] computing for function test_slevel <- main. - Called from partitioning-annots.c:223. -[eva] partitioning-annots.c:188: starting to merge loop iterations -[eva] partitioning-annots.c:193: starting to merge loop iterations + Called from partitioning-annots.c:278. +[eva] partitioning-annots.c:243: starting to merge loop iterations +[eva] partitioning-annots.c:248: starting to merge loop iterations [eva] Recording results for test_slevel [eva] Done for function test_slevel [eva] computing for function test_unroll <- main. - Called from partitioning-annots.c:224. + Called from partitioning-annots.c:279. [eva:loop-unroll:partial] partitioning-annots.c:26: loop not completely unrolled [eva] partitioning-annots.c:26: starting to merge loop iterations [eva:loop-unroll:partial] partitioning-annots.c:34: loop not completely unrolled @@ -25,7 +25,7 @@ [eva] Recording results for test_unroll [eva] Done for function test_unroll [eva] computing for function test_split <- main. - Called from partitioning-annots.c:225. + Called from partitioning-annots.c:280. [eva] computing for function Frama_C_interval <- test_split <- main. Called from partitioning-annots.c:73. [eva] using specification for function Frama_C_interval @@ -65,7 +65,7 @@ [eva] Recording results for test_split [eva] Done for function test_split [eva] computing for function test_dynamic_split <- main. - Called from partitioning-annots.c:226. + Called from partitioning-annots.c:281. [eva] partitioning-annots.c:95: Warning: this partitioning parameter cannot be evaluated safely on all states [eva] computing for function Frama_C_interval <- test_dynamic_split <- main. @@ -90,13 +90,44 @@ [eva] Recording results for test_dynamic_split [eva] Done for function test_dynamic_split [eva] computing for function test_dynamic_split_predicate <- main. - Called from partitioning-annots.c:227. + Called from partitioning-annots.c:282. [eva] partitioning-annots.c:124: starting to merge loop iterations [eva] Recording results for test_dynamic_split_predicate [eva] Done for function test_dynamic_split_predicate +[eva] computing for function test_splits_post_call <- main. + Called from partitioning-annots.c:283. +[eva] computing for function Frama_C_interval <- test_splits_post_call <- main. + Called from partitioning-annots.c:205. +[eva] partitioning-annots.c:205: + function Frama_C_interval: precondition 'order' got status valid. +[eva] Done for function Frama_C_interval +[eva] computing for function spec <- test_splits_post_call <- main. + Called from partitioning-annots.c:206. +[eva] using specification for function spec +[eva] Done for function spec +[eva] partitioning-annots.c:211: Frama_C_show_each_spec: [-2147483648..-10], ⊥ +[eva] partitioning-annots.c:211: Frama_C_show_each_spec: [10..2147483647], ⊥ +[eva] partitioning-annots.c:211: Frama_C_show_each_spec: {-1}, [-1000..1000] +[eva] computing for function body <- test_splits_post_call <- main. + Called from partitioning-annots.c:212. +[eva] Recording results for body +[eva] Done for function body +[eva] partitioning-annots.c:212: Reusing old results for call to body +[eva] partitioning-annots.c:212: Reusing old results for call to body +[eva] partitioning-annots.c:217: Frama_C_show_each_body: [-510..-10], ⊥ +[eva] partitioning-annots.c:217: Frama_C_show_each_body: [10..510], ⊥ +[eva] partitioning-annots.c:217: Frama_C_show_each_body: {-1}, [-1000..1000] +[eva] Recording results for test_splits_post_call +[eva] Done for function test_splits_post_call [eva] Recording results for main [eva] done for function main [eva] ====== VALUES COMPUTED ====== +[eva:final-states] Values at end of function body: + i2 ∈ [-500..500] + absolute ∈ [0..500] + state ∈ {-1; 0; 1} + y ∈ [-1000..1000] or UNINITIALIZED + __retres ∈ [-510..510] [eva:final-states] Values at end of function test_dynamic_split: Frama_C_entropy_source ∈ [--..--] a ∈ {0} @@ -117,6 +148,13 @@ k ∈ {0; 1} i ∈ {0; 1} j ∈ {0; 1; 2} +[eva:final-states] Values at end of function test_splits_post_call: + Frama_C_entropy_source ∈ [--..--] + x ∈ [-1000..1000] or UNINITIALIZED + y ∈ [-1000..1000] or UNINITIALIZED + error ∈ [-1000..1000] or UNINITIALIZED + i ∈ [-1000..1000] + r ∈ [-510..510] [eva:final-states] Values at end of function test_unroll: a[0..9] ∈ {42} b[0..9] ∈ {42} @@ -145,6 +183,8 @@ [eva:final-states] Values at end of function main: Frama_C_entropy_source ∈ [--..--] k ∈ {0; 1} +[from] Computing for function body +[from] Done for function body [from] Computing for function test_dynamic_split [from] Computing for function Frama_C_interval <-test_dynamic_split [from] Done for function Frama_C_interval @@ -155,6 +195,10 @@ [from] Done for function test_slevel [from] Computing for function test_split [from] Done for function test_split +[from] Computing for function test_splits_post_call +[from] Computing for function spec <-test_splits_post_call +[from] Done for function spec +[from] Done for function test_splits_post_call [from] Computing for function test_unroll [from] Done for function test_unroll [from] Computing for function main @@ -164,6 +208,12 @@ [from] Function Frama_C_interval: Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) \result FROM Frama_C_entropy_source; min; max +[from] Function body: + y FROM nondet; i; p (and SELF) + \result FROM nondet; i +[from] Function spec: + x FROM i + \result FROM i [from] Function test_dynamic_split: Frama_C_entropy_source FROM Frama_C_entropy_source; nondet (and SELF) [from] Function test_dynamic_split_predicate: @@ -173,12 +223,18 @@ [from] Function test_split: Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) k FROM Frama_C_entropy_source +[from] Function test_splits_post_call: + Frama_C_entropy_source FROM Frama_C_entropy_source (and SELF) [from] Function test_unroll: NO EFFECTS [from] Function main: Frama_C_entropy_source FROM Frama_C_entropy_source; nondet (and SELF) k FROM Frama_C_entropy_source [from] ====== END OF DEPENDENCIES ====== +[inout] Out (internal) for function body: + i2; absolute; tmp; state; y; __retres +[inout] Inputs for function body: + nondet [inout] Out (internal) for function test_dynamic_split: Frama_C_entropy_source; a; b [inout] Inputs for function test_dynamic_split: @@ -195,6 +251,10 @@ Frama_C_entropy_source; k; i; j [inout] Inputs for function test_split: Frama_C_entropy_source; k +[inout] Out (internal) for function test_splits_post_call: + Frama_C_entropy_source; x; y; error; i; r +[inout] Inputs for function test_splits_post_call: + Frama_C_entropy_source; nondet [inout] Out (internal) for function test_unroll: a[0..9]; b[0..9]; c[0..19]; d[0..19]; e[0..9]; i; j; i_0; j_0; i_1; i_2; i_3; j_1 diff --git a/tests/value/oracle/partitioning-annots.3.res.oracle b/tests/value/oracle/partitioning-annots.3.res.oracle index 3fe49f8ff9266240c18aac21e67f32978e3992ca..365ff709693100a98812f0b3ee71f2608624ab07 100644 --- a/tests/value/oracle/partitioning-annots.3.res.oracle +++ b/tests/value/oracle/partitioning-annots.3.res.oracle @@ -6,13 +6,13 @@ nondet ∈ [--..--] k ∈ {0} [eva] computing for function Frama_C_interval <- test_history. - Called from partitioning-annots.c:167. + Called from partitioning-annots.c:222. [eva] using specification for function Frama_C_interval -[eva] partitioning-annots.c:167: +[eva] partitioning-annots.c:222: function Frama_C_interval: precondition 'order' got status valid. [eva] Done for function Frama_C_interval -[eva] partitioning-annots.c:173: Frama_C_show_each: {0; 1}, {0; 1} -[eva:alarm] partitioning-annots.c:176: Warning: +[eva] partitioning-annots.c:228: Frama_C_show_each: {0; 1}, {0; 1} +[eva:alarm] partitioning-annots.c:231: Warning: division by zero. assert j ≢ 0; [eva] Recording results for test_history [eva] done for function test_history diff --git a/tests/value/oracle/partitioning-annots.4.res.oracle b/tests/value/oracle/partitioning-annots.4.res.oracle index 793324f2603cfd3fb554a92a29803c88ae31e867..8ad2cdfc8afe43036525234351b1a5baebfff62c 100644 --- a/tests/value/oracle/partitioning-annots.4.res.oracle +++ b/tests/value/oracle/partitioning-annots.4.res.oracle @@ -6,13 +6,13 @@ nondet ∈ [--..--] k ∈ {0} [eva] computing for function Frama_C_interval <- test_history. - Called from partitioning-annots.c:167. + Called from partitioning-annots.c:222. [eva] using specification for function Frama_C_interval -[eva] partitioning-annots.c:167: +[eva] partitioning-annots.c:222: function Frama_C_interval: precondition 'order' got status valid. [eva] Done for function Frama_C_interval -[eva] partitioning-annots.c:173: Frama_C_show_each: {0}, {0} -[eva] partitioning-annots.c:173: Frama_C_show_each: {1}, {1} +[eva] partitioning-annots.c:228: Frama_C_show_each: {0}, {0} +[eva] partitioning-annots.c:228: Frama_C_show_each: {1}, {1} [eva] Recording results for test_history [eva] done for function test_history [eva] ====== VALUES COMPUTED ====== diff --git a/tests/value/oracle_apron/partitioning-annots.0.res.oracle b/tests/value/oracle_apron/partitioning-annots.0.res.oracle index 94ed9ffca14931983ca8b0fcfd773dae01006fe7..68d268103b83832bb45759df2b7108b8ad474e1e 100644 --- a/tests/value/oracle_apron/partitioning-annots.0.res.oracle +++ b/tests/value/oracle_apron/partitioning-annots.0.res.oracle @@ -1,4 +1,16 @@ -105,106c105,106 +115,116c115,122 +< [eva] partitioning-annots.c:212: Reusing old results for call to body +< [eva] partitioning-annots.c:212: Reusing old results for call to body +--- +> [eva] computing for function body <- test_splits_post_call <- main. +> Called from partitioning-annots.c:212. +> [eva] Recording results for body +> [eva] Done for function body +> [eva] computing for function body <- test_splits_post_call <- main. +> Called from partitioning-annots.c:212. +> [eva] Recording results for body +> [eva] Done for function body +136,137c142,143 < x ∈ [0..44] < y ∈ [0..44] --- diff --git a/tests/value/oracle_apron/partitioning-annots.3.res.oracle b/tests/value/oracle_apron/partitioning-annots.3.res.oracle index d04cebfc945498812ebf2de1f658c5458442d6d8..5a8823d8cc9e5c5d07f57720b06f7c0917f9c17a 100644 --- a/tests/value/oracle_apron/partitioning-annots.3.res.oracle +++ b/tests/value/oracle_apron/partitioning-annots.3.res.oracle @@ -1,3 +1,3 @@ 15,16d14 -< [eva:alarm] partitioning-annots.c:176: Warning: +< [eva:alarm] partitioning-annots.c:231: Warning: < division by zero. assert j ≢ 0; diff --git a/tests/value/oracle_octagon/partitioning-annots.0.res.oracle b/tests/value/oracle_octagon/partitioning-annots.0.res.oracle index cd64a1b908f4fcd56dac921a50c0bec490216e7e..141d3a1f322385d29fea8cd73951c79d349d8440 100644 --- a/tests/value/oracle_octagon/partitioning-annots.0.res.oracle +++ b/tests/value/oracle_octagon/partitioning-annots.0.res.oracle @@ -1,4 +1,4 @@ -105,106c105,106 +136,137c136,137 < x ∈ [0..44] < y ∈ [0..44] --- diff --git a/tests/value/partitioning-annots.c b/tests/value/partitioning-annots.c index d3ab58aaa5069ea02e5298ffff4abd6874bae81b..393b1fe4bbd3e01a353013158fd7fa781ec5b43c 100644 --- a/tests/value/partitioning-annots.c +++ b/tests/value/partitioning-annots.c @@ -162,6 +162,61 @@ void test_loop_split() } } +/*@ + assigns \result, *p \from i; + behavior error: + assumes nondet == 0; + assigns \result, *p \from i; + ensures \result == -1; + ensures \initialized(p) && *p == \old(i); + behavior positive: + assumes nondet > 0; + assigns \result \from i; + ensures \result >= 10; + behavior negative: + assumes nondet < 0; + assigns \result \from i; + ensures \result <= -10; + disjoint behaviors; + complete behaviors; +*/ +int spec(int i, int* p); + +int body(int i, int *p) { + int i2 = i / 2; + int absolute = i2 < 0 ? -i2 : i2; + int state = nondet % 2; + //@ split state; + if (state < 0) + return - 10 - absolute; + if (state > 0) + return 10 + absolute; + *p = i; + return -1; +} + +/* Tests the application of multiple splits according to the return value of a + call, to keep in the caller some state partitioning from the callee. + The splits must be defined after the call, so the state partitioning from the + callee must be kept until all splits are performed. + Tests this whether the function body or a specification is used. */ +void test_splits_post_call (void) { + int x, y, error; + int i = Frama_C_interval(-1000, 1000); + int r = spec(i, &x); + //@ split r < -1; + //@ split r > -1; + if (r == -1) + error = x; // There should be no alarm. + Frama_C_show_each_spec(r, x); // There should be three states. + r = body(i, &y); + //@ split r < -1; + //@ split r > -1; + if (r == -1) + error = y; // There should be no alarm. + Frama_C_show_each_body(r, y); // There should be three states. +} + void test_history() { int i = Frama_C_interval(0,1); @@ -225,4 +280,5 @@ void main(void) test_split(); test_dynamic_split(); test_dynamic_split_predicate(); + test_splits_post_call(); }