From 6f36d3b19f3dd34c8d4b9fae05e0f66a08c1d7bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Tue, 23 Feb 2021 17:54:19 +0100 Subject: [PATCH] [wp] non-regression test for issue pub. 49 --- src/plugins/wp/tests/wp_bts/issue_pub_49.i | 90 ++++++++ .../wp_bts/oracle/issue_pub_49.res.oracle | 208 ++++++++++++++++++ .../oracle_qualif/issue_pub_49.res.oracle | 49 +++++ 3 files changed, 347 insertions(+) create mode 100644 src/plugins/wp/tests/wp_bts/issue_pub_49.i create mode 100644 src/plugins/wp/tests/wp_bts/oracle/issue_pub_49.res.oracle create mode 100644 src/plugins/wp/tests/wp_bts/oracle_qualif/issue_pub_49.res.oracle diff --git a/src/plugins/wp/tests/wp_bts/issue_pub_49.i b/src/plugins/wp/tests/wp_bts/issue_pub_49.i new file mode 100644 index 00000000000..13edc0d932a --- /dev/null +++ b/src/plugins/wp/tests/wp_bts/issue_pub_49.i @@ -0,0 +1,90 @@ +/* + Postcondition postcs of function caller1 is proven (fixed value for codeCursor) while codeCursor may be updated in function is_class. + Similar issue for caller2. + Hint: proof not achieved when instruction at label_useless_cond is removed as in caller3. + Hint: proof not achieved when t3 is not declared in the block as in caller4. + Used command to run the proof: + frama-c-gui assigns_postconditions.c -wp -wp-check-memory-model -wp-rte +*/ + + + +int codeCursor; + +/*@ + assigns codeCursor; +*/ +int is_class(void){ + if (codeCursor < 10) + codeCursor++; + return 0; +} + + +/*@ + assigns codeCursor; + ensures postcs: codeCursor == \old(codeCursor); +*/ +int caller1(void){ + int t1=1; + int t2=0; + int t3; + + label_useless_cond: if (t1 == 7) return 1; + + label_cond_1: if (t2 == 0) {int t3 = is_class(); return t3;} + //label_cond_2:if (t2 == 0) {t3 = is_class(); return t3;} + else return is_class(); +} + + +/*@ + assigns codeCursor; + ensures postcs: codeCursor == \old(codeCursor); +*/ +int caller2(void){ + int t1=1; + int t2=0; + int t3; + + label_useless_cond: if (t1 == 7) return 1; + + label_cond_1: if (t2 == 0) {return is_class();} + //label_cond_2:if (t2 == 0) {t3 = is_class(); return t3;} + else return is_class(); +} + + +/*@ + assigns codeCursor; + ensures postcs: codeCursor == \old(codeCursor); +*/ +int caller3(void){ + int t1=1; + int t2=0; + int t3; + + //label_useless_cond: if (t1 == 7) return 1; + + label_cond_1: if (t2 == 0) {int t3 = is_class(); return t3;} + //label_cond_2:if (t2 == 0) {t3 = is_class(); return t3;} + else return is_class(); +} + + +/*@ + assigns codeCursor; + ensures postcs: codeCursor == \old(codeCursor); +*/ +int caller4(void){ + int t1=1; + int t2=0; + int t3; + + label_useless_cond: if (t1 == 7) return 1; + + //label_cond_1: if (t2 == 0) {int t3 = is_class(); return t3;} + label_cond_2:if (t2 == 0) {t3 = is_class(); return t3;} + else return is_class(); +} + diff --git a/src/plugins/wp/tests/wp_bts/oracle/issue_pub_49.res.oracle b/src/plugins/wp/tests/wp_bts/oracle/issue_pub_49.res.oracle new file mode 100644 index 00000000000..3ca32f21c6c --- /dev/null +++ b/src/plugins/wp/tests/wp_bts/oracle/issue_pub_49.res.oracle @@ -0,0 +1,208 @@ +# frama-c -wp [...] +[kernel] Parsing tests/wp_bts/issue_pub_49.i (no preprocessing) +[wp] Running WP plugin... +[wp] Warning: Missing RTE guards +------------------------------------------------------------ + Function caller1 +------------------------------------------------------------ + +Goal Post-condition 'postcs' in 'caller1': +Assume { Type: is_sint32(codeCursor_1) /\ is_sint32(codeCursor_0). } +Prove: codeCursor_0 = codeCursor_1. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 25) in 'caller1': +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 25) in 'caller1' (1/6): +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 25) in 'caller1' (2/6): +Effect at line 33 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 25) in 'caller1' (3/6): +Call Result at line 35 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 25) in 'caller1' (4/6): +Effect at line 35 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 25) in 'caller1' (5/6): +Call Result at line 37 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 25) in 'caller1' (6/6): +Effect at line 37 +Prove: true. + +------------------------------------------------------------ +------------------------------------------------------------ + Function caller2 +------------------------------------------------------------ + +Goal Post-condition 'postcs' in 'caller2': +Assume { Type: is_sint32(codeCursor_1) /\ is_sint32(codeCursor_0). } +Prove: codeCursor_0 = codeCursor_1. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 42) in 'caller2': +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 42) in 'caller2' (1/6): +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 42) in 'caller2' (2/6): +Effect at line 50 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 42) in 'caller2' (3/6): +Call Result at line 52 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 42) in 'caller2' (4/6): +Effect at line 52 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 42) in 'caller2' (5/6): +Call Result at line 54 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 42) in 'caller2' (6/6): +Effect at line 54 +Prove: true. + +------------------------------------------------------------ +------------------------------------------------------------ + Function caller3 +------------------------------------------------------------ + +Goal Post-condition 'postcs' in 'caller3': +Assume { Type: is_sint32(codeCursor_1) /\ is_sint32(codeCursor_0). } +Prove: codeCursor_0 = codeCursor_1. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 59) in 'caller3': +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 59) in 'caller3' (1/5): +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 59) in 'caller3' (2/5): +Call Result at line 69 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 59) in 'caller3' (3/5): +Effect at line 69 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 59) in 'caller3' (4/5): +Call Result at line 71 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 59) in 'caller3' (5/5): +Effect at line 71 +Prove: true. + +------------------------------------------------------------ +------------------------------------------------------------ + Function caller4 +------------------------------------------------------------ + +Goal Post-condition 'postcs' in 'caller4': +Assume { Type: is_sint32(codeCursor_1) /\ is_sint32(codeCursor_0). } +Prove: codeCursor_0 = codeCursor_1. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 76) in 'caller4': +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 76) in 'caller4' (1/6): +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 76) in 'caller4' (2/6): +Effect at line 84 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 76) in 'caller4' (3/6): +Call Result at line 87 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 76) in 'caller4' (4/6): +Effect at line 87 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 76) in 'caller4' (5/6): +Call Result at line 88 +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 76) in 'caller4' (6/6): +Effect at line 88 +Prove: true. + +------------------------------------------------------------ +------------------------------------------------------------ + Function is_class +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 15) in 'is_class' (1/2): +Prove: true. + +------------------------------------------------------------ + +Goal Assigns (file tests/wp_bts/issue_pub_49.i, line 15) in 'is_class' (2/2): +Effect at line 20 +Prove: true. + +------------------------------------------------------------ diff --git a/src/plugins/wp/tests/wp_bts/oracle_qualif/issue_pub_49.res.oracle b/src/plugins/wp/tests/wp_bts/oracle_qualif/issue_pub_49.res.oracle new file mode 100644 index 00000000000..76e0835aa27 --- /dev/null +++ b/src/plugins/wp/tests/wp_bts/oracle_qualif/issue_pub_49.res.oracle @@ -0,0 +1,49 @@ +# frama-c -wp [...] +[kernel] Parsing tests/wp_bts/issue_pub_49.i (no preprocessing) +[wp] Running WP plugin... +[wp] Warning: Missing RTE guards +[wp] 33 goals scheduled +[wp] [Qed] Goal typed_is_class_assigns_part1 : Valid +[wp] [Qed] Goal typed_is_class_assigns_part2 : Valid +[wp] [Alt-Ergo] Goal typed_caller1_ensures_postcs : Unsuccess +[wp] [Qed] Goal typed_caller1_assigns_exit : Valid +[wp] [Qed] Goal typed_caller1_assigns_normal_part1 : Valid +[wp] [Qed] Goal typed_caller1_assigns_normal_part2 : Valid +[wp] [Qed] Goal typed_caller1_assigns_normal_part3 : Valid +[wp] [Qed] Goal typed_caller1_assigns_normal_part4 : Valid +[wp] [Qed] Goal typed_caller1_assigns_normal_part5 : Valid +[wp] [Qed] Goal typed_caller1_assigns_normal_part6 : Valid +[wp] [Alt-Ergo] Goal typed_caller2_ensures_postcs : Unsuccess +[wp] [Qed] Goal typed_caller2_assigns_exit : Valid +[wp] [Qed] Goal typed_caller2_assigns_normal_part1 : Valid +[wp] [Qed] Goal typed_caller2_assigns_normal_part2 : Valid +[wp] [Qed] Goal typed_caller2_assigns_normal_part3 : Valid +[wp] [Qed] Goal typed_caller2_assigns_normal_part4 : Valid +[wp] [Qed] Goal typed_caller2_assigns_normal_part5 : Valid +[wp] [Qed] Goal typed_caller2_assigns_normal_part6 : Valid +[wp] [Alt-Ergo] Goal typed_caller3_ensures_postcs : Unsuccess +[wp] [Qed] Goal typed_caller3_assigns_exit : Valid +[wp] [Qed] Goal typed_caller3_assigns_normal_part1 : Valid +[wp] [Qed] Goal typed_caller3_assigns_normal_part2 : Valid +[wp] [Qed] Goal typed_caller3_assigns_normal_part3 : Valid +[wp] [Qed] Goal typed_caller3_assigns_normal_part4 : Valid +[wp] [Qed] Goal typed_caller3_assigns_normal_part5 : Valid +[wp] [Alt-Ergo] Goal typed_caller4_ensures_postcs : Unsuccess +[wp] [Qed] Goal typed_caller4_assigns_exit : Valid +[wp] [Qed] Goal typed_caller4_assigns_normal_part1 : Valid +[wp] [Qed] Goal typed_caller4_assigns_normal_part2 : Valid +[wp] [Qed] Goal typed_caller4_assigns_normal_part3 : Valid +[wp] [Qed] Goal typed_caller4_assigns_normal_part4 : Valid +[wp] [Qed] Goal typed_caller4_assigns_normal_part5 : Valid +[wp] [Qed] Goal typed_caller4_assigns_normal_part6 : Valid +[wp] Proved goals: 29 / 33 + Qed: 29 + Alt-Ergo: 0 (unsuccess: 4) +------------------------------------------------------------ + Functions WP Alt-Ergo Total Success + is_class 2 - 2 100% + caller1 7 - 8 87.5% + caller2 7 - 8 87.5% + caller3 6 - 7 85.7% + caller4 7 - 8 87.5% +------------------------------------------------------------ -- GitLab