From 7a31c2dd87e68ebf99a2d890684d5c22a3079bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Bobot?= <francois.bobot@cea.fr> Date: Tue, 29 Sep 2020 17:01:47 +0200 Subject: [PATCH] recover good oracles for spec --- ptests/ptests.ml | 9 +- tests/saveload/deps.i | 12 +- tests/sparecode/test_config | 1 + tests/spec/anon_arg_2.i | 2 +- tests/spec/axiom_included.c | 3 +- tests/spec/bts0578.i | 4 +- tests/spec/generalized_check.i | 1 + tests/spec/lib.c | 2 +- tests/spec/merge_1.i | 2 +- tests/spec/merge_bts938.c | 2 +- tests/spec/merge_different_assigns.i | 2 +- tests/spec/multi_axiomatic_1.i | 2 +- .../oracle/acsl_basic_allocator.res.oracle | 105 ++++++++++++++++-- .../spec/oracle/annot_decl_bts1009.res.oracle | 10 +- tests/spec/oracle/anon_arg_2.res.oracle | 21 +++- tests/spec/oracle/array_typedef.res.oracle | 3 +- .../oracle/assignable_location.res.oracle | 3 +- tests/spec/oracle/axiom_included.res.oracle | 15 +-- .../spec/oracle/behavior_assert.0.res.oracle | 9 +- .../spec/oracle/behavior_assert.1.res.oracle | 3 +- .../clash_double_file_bts1598.res.oracle | 2 +- tests/spec/oracle/doxygen.res.oracle | 37 ------ tests/spec/oracle/error_msg.res.oracle | 3 +- .../oracle/generalized_check.0.res.oracle | 6 +- .../oracle/generalized_check.1.res.oracle | 18 +-- .../oracle/generalized_check.2.res.oracle | 2 +- tests/spec/oracle/lib.res.oracle | 19 +++- tests/spec/oracle/merge_bts938.res.oracle | 32 ++++-- .../oracle/merge_different_assigns.res.oracle | 9 +- .../oracle/merge_logic_globals_1.res.oracle | 61 +++++++++- tests/spec/oracle/model1.res.oracle | 89 +++++++++++++-- .../spec/oracle/multi_axiomatic_1.res.oracle | 22 +++- tests/spec/oracle/multiple_file_1.res.oracle | 3 +- .../spec/oracle/multiple_include_2.res.oracle | 8 +- tests/spec/oracle/preprocess.res.oracle | 61 ++++++++-- tests/spec/oracle/purse.res.oracle | 89 +++++++++++++-- tests/spec/oracle/rm_qualifiers.res.oracle | 2 +- tests/spec/oracle/shifts.res.oracle | 6 +- .../spec/oracle/statement_behavior.res.oracle | 3 +- .../status_by_call_issue_890.res.oracle | 2 +- tests/spec/oracle/transitive_rel.res.oracle | 3 +- tests/spec/oracle/use.res.oracle | 31 ++++-- tests/spec/oracle/volatile.res.oracle | 103 +++++++++++++++-- 43 files changed, 650 insertions(+), 172 deletions(-) diff --git a/ptests/ptests.ml b/ptests/ptests.ml index 4ed528781c7..274977fc09e 100644 --- a/ptests/ptests.ml +++ b/ptests/ptests.ml @@ -1142,7 +1142,7 @@ let command_string ~result_fmt ~oracle_fmt command = "(rule\n \ (targets %S %S %a)\n \ (deps %a %S (package frama-c)%a)\n \ - (action (with-stderr-to %S (with-stdout-to %S %s(with-accepted-exit-codes (or 0 1 4 125) (system %S))%s)))\n\ + (action (with-stderr-to %S (with-stdout-to %S %s(with-accepted-exit-codes (or 0 1 4 125 127) (system %S))%s)))\n\ )@." errlog res @@ -1159,16 +1159,13 @@ let command_string ~result_fmt ~oracle_fmt command = Format.fprintf result_fmt "(rule\n \ (alias %S)\n \ - (deps %a %S (package frama-c)%t)\n \ + (deps %a %S (package frama-c)%a (universe))\n \ (action (system %S))\n\ )\n" command.file print_list deps (get_ptest_file command) - (fun fmt -> - List.iter - (fun d -> Format.fprintf fmt " (package %S)" ("frama-c-"^d)) - command.plugins) + Fmt.(list (package_as_deps (quote plugin_as_package))) command.plugins command_string; let oracle_prefix = oracle_prefix command in diff --git a/tests/saveload/deps.i b/tests/saveload/deps.i index a9290b7c510..fa94aacd688 100644 --- a/tests/saveload/deps.i +++ b/tests/saveload/deps.i @@ -1,11 +1,11 @@ /* run.config CMXS: deps_A deps_B deps_C deps_D deps_E - EXECNOW: LOG deps_sav.res LOG deps_sav.err BIN deps.sav @frama-c@ -load-module %{dep:deps_A.cmxs} -eva @EVA_OPTIONS@ -out -input -deps ./deps.i -save ./result/deps.sav > ./result/deps_sav.res 2> ./result/deps_sav.err - STDOPT: +"-load-module ./deps_A -load ./result/deps.sav -eva @EVA_OPTIONS@ -out -input -deps " - STDOPT: +"-load-module ./deps_B -load ./result/deps.sav -out -input -deps " - STDOPT: +"-load-module ./deps_C -load ./result/deps.sav -out -input -deps " - STDOPT: +"-load-module ./deps_D -load ./result/deps.sav -out -input -deps " - STDOPT: +"-load-module ./deps_E -load ./result/deps.sav -out -input -deps " + EXECNOW: LOG deps_sav.res LOG deps_sav.err BIN deps.sav @frama-c@ -load-module %{dep:deps_A.cmxs} -eva @EVA_OPTIONS@ -out -input -deps ./deps.i -save deps.sav > ./result/deps_sav.res 2> ./result/deps_sav.err + STDOPT: +"-load-module %{deps:deps_A} -load ./result/deps.sav -eva @EVA_OPTIONS@ -out -input -deps " + STDOPT: +"-load-module %{deps:deps_B} -load ./result/deps.sav -out -input -deps " + STDOPT: +"-load-module %{deps:deps_C} -load ./result/deps.sav -out -input -deps " + STDOPT: +"-load-module %{deps:deps_D} -load ./result/deps.sav -out -input -deps " + STDOPT: +"-load-module %{deps:deps_E} -load ./result/deps.sav -out -input -deps " */ int main() { diff --git a/tests/sparecode/test_config b/tests/sparecode/test_config index a9330dd48d0..a8bbd0d9d8f 100644 --- a/tests/sparecode/test_config +++ b/tests/sparecode/test_config @@ -1 +1,2 @@ +PLUGIN: sparecode slicing OPT: -journal-disable @EVA_OPTIONS@ -sparecode-debug 1 diff --git a/tests/spec/anon_arg_2.i b/tests/spec/anon_arg_2.i index 9e3ef0cb8d0..80197a9b0f7 100644 --- a/tests/spec/anon_arg_2.i +++ b/tests/spec/anon_arg_2.i @@ -1,5 +1,5 @@ /* run.config* -STDOPT: #"@PTEST_DIR@/anon_arg_1.i @PTEST_FILE@" +STDOPT: #"%{dep:anon_arg_1.i} @PTEST_FILE@" */ /*@ requires \valid(p); diff --git a/tests/spec/axiom_included.c b/tests/spec/axiom_included.c index 4b30e4e5337..2b3bb5dece3 100644 --- a/tests/spec/axiom_included.c +++ b/tests/spec/axiom_included.c @@ -1,5 +1,6 @@ /* run.config - STDOPT: +"axiom_included_1.c" + DEPS: axiom_included.h + STDOPT: +"%{dep:axiom_included_1.c}" */ #include "axiom_included.h" diff --git a/tests/spec/bts0578.i b/tests/spec/bts0578.i index 2e1bf64bb4c..4ecccedf4d0 100644 --- a/tests/spec/bts0578.i +++ b/tests/spec/bts0578.i @@ -1,6 +1,6 @@ /* run.config - CMXS: @PTEST_NAME@ - OPT: -print -load-module ./@PTEST_DIR@/@PTEST_NAME@ + MODULE: @PTEST_NAME@.cmxs + OPT: -print */ /*@ behavior foo: ensures \true; */ diff --git a/tests/spec/generalized_check.i b/tests/spec/generalized_check.i index 66c93e7d3a8..8f06f2a0a58 100644 --- a/tests/spec/generalized_check.i +++ b/tests/spec/generalized_check.i @@ -1,4 +1,5 @@ /* run.config +PLUGIN: wp OPT: -wp -wp-prover qed -wp-msg-key shell OPT: -eva -eva-use-spec f OPT: -print diff --git a/tests/spec/lib.c b/tests/spec/lib.c index 8a1d566beaf..54cd5a85a14 100644 --- a/tests/spec/lib.c +++ b/tests/spec/lib.c @@ -1,5 +1,5 @@ /* run.config - OPT: -cpp-extra-args="-Itests/spec" -cpp-extra-args="-include lib.h" -print -journal-disable + OPT: -cpp-extra-args="-include %{dep:lib.h}" -print -journal-disable */ /*@ ensures f((int)0) == (int)0; */ diff --git a/tests/spec/merge_1.i b/tests/spec/merge_1.i index ac6d0792236..409e6b7683f 100644 --- a/tests/spec/merge_1.i +++ b/tests/spec/merge_1.i @@ -1,5 +1,5 @@ /* run.config - STDOPT: +"merge_2.i" + STDOPT: +"%{dep:merge_2.i}" */ /*@ requires \valid(s); @ assigns \nothing; diff --git a/tests/spec/merge_bts938.c b/tests/spec/merge_bts938.c index 8ee32add093..efd3962eb5d 100644 --- a/tests/spec/merge_bts938.c +++ b/tests/spec/merge_bts938.c @@ -1,5 +1,5 @@ /* run.config - STDOPT: +"merge_bts938_1.c" + STDOPT: +"%{deps:merge_bts938_1.c}" */ #include "merge_bts938.h" diff --git a/tests/spec/merge_different_assigns.i b/tests/spec/merge_different_assigns.i index 63fea95aa5b..b9166ff75bc 100644 --- a/tests/spec/merge_different_assigns.i +++ b/tests/spec/merge_different_assigns.i @@ -1,5 +1,5 @@ /* run.config - STDOPT: +"merge_different_assigns_bis.i" + STDOPT: +"%{dep:merge_different_assigns_bis.i}" */ int x, z, t, u, v, w; diff --git a/tests/spec/multi_axiomatic_1.i b/tests/spec/multi_axiomatic_1.i index cfe295495cc..8430c9c2bbf 100644 --- a/tests/spec/multi_axiomatic_1.i +++ b/tests/spec/multi_axiomatic_1.i @@ -1,5 +1,5 @@ /* run.config -OPT: @PTEST_DIR@/multi_axiomatic_2.i -print +OPT: %{dep:multi_axiomatic_2.i} -print */ /*@ diff --git a/tests/spec/oracle/acsl_basic_allocator.res.oracle b/tests/spec/oracle/acsl_basic_allocator.res.oracle index cf8150d4acb..6d2b0811ba6 100644 --- a/tests/spec/oracle/acsl_basic_allocator.res.oracle +++ b/tests/spec/oracle/acsl_basic_allocator.res.oracle @@ -1,8 +1,99 @@ [kernel] Parsing acsl_basic_allocator.c (with preprocessing) -[kernel] User Error: failed to run: gcc -E -C -I. -I/home/bobot/Sources/frama-c/_build/install/default/share/frama-c/share/libc -D__FRAMAC__ -D__FC_MACHDEP_X86_32 -dD -nostdinc -m32 -o '/tmp/acsl_basic_allocator.cefdc9d.i' '/home/bobot/Sources/frama-c/_build/default/result/acsl_basic_allocator.c' - this is possibly due to missing preprocessor flags; - consider options -cpp-extra-args, -json-compilation-database or -cpp-command. - See chapter "Preparing the Sources" in the Frama-C user manual for more details. -[kernel] User Error: stopping on file "acsl_basic_allocator.c" that has errors. Add - '-kernel-msg-key pp' for preprocessing command. -[kernel] Frama-C aborted: invalid user input. +/* Generated by Frama-C */ +#include "stdlib.h" +enum _bool { + false = 0, + true = 1 +}; +typedef enum _bool bool; +struct _memory_block { + size_t size ; + bool free ; + char *data ; +}; +typedef struct _memory_block memory_block; +struct _memory_block_list { + memory_block *block ; + struct _memory_block_list *next ; +}; +typedef struct _memory_block_list memory_block_list; +typedef memory_block_list *memory_pool; +/*@ +type invariant inv_memory_block(memory_block mb) = + 0 < mb.size ∧ \offset(mb.data) ≡ 0 ∧ + \block_length(mb.data) ≡ mb.size; + */ +/*@ +predicate used_memory_block{L}(memory_block mb) = + mb.free ≡ false ∧ inv_memory_block(mb); + */ +/*@ +predicate freed_memory_block{L}(memory_block mb) = + mb.free ≡ true ∧ inv_memory_block(mb); + */ +/*@ +predicate valid_memory_block{L}(memory_block *mb) = + \valid(mb) ∧ inv_memory_block(*mb); + */ +/*@ +predicate valid_used_memory_block{L}(memory_block *mb) = + \valid(mb) ∧ used_memory_block(*mb); + */ +/*@ +predicate valid_freed_memory_block{L}(memory_block *mb) = + \valid(mb) ∧ freed_memory_block(*mb); + */ +/*@ +predicate valid_memory_block_list{L}(memory_block_list *mbl) = + \valid(mbl) ∧ valid_memory_block(mbl->block) ∧ + (mbl->next ≡ \null ∨ valid_memory_block_list(mbl->next)); + */ +/*@ +predicate valid_memory_pool{L}(memory_pool *mp) = + \valid(mp) ∧ valid_memory_block_list(*mp); + +*/ +/*@ requires valid_memory_pool(arena) ∧ 0 < s; + ensures valid_used_memory_block(\result); + */ +memory_block *memory_alloc(memory_pool *arena, size_t s) +{ + memory_block *__retres; + memory_block *mb; + size_t mb_size; + char *mb_data; + memory_block_list *mbl = *arena; + while (mbl != (memory_block_list *)0) { + mb = mbl->block; + if (mb->free) + if (s <= mb->size) { + mb->free = false; + __retres = mb; + goto return_label; + } + mbl = mbl->next; + } + if ((size_t)1000 < s) mb_size = s; else mb_size = (unsigned int)1000; + mb_data = (char *)malloc(mb_size); + mb = (memory_block *)malloc(sizeof(memory_block)); + mb->size = mb_size; + mb->free = false; + mb->data = mb_data; + mbl = (memory_block_list *)malloc(sizeof(memory_block_list)); + mbl->block = mb; + mbl->next = *arena; + *arena = mbl; + __retres = mb; + return_label: return __retres; +} + +/*@ requires valid_memory_pool(arena) ∧ valid_used_memory_block(block); + ensures valid_freed_memory_block(\old(block)); + */ +void memory_free(memory_pool *arena, memory_block *block) +{ + block->free = true; + return; +} + + diff --git a/tests/spec/oracle/annot_decl_bts1009.res.oracle b/tests/spec/oracle/annot_decl_bts1009.res.oracle index 6c592eecabf..24b7d528817 100644 --- a/tests/spec/oracle/annot_decl_bts1009.res.oracle +++ b/tests/spec/oracle/annot_decl_bts1009.res.oracle @@ -1,13 +1,5 @@ -<<<<<<< HEAD [kernel] Parsing annot_decl_bts1009.i (no preprocessing) -[kernel:annot-error] Warning: -||||||| 362083a770 -[kernel] Parsing tests/spec/annot_decl_bts1009.i (no preprocessing) -[kernel:annot-error] Warning: -======= -[kernel] Parsing tests/spec/annot_decl_bts1009.i (no preprocessing) -[kernel:annot-error] tests/spec/annot_decl_bts1009.i:5: Warning: ->>>>>>> origin/master +[kernel:annot-error] annot_decl_bts1009.i:5: Warning: Statement contract and ACSL pragmas over a local definition are not implemented. Ignoring annotation /* Generated by Frama-C */ void f(void) diff --git a/tests/spec/oracle/anon_arg_2.res.oracle b/tests/spec/oracle/anon_arg_2.res.oracle index d9ebdefad94..4dac36af6cc 100644 --- a/tests/spec/oracle/anon_arg_2.res.oracle +++ b/tests/spec/oracle/anon_arg_2.res.oracle @@ -1,2 +1,19 @@ -[kernel] User Error: source file 'anon_arg_1.i' does not exist -[kernel] Frama-C aborted: invalid user input. +[kernel] Parsing anon_arg_1.i (no preprocessing) +[kernel] Parsing anon_arg_2.i (no preprocessing) +[kernel] anon_arg_1.i:7: Warning: found two contracts. Merging them +/* Generated by Frama-C */ +/*@ requires \valid(p); + ensures \result ≡ \old(x) ∧ *\old(p) ≡ \old(x); + assigns *p; + assigns *p \from x; + */ +int f(int *p, int x); + +/*@ requires \valid(p); + ensures \result ≡ \old(x); + ensures *\old(p) ≡ \result; + assigns *p; + */ +int g(int *p, int x); + + diff --git a/tests/spec/oracle/array_typedef.res.oracle b/tests/spec/oracle/array_typedef.res.oracle index 585ed5bea14..f9f255b9bff 100644 --- a/tests/spec/oracle/array_typedef.res.oracle +++ b/tests/spec/oracle/array_typedef.res.oracle @@ -24,7 +24,8 @@ [eva] computing for function send_addr <- send_msg <- main. Called from array_typedef.c:15. [eva] using specification for function send_addr -[eva] array_typedef.c:12: Warning: no \from part for clause 'assigns \empty;' +[eva] array_typedef.c:12: Warning: + no \from part for clause 'assigns \empty;' [eva] Done for function send_addr [eva] Recording results for send_msg [eva] Done for function send_msg diff --git a/tests/spec/oracle/assignable_location.res.oracle b/tests/spec/oracle/assignable_location.res.oracle index 43aec8f2843..db7ee46c131 100644 --- a/tests/spec/oracle/assignable_location.res.oracle +++ b/tests/spec/oracle/assignable_location.res.oracle @@ -1,5 +1,6 @@ [kernel] Parsing assignable_location.i (no preprocessing) -[kernel:annot-error] assignable_location.i:36: Warning: unexpected token ';' +[kernel:annot-error] assignable_location.i:36: Warning: + unexpected token ';' [kernel:annot-error] assignable_location.i:28: Warning: not an addressable left value: \result. Ignoring logic specification of function annotations_to_reject [kernel:annot-error] assignable_location.i:30: Warning: diff --git a/tests/spec/oracle/axiom_included.res.oracle b/tests/spec/oracle/axiom_included.res.oracle index b79a2467ca2..a0b318d9f59 100644 --- a/tests/spec/oracle/axiom_included.res.oracle +++ b/tests/spec/oracle/axiom_included.res.oracle @@ -1,8 +1,9 @@ [kernel] Parsing axiom_included.c (with preprocessing) -[kernel] User Error: failed to run: gcc -E -C -I. -I/home/bobot/Sources/frama-c/_build/install/default/share/frama-c/share/libc -D__FRAMAC__ -D__FC_MACHDEP_X86_32 -dD -nostdinc -m32 -o '/tmp/axiom_included.c474bb9.i' '/home/bobot/Sources/frama-c/_build/default/result/axiom_included.c' - this is possibly due to missing preprocessor flags; - consider options -cpp-extra-args, -json-compilation-database or -cpp-command. - See chapter "Preparing the Sources" in the Frama-C user manual for more details. -[kernel] User Error: stopping on file "axiom_included.c" that has errors. Add '-kernel-msg-key pp' - for preprocessing command. -[kernel] Frama-C aborted: invalid user input. +[kernel] Parsing axiom_included_1.c (with preprocessing) +/* Generated by Frama-C */ +/*@ axiomatic foo { + axiom foo: \true; + + } + */ + diff --git a/tests/spec/oracle/behavior_assert.0.res.oracle b/tests/spec/oracle/behavior_assert.0.res.oracle index fe15f248e83..a909a19c510 100644 --- a/tests/spec/oracle/behavior_assert.0.res.oracle +++ b/tests/spec/oracle/behavior_assert.0.res.oracle @@ -8,7 +8,8 @@ c ∈ [--..--] [eva] computing for function f <- main. Called from behavior_assert.c:90. -[eva:alarm] behavior_assert.c:14: Warning: assertion got status invalid. +[eva:alarm] behavior_assert.c:14: Warning: + assertion got status invalid. [eva] behavior_assert.c:16: assertion got status valid. [eva] Recording results for f [eva] Done for function f @@ -32,7 +33,8 @@ Called from behavior_assert.c:52. [eva] Recording results for abs [eva] Done for function abs -[eva:alarm] behavior_assert.c:55: Warning: assertion got status unknown. +[eva:alarm] behavior_assert.c:55: Warning: + assertion got status unknown. [eva] behavior_assert.c:45: function h1, behavior not_null: postcondition got status valid. [eva] Recording results for h1 @@ -43,7 +45,8 @@ [eva] computing for function k <- main. Called from behavior_assert.c:93. [eva] behavior_assert.c:85: assertion got status valid. -[eva:alarm] behavior_assert.c:86: Warning: assertion got status invalid. +[eva:alarm] behavior_assert.c:86: Warning: + assertion got status invalid. [eva] Recording results for k [eva] Done for function k [eva] Recording results for main diff --git a/tests/spec/oracle/behavior_assert.1.res.oracle b/tests/spec/oracle/behavior_assert.1.res.oracle index 13875b49281..e206e4995a9 100644 --- a/tests/spec/oracle/behavior_assert.1.res.oracle +++ b/tests/spec/oracle/behavior_assert.1.res.oracle @@ -32,7 +32,8 @@ Called from behavior_assert.c:52. [eva] Recording results for abs [eva] Done for function abs -[eva:alarm] behavior_assert.c:55: Warning: assertion got status unknown. +[eva:alarm] behavior_assert.c:55: Warning: + assertion got status unknown. [eva] behavior_assert.c:45: function h1, behavior not_null: postcondition got status valid. [eva] Recording results for h1 diff --git a/tests/spec/oracle/clash_double_file_bts1598.res.oracle b/tests/spec/oracle/clash_double_file_bts1598.res.oracle index 19ba21bf7c8..93fcee65eeb 100644 --- a/tests/spec/oracle/clash_double_file_bts1598.res.oracle +++ b/tests/spec/oracle/clash_double_file_bts1598.res.oracle @@ -19,7 +19,7 @@ #include "wchar.h" [kernel] Parsing clash_double_file_bts1598.c (with preprocessing) -[kernel] Parsing foo.c (with preprocessing) +[kernel] Parsing result/foo.c (with preprocessing) /* Generated by Frama-C */ #include "__fc_builtin.h" #include "assert.h" diff --git a/tests/spec/oracle/doxygen.res.oracle b/tests/spec/oracle/doxygen.res.oracle index 80866aac793..5a7807914f0 100644 --- a/tests/spec/oracle/doxygen.res.oracle +++ b/tests/spec/oracle/doxygen.res.oracle @@ -23,57 +23,20 @@ void main(); /* Generated by Frama-C */ /* run.config OPT: -keep-comments -print -then -pp-annot -<<<<<<< HEAD - */ -/* run.config - OPT: -keep-comments -print -then -pp-annot - */ -/* @{ */ -/* @{ */ -/* @{ Bla */ -/* @{ Bla */ -/* @{ */ -/* @{ */ -/* @{ Blu */ -/* @{ Blu */ -||||||| 362083a770 - */ -/* @{ */ -/* @{ Bla */ -/* @{ */ -/* @{ Blu */ -======= */ //@{ //@{ Bla //@{ //@{ Blu ->>>>>>> origin/master void doxygen_group(void) { return; } -<<<<<<< HEAD -/* @} Bli */ -/* @} Bli */ -/* @} */ -/* @} */ -/* @} */ -/* @} */ -/* @} Bly */ -/* @} Bly */ -||||||| 362083a770 -/* @} Bli */ -/* @} */ -/* @} */ -/* @} Bly */ -======= //@} Bli //@} //@} //@} Bly ->>>>>>> origin/master void main(); diff --git a/tests/spec/oracle/error_msg.res.oracle b/tests/spec/oracle/error_msg.res.oracle index e973fed7c59..246a6346f75 100644 --- a/tests/spec/oracle/error_msg.res.oracle +++ b/tests/spec/oracle/error_msg.res.oracle @@ -1,5 +1,6 @@ [kernel] Parsing error_msg.i (no preprocessing) -[kernel:annot-error] error_msg.i:4: Warning: expecting ';' before ensures +[kernel:annot-error] error_msg.i:4: Warning: + expecting ';' before ensures [kernel:annot-error] error_msg.i:8: Warning: expecting ';' before end of annotation /* Generated by Frama-C */ diff --git a/tests/spec/oracle/generalized_check.0.res.oracle b/tests/spec/oracle/generalized_check.0.res.oracle index 391634ac903..f0d439c4204 100644 --- a/tests/spec/oracle/generalized_check.0.res.oracle +++ b/tests/spec/oracle/generalized_check.0.res.oracle @@ -1,12 +1,12 @@ # frama-c -wp [...] -[kernel] Parsing tests/spec/generalized_check.i (no preprocessing) +[kernel] Parsing generalized_check.i (no preprocessing) [wp] Running WP plugin... -[wp] tests/spec/generalized_check.i:30: Warning: +[wp] generalized_check.i:30: Warning: Unsupported generalized invariant, use loop invariant instead. Ignored invariant check invariant \true; [wp] Warning: Missing RTE guards -[wp] tests/spec/generalized_check.i:37: Warning: +[wp] generalized_check.i:37: Warning: Missing assigns clause (assigns 'everything' instead) [wp] 11 goals scheduled [wp] [Qed] Goal typed_f_assigns : Valid diff --git a/tests/spec/oracle/generalized_check.1.res.oracle b/tests/spec/oracle/generalized_check.1.res.oracle index f93e7228b40..4d035120bc0 100644 --- a/tests/spec/oracle/generalized_check.1.res.oracle +++ b/tests/spec/oracle/generalized_check.1.res.oracle @@ -1,24 +1,24 @@ -[kernel] Parsing tests/spec/generalized_check.i (no preprocessing) +[kernel] Parsing generalized_check.i (no preprocessing) [eva] Analyzing a complete application starting at main [eva] Computing initial state [eva] Initial state computed [eva:initial-state] Values of globals at initialization -[eva:alarm] tests/spec/generalized_check.i:23: Warning: +[eva:alarm] generalized_check.i:23: Warning: accessing uninitialized left-value. assert \initialized(&c); [eva] using specification for function f -[eva:alarm] tests/spec/generalized_check.i:24: Warning: +[eva:alarm] generalized_check.i:24: Warning: function f: precondition 'f_valid_x' got status unknown. -[eva] tests/spec/generalized_check.i:9: Warning: +[eva] generalized_check.i:9: Warning: no \from part for clause 'assigns *x;' -[eva:alarm] tests/spec/generalized_check.i:25: Warning: +[eva:alarm] generalized_check.i:25: Warning: check 'main_valid_ko' got status unknown. -[eva:alarm] tests/spec/generalized_check.i:26: Warning: +[eva:alarm] generalized_check.i:26: Warning: check 'main_p_content_ko' got status unknown. -[eva:alarm] tests/spec/generalized_check.i:32: Warning: +[eva:alarm] generalized_check.i:32: Warning: loop invariant 'false_but_preserved' got status invalid. -[eva] tests/spec/generalized_check.i:35: starting to merge loop iterations -[eva:alarm] tests/spec/generalized_check.i:36: Warning: +[eva] generalized_check.i:35: starting to merge loop iterations +[eva:alarm] generalized_check.i:36: Warning: check 'implied_by_false_invariant' got status invalid. [eva] done for function main [eva] ====== VALUES COMPUTED ====== diff --git a/tests/spec/oracle/generalized_check.2.res.oracle b/tests/spec/oracle/generalized_check.2.res.oracle index dd870d5dc00..7e0503ac2ae 100644 --- a/tests/spec/oracle/generalized_check.2.res.oracle +++ b/tests/spec/oracle/generalized_check.2.res.oracle @@ -1,4 +1,4 @@ -[kernel] Parsing tests/spec/generalized_check.i (no preprocessing) +[kernel] Parsing generalized_check.i (no preprocessing) /* Generated by Frama-C */ /*@ check lemma easy_proof: \false; */ diff --git a/tests/spec/oracle/lib.res.oracle b/tests/spec/oracle/lib.res.oracle index 080c8c4cf13..831442a8fe0 100644 --- a/tests/spec/oracle/lib.res.oracle +++ b/tests/spec/oracle/lib.res.oracle @@ -1,6 +1,15 @@ [kernel] Parsing lib.c (with preprocessing) -[kernel] User Error: failed to run: gcc -E -C -I. -I/home/bobot/Sources/frama-c/_build/install/default/share/frama-c/share/libc -D__FRAMAC__ -D__FC_MACHDEP_X86_32 -Itmp/lib.c4c267f.i' '/home/bobot/Sources/frama-c/_build/default/result/lib.c' - See chapter "Preparing the Sources" in the Frama-C user manual for more details. -[kernel] User Error: stopping on file "lib.c" that has errors. Add '-kernel-msg-key pp' - for preprocessing command. -[kernel] Frama-C aborted: invalid user input. +[kernel] lib.h:1: Warning: + parsing obsolete ACSL construct 'logic declaration'. 'an axiomatic block' should be used instead. +/* Generated by Frama-C */ +/*@ logic int f(int i) ; + */ +/*@ ensures f((int)0) ≡ (int)0; */ +int main(void) +{ + int __retres; + __retres = 0; + return __retres; +} + + diff --git a/tests/spec/oracle/merge_bts938.res.oracle b/tests/spec/oracle/merge_bts938.res.oracle index 1661ab65689..4970ba6c845 100644 --- a/tests/spec/oracle/merge_bts938.res.oracle +++ b/tests/spec/oracle/merge_bts938.res.oracle @@ -1,8 +1,26 @@ [kernel] Parsing merge_bts938.c (with preprocessing) -[kernel] User Error: failed to run: gcc -E -C -I. -I/home/bobot/Sources/frama-c/_build/install/default/share/frama-c/share/libc -D__FRAMAC__ -D__FC_MACHDEP_X86_32 -dD -nostdinc -m32 -o '/tmp/merge_bts938.c371829.i' '/home/bobot/Sources/frama-c/_build/default/result/merge_bts938.c' - this is possibly due to missing preprocessor flags; - consider options -cpp-extra-args, -json-compilation-database or -cpp-command. - See chapter "Preparing the Sources" in the Frama-C user manual for more details. -[kernel] User Error: stopping on file "merge_bts938.c" that has errors. Add '-kernel-msg-key pp' - for preprocessing command. -[kernel] Frama-C aborted: invalid user input. +[kernel] merge_bts938.c:7: Warning: + found two contracts (old location: merge_bts938.h:2). Merging them +[kernel] Parsing merge_bts938_1.c (with preprocessing) +[kernel] merge_bts938_1.c:7: Warning: + found two contracts (old location: merge_bts938.h:2). Merging them +[kernel] merge_bts938.c:8: Warning: found two contracts. Merging them +[kernel] merge_bts938.c:8: Warning: + found two contracts (old location: merge_bts938.h:2). Merging them +/* Generated by Frama-C */ +extern int tab[10]; + +int main(void); + +/*@ ensures test: \true; + ensures tab ≡ {tab \with [0] = (int)0}; + ensures test1: \true; + */ +int main(void) +{ + int __retres; + __retres = 0; + return __retres; +} + + diff --git a/tests/spec/oracle/merge_different_assigns.res.oracle b/tests/spec/oracle/merge_different_assigns.res.oracle index 2aa0db7bf53..fa14a61ed3e 100644 --- a/tests/spec/oracle/merge_different_assigns.res.oracle +++ b/tests/spec/oracle/merge_different_assigns.res.oracle @@ -1,13 +1,14 @@ [kernel] Parsing merge_different_assigns.i (no preprocessing) [kernel] Parsing merge_different_assigns_bis.i (no preprocessing) -[kernel] merge_different_assigns.i:7: Warning: found two contracts. Merging them +[kernel] merge_different_assigns.i:7: Warning: + found two contracts. Merging them [kernel] merge_different_assigns.i:8: Warning: location z is not present in all assigns clauses [kernel] merge_different_assigns.i:10: Warning: incompatible from - clauses (merge_different_assigns.i:10:'assigns t \from \nothing;' and - merge_different_assigns_bis.i:8:'assigns t \from t;'). Keeping only the first - one. + clauses (merge_different_assigns.i:10:'assigns t \from \nothing;' + and merge_different_assigns_bis.i:8:'assigns t \from t;'). Keeping + only the first one. [kernel] merge_different_assigns_bis.i:10: Warning: location v is not present in all assigns clauses /* Generated by Frama-C */ diff --git a/tests/spec/oracle/merge_logic_globals_1.res.oracle b/tests/spec/oracle/merge_logic_globals_1.res.oracle index fadcd8f53cb..7aeea85777c 100644 --- a/tests/spec/oracle/merge_logic_globals_1.res.oracle +++ b/tests/spec/oracle/merge_logic_globals_1.res.oracle @@ -1,2 +1,59 @@ -[kernel] User Error: source file 'merge_logic_globals_2.c' does not exist -[kernel] Frama-C aborted: invalid user input. +[kernel] Parsing merge_logic_globals_1.c (with preprocessing) +[kernel] Parsing merge_logic_globals_2.c (with preprocessing) +[kernel] merge_logic_globals.h:14: Warning: + dropping duplicate def'n of func test at merge_logic_globals.h:14 in favor of that at merge_logic_globals.h:14 +/* Generated by Frama-C */ +struct s_t { + int n ; +}; +typedef struct s_t t; +/*@ type invariant inv_t(t x) = x.n > 0; + */ +int i = 42; +/*@ predicate p{Here}(int x) = x ≥ i; + */ +/*@ axiomatic Bar { + logic ℤ li; + + } + */ +/*@ ensures i ≡ li; */ +void test(void) +{ + return; +} + +/*@ +axiomatic Foo { + type foo; + + logic foo ff(foo x, char *y) ; + + predicate fp(foo x, foo y) ; + + axiom fffp{L}: ∀ foo x, char *y; fp(x, ff(x, y)) ∧ *y ≡ 0; + + } + +*/ +int main(void) +{ + int __retres; + test(); + /*@ assert p((int)li); */ ; + __retres = 0; + return __retres; +} + +int f(void) +{ + int __retres; + t x; + x.n = i; + i --; + /*@ assert p(x.n); */ ; + __retres = x.n; + return __retres; +} + + diff --git a/tests/spec/oracle/model1.res.oracle b/tests/spec/oracle/model1.res.oracle index c0fa5fe152a..74fab1dd774 100644 --- a/tests/spec/oracle/model1.res.oracle +++ b/tests/spec/oracle/model1.res.oracle @@ -1,8 +1,83 @@ [kernel] Parsing model1.c (with preprocessing) -[kernel] User Error: failed to run: gcc -E -C -I. -I/home/bobot/Sources/frama-c/_build/install/default/share/frama-c/share/libc -D__FRAMAC__ -D__FC_MACHDEP_X86_32 -dD -nostdinc -m32 -o '/tmp/model1.c7f10d5.i' '/home/bobot/Sources/frama-c/_build/default/result/model1.c' - this is possibly due to missing preprocessor flags; - consider options -cpp-extra-args, -json-compilation-database or -cpp-command. - See chapter "Preparing the Sources" in the Frama-C user manual for more details. -[kernel] User Error: stopping on file "model1.c" that has errors. Add '-kernel-msg-key pp' - for preprocessing command. -[kernel] Frama-C aborted: invalid user input. +[kernel] Parsing model2.c (with preprocessing) +/* Generated by Frama-C */ +struct S { + int bar ; +}; +/*@ +model struct S { ℤ foo }; +*/ +void reset(struct S *s); + +void inc(struct S *s); + +void dec(struct S *s); + +int is_pos(struct S *s); + +void main(void) +{ + struct S s; + reset(& s); + inc(& s); + /*@ assert s.foo > 0; */ ; + /*@ loop variant s.foo; */ + while (1) { + int tmp; + tmp = is_pos(& s); + if (! tmp) break; + dec(& s); + } + /*@ assert s.foo ≤ 0; */ ; + return; +} + +/*@ type invariant foobar(struct S s) = s.bar ≡ s.foo; + +*/ +/*@ requires \valid(s); + ensures \old(s)->foo ≡ 0; + assigns *s; */ +void reset(struct S *s) +{ + int tmp = s->bar == 0; + return; +} + +/*@ requires \valid(s); + ensures \old(s)->foo > \at(s->foo,Pre); + assigns *s; */ +void inc(struct S *s) +{ + s->bar += 5; + return; +} + +/*@ requires \valid(s); + ensures \old(s)->foo < \at(s->foo,Pre); + assigns *s; */ +void dec(struct S *s) +{ + (s->bar) --; + return; +} + +/*@ requires \valid(s); + assigns \nothing; + + behavior is_true: + assumes s->foo > 0; + ensures \result ≡ 1; + + behavior is_false: + assumes s->foo ≤ 0; + ensures \result ≡ 0; + */ +int is_pos(struct S *s) +{ + int tmp; + if (s->bar > 0) tmp = 1; else tmp = 0; + return tmp; +} + + diff --git a/tests/spec/oracle/multi_axiomatic_1.res.oracle b/tests/spec/oracle/multi_axiomatic_1.res.oracle index 49242357a07..99b62a0cf76 100644 --- a/tests/spec/oracle/multi_axiomatic_1.res.oracle +++ b/tests/spec/oracle/multi_axiomatic_1.res.oracle @@ -1,2 +1,20 @@ -[kernel] User Error: source file 'multi_axiomatic_2.i' does not exist -[kernel] Frama-C aborted: invalid user input. +[kernel] Parsing multi_axiomatic_1.i (no preprocessing) +[kernel] Parsing multi_axiomatic_2.i (no preprocessing) +/* Generated by Frama-C */ +/*@ axiomatic ax { + logic int Acc(int m) ; + + } + */ +/*@ predicate Bnd(ℤ n, int m) = Acc(m) ≤ 9; + */ +/*@ predicate Bnd(ℤ n) = Bnd(n, (int)0); + */ +/*@ requires Bnd(1); + ensures \true; */ +void foo(void) +{ + return; +} + + diff --git a/tests/spec/oracle/multiple_file_1.res.oracle b/tests/spec/oracle/multiple_file_1.res.oracle index dc8375fadf1..15adefaeaf9 100644 --- a/tests/spec/oracle/multiple_file_1.res.oracle +++ b/tests/spec/oracle/multiple_file_1.res.oracle @@ -1,6 +1,7 @@ [kernel] Parsing multiple_file_1.c (with preprocessing) [kernel] Parsing multiple_file_2.c (with preprocessing) -[kernel] multiple_file_1.c:10: Warning: found two contracts. Merging them +[kernel] multiple_file_1.c:10: Warning: + found two contracts. Merging them /* Generated by Frama-C */ /*@ requires x ≥ 0; */ extern int f(int x); diff --git a/tests/spec/oracle/multiple_include_2.res.oracle b/tests/spec/oracle/multiple_include_2.res.oracle index 75db916ee96..e68a9ef8456 100644 --- a/tests/spec/oracle/multiple_include_2.res.oracle +++ b/tests/spec/oracle/multiple_include_2.res.oracle @@ -1,8 +1,4 @@ [kernel] Parsing multiple_include_2.c (with preprocessing) -[kernel] User Error: failed to run: gcc -E -C -I. -I/home/bobot/Sources/frama-c/_build/install/default/share/frama-c/share/libc -D__FRAMAC__ -D__FC_MACHDEP_X86_32 -dD -nostdinc -m32 -o '/tmp/multiple_include_2.cd49d12.i' '/home/bobot/Sources/frama-c/_build/default/result/multiple_include_2.c' - this is possibly due to missing preprocessor flags; - consider options -cpp-extra-args, -json-compilation-database or -cpp-command. - See chapter "Preparing the Sources" in the Frama-C user manual for more details. -[kernel] User Error: stopping on file "multiple_include_2.c" that has errors. Add - '-kernel-msg-key pp' for preprocessing command. +[kernel] Parsing multiple_include_1.c (with preprocessing) +[kernel] User Error: multiple inclusion of logic function p referring to a static variable [kernel] Frama-C aborted: invalid user input. diff --git a/tests/spec/oracle/preprocess.res.oracle b/tests/spec/oracle/preprocess.res.oracle index b44e0270179..5fe944d4b41 100644 --- a/tests/spec/oracle/preprocess.res.oracle +++ b/tests/spec/oracle/preprocess.res.oracle @@ -1,8 +1,55 @@ [kernel] Parsing preprocess.c (with preprocessing) -[kernel] User Error: failed to run: gcc -E -C -I. -I/home/bobot/Sources/frama-c/_build/install/default/share/frama-c/share/libc -D__FRAMAC__ -D__FC_MACHDEP_X86_32 -dD -nostdinc -m32 -o '/tmp/preprocess.c8c0ddf.i' '/home/bobot/Sources/frama-c/_build/default/result/preprocess.c' - this is possibly due to missing preprocessor flags; - consider options -cpp-extra-args, -json-compilation-database or -cpp-command. - See chapter "Preparing the Sources" in the Frama-C user manual for more details. -[kernel] User Error: stopping on file "preprocess.c" that has errors. Add '-kernel-msg-key pp' - for preprocessing command. -[kernel] Frama-C aborted: invalid user input. +[eva] Analyzing a complete application starting at main +[eva] Computing initial state +[eva] Initial state computed +[eva:initial-state] Values of globals at initialization + x ∈ {1} + y ∈ {1} +[eva] computing for function f <- main. + Called from preprocess.c:24. +[eva] preprocess.c:24: function f: precondition got status valid. +[eva] preprocess.c:18: + function f, behavior default: postcondition got status valid. +[eva] Recording results for f +[eva] Done for function f +[eva] preprocess.c:25: assertion got status valid. +[eva] preprocess.c:28: + cannot evaluate ACSL term, unsupported ACSL construct: constant strings +[eva:alarm] preprocess.c:28: Warning: + assertion 'backslash_string' got status unknown. +[eva] Recording results for main +[eva] done for function main +[eva] ====== VALUES COMPUTED ====== +[eva:final-states] Values at end of function f: + __retres ∈ {84} +[eva:final-states] Values at end of function main: + y_0 ∈ {84} + __retres ∈ {0} +/* Generated by Frama-C */ +int x = 1; +/*@ predicate test(int x) = x ≥ 42; + */ +int y = 1; +/*@ requires x_0 ≥ 42; + + behavior default: + ensures test(\result) ∧ 2 ≡ 2; + */ +int f(int x_0) +{ + int __retres; + __retres = x_0 + 42; + return __retres; +} + +int main(void) +{ + int __retres; + int y_0 = f(42); + /*@ assert x ≡ 1; */ ; + /*@ assert backslash_string: *("\\" + 0) ≡ '\\'; */ ; + __retres = 0; + return __retres; +} + + diff --git a/tests/spec/oracle/purse.res.oracle b/tests/spec/oracle/purse.res.oracle index 1c67580a40c..002f073dcb1 100644 --- a/tests/spec/oracle/purse.res.oracle +++ b/tests/spec/oracle/purse.res.oracle @@ -1,8 +1,83 @@ [kernel] Parsing purse.c (with preprocessing) -[kernel] User Error: failed to run: gcc -E -C -I. -I/home/bobot/Sources/frama-c/_build/install/default/share/frama-c/share/libc -D__FRAMAC__ -D__FC_MACHDEP_X86_32 -dD -nostdinc -m32 -o '/tmp/purse.ce2f698.i' '/home/bobot/Sources/frama-c/_build/default/result/purse.c' - this is possibly due to missing preprocessor flags; - consider options -cpp-extra-args, -json-compilation-database or -cpp-command. - See chapter "Preparing the Sources" in the Frama-C user manual for more details. -[kernel] User Error: stopping on file "purse.c" that has errors. Add '-kernel-msg-key pp' - for preprocessing command. -[kernel] Frama-C aborted: invalid user input. +/* Generated by Frama-C */ +#include "stdlib.h" +struct purse { + int balance ; +}; +typedef struct purse purse; +/*@ predicate purse_inv{L}(purse *p) = \valid(p) ∧ p->balance ≥ 0; + +*/ +/*@ requires purse_inv(p) ∧ s ≥ 0; + ensures + purse_inv(\old(p)) ∧ \old(p)->balance ≡ \old(p->balance) + \old(s); + assigns p->balance; + */ +void credit(purse *p, int s) +{ + p->balance += s; + return; +} + +/*@ requires purse_inv(p) ∧ s ≥ 0; + ensures + purse_inv(\old(p)) ∧ \old(p)->balance ≡ \old(p->balance) + \old(s); + assigns p->balance; + */ +void f(purse *p, int s) +{ + p->balance += s; + return; +} + +/*@ requires purse_inv(p) ∧ 0 ≤ s ≤ p->balance; + ensures + purse_inv(\old(p)) ∧ \old(p)->balance ≡ \old(p->balance) - \old(s); + assigns p->balance; + */ +void withdraw(purse *p, int s) +{ + p->balance -= s; + return; +} + +/*@ requires purse_inv(p1) ∧ purse_inv(p2); + ensures \result ≡ 0; + assigns p1->balance, p2->balance; + */ +int test1(purse *p1, purse *p2) +{ + int __retres; + p1->balance = 0; + credit(p2,100); + __retres = p1->balance; + return __retres; +} + +/*@ ensures + \fresh{Old, Here}(\result,sizeof(purse)) ∧ purse_inv(\result) ∧ + \result->balance ≡ 0; + assigns \empty; + */ +purse *new_purse(void) +{ + purse *p = malloc((unsigned int)1 * sizeof(purse)); + p->balance = 0; + return p; +} + +/*@ ensures \result ≡ 150; */ +int test2(void) +{ + int __retres; + purse *p1 = new_purse(); + purse *p2 = new_purse(); + credit(p1,100); + credit(p2,200); + withdraw(p1,50); + withdraw(p2,100); + __retres = p1->balance + p2->balance; + return __retres; +} + + diff --git a/tests/spec/oracle/rm_qualifiers.res.oracle b/tests/spec/oracle/rm_qualifiers.res.oracle index 04e77de3d9d..04cc92b6caa 100644 --- a/tests/spec/oracle/rm_qualifiers.res.oracle +++ b/tests/spec/oracle/rm_qualifiers.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing rm_qualifiers.i (no preprocessing) -[kernel] Parsing rm_qualifiers_res.i (no preprocessing) +[kernel] Parsing result/rm_qualifiers_res.i (no preprocessing) /* Generated by Frama-C */ extern void G(void const *p); diff --git a/tests/spec/oracle/shifts.res.oracle b/tests/spec/oracle/shifts.res.oracle index ab0a299ade0..921a576fb7a 100644 --- a/tests/spec/oracle/shifts.res.oracle +++ b/tests/spec/oracle/shifts.res.oracle @@ -7,8 +7,10 @@ [eva] computing for function f <- main. Called from shifts.c:19. [eva] shifts.c:13: assertion got status valid. -[eva] shifts.c:8: function f, behavior a: postcondition got status valid. -[eva] shifts.c:9: function f, behavior b: postcondition got status valid. +[eva] shifts.c:8: + function f, behavior a: postcondition got status valid. +[eva] shifts.c:9: + function f, behavior b: postcondition got status valid. [eva] Recording results for f [eva] Done for function f [eva] Recording results for main diff --git a/tests/spec/oracle/statement_behavior.res.oracle b/tests/spec/oracle/statement_behavior.res.oracle index 225540226e3..d866de33a68 100644 --- a/tests/spec/oracle/statement_behavior.res.oracle +++ b/tests/spec/oracle/statement_behavior.res.oracle @@ -8,7 +8,8 @@ Called from statement_behavior.c:23. [eva] statement_behavior.c:10: Warning: no \from part for clause 'assigns five_times;' -[eva:alarm] statement_behavior.c:17: Warning: assertion got status unknown. +[eva:alarm] statement_behavior.c:17: Warning: + assertion got status unknown. [eva:alarm] statement_behavior.c:4: Warning: function pfsqopfc: postcondition got status unknown. [eva:alarm] statement_behavior.c:18: Warning: diff --git a/tests/spec/oracle/status_by_call_issue_890.res.oracle b/tests/spec/oracle/status_by_call_issue_890.res.oracle index 33e76da4d07..6b1e54789c6 100644 --- a/tests/spec/oracle/status_by_call_issue_890.res.oracle +++ b/tests/spec/oracle/status_by_call_issue_890.res.oracle @@ -1,4 +1,4 @@ -[kernel] Parsing tests/spec/status_by_call_issue_890.i (no preprocessing) +[kernel] Parsing status_by_call_issue_890.i (no preprocessing) /* Generated by Frama-C */ struct list { struct list *next ; diff --git a/tests/spec/oracle/transitive_rel.res.oracle b/tests/spec/oracle/transitive_rel.res.oracle index f9db4c29658..15f180b4699 100644 --- a/tests/spec/oracle/transitive_rel.res.oracle +++ b/tests/spec/oracle/transitive_rel.res.oracle @@ -1,5 +1,6 @@ [kernel] Parsing transitive_rel.c (with preprocessing) -[kernel:annot-error] transitive_rel.c:16: Warning: Inconsistent relation chain. +[kernel:annot-error] transitive_rel.c:16: Warning: + Inconsistent relation chain. /* Generated by Frama-C */ /*@ predicate bound(int x, int y, int z) = x ≤ y < z ∧ z ≥ y > x; */ diff --git a/tests/spec/oracle/use.res.oracle b/tests/spec/oracle/use.res.oracle index 5cc8ff67c6b..ca1b1e2e0af 100644 --- a/tests/spec/oracle/use.res.oracle +++ b/tests/spec/oracle/use.res.oracle @@ -1,8 +1,25 @@ [kernel] Parsing use.c (with preprocessing) -[kernel] User Error: failed to run: gcc -E -C -I. -I/home/bobot/Sources/frama-c/_build/install/default/share/frama-c/share/libc -D__FRAMAC__ -D__FC_MACHDEP_X86_32 -dD -nostdinc -m32 -o '/tmp/use.c492245.i' '/home/bobot/Sources/frama-c/_build/default/result/use.c' - this is possibly due to missing preprocessor flags; - consider options -cpp-extra-args, -json-compilation-database or -cpp-command. - See chapter "Preparing the Sources" in the Frama-C user manual for more details. -[kernel] User Error: stopping on file "use.c" that has errors. Add '-kernel-msg-key pp' - for preprocessing command. -[kernel] Frama-C aborted: invalid user input. +[kernel] Parsing use2.c (with preprocessing) +/* Generated by Frama-C */ +/*@ axiomatic S { + logic ℤ F(ℤ x) ; + + } + */ +/*@ logic ℤ X= 42; + */ +/*@ ensures X > 0; + ensures F(1) > 0; */ +void f(void) +{ + return; +} + +/*@ ensures X > 0; + ensures F(1) > 0; */ +void g(void) +{ + return; +} + + diff --git a/tests/spec/oracle/volatile.res.oracle b/tests/spec/oracle/volatile.res.oracle index f89207566b0..53ddb97bb63 100644 --- a/tests/spec/oracle/volatile.res.oracle +++ b/tests/spec/oracle/volatile.res.oracle @@ -1,8 +1,97 @@ [kernel] Parsing volatile.c (with preprocessing) -[kernel] User Error: failed to run: gcc -E -C -I. -I/home/bobot/Sources/frama-c/_build/install/default/share/frama-c/share/libc -D__FRAMAC__ -D__FC_MACHDEP_X86_32 -dD -nostdinc -m32 -o '/tmp/volatile.c35a951.i' '/home/bobot/Sources/frama-c/_build/default/result/volatile.c' - this is possibly due to missing preprocessor flags; - consider options -cpp-extra-args, -json-compilation-database or -cpp-command. - See chapter "Preparing the Sources" in the Frama-C user manual for more details. -[kernel] User Error: stopping on file "volatile.c" that has errors. Add '-kernel-msg-key pp' - for preprocessing command. -[kernel] Frama-C aborted: invalid user input. +[kernel] Parsing volatile_aux.c (with preprocessing) +[kernel] volatile.c:8: Warning: + Overlapping volatile specification: volatile location y already associated to a writes function in annotation at loc volatile.c:7. Ignoring new binding. +[kernel] volatile.c:9: Warning: + Overlapping volatile specification: volatile location x already associated to a writes function in annotation at loc volatile.c:7. Ignoring new binding. +[kernel] volatile.c:10: Warning: + Overlapping volatile specification: volatile location y already associated to a reads function in annotation at loc volatile.c:8. Ignoring new binding. +/* Generated by Frama-C */ +typedef int volatile VINT; +struct st { + int a ; + int volatile v ; +}; +typedef struct st ST; +struct vst { + int b ; + ST v ; +}; +int f(int x_0); + +__inline static int r__fc_inline(VINT *v_0) +{ + int __retres; + __retres = *v_0; + return __retres; +} + +__inline static int w__fc_inline(int volatile *v_0, int new) +{ + *v_0 = new; + return new; +} + +int volatile v; +int volatile tab[10]; +VINT *pt; +struct st s; +/*@ volatile v, tab[..] reads r__fc_inline writes w__fc_inline; */ +/*@ volatile *pt writes w__fc_inline; */ +/*@ volatile s.v reads r__fc_inline; +*/ +struct vst vs; +struct vst rs(struct vst *p); + +struct vst ws(struct vst *p, struct vst v); + +/*@ volatile vs reads rs writes ws; +*/ +int volatile x; +int volatile y; +int volatile z; +/*@ volatile x, y writes w__fc_inline; */ +/*@ volatile y, z reads r__fc_inline writes w__fc_inline; */ +/*@ volatile x writes w__fc_inline; */ +/*@ volatile y reads r__fc_inline; */ +int const c = 1; +int *p; +/*@ lemma comp_const_addr{L}: p ≡ &c; + */ +/*@ lemma comp_volatile_addr{L}: p ≡ &v; + */ +/*@ lemma volatile_in_annot_is_illegal{L}: v ≡ 1 ⇒ v ≡ 1; + +*/ +int main(void) +{ + int __retres; + int x_0 = v; + v = f(x_0); + __retres = 0; + return __retres; +} + +__inline static int r__fc_inline_0(VINT *v_0) +{ + int __retres; + __retres = *v_0; + return __retres; +} + +__inline static int w__fc_inline_0(int volatile *v_0, int new) +{ + *v_0 = new; + return new; +} + +int f(int x_0) +{ + int __retres; + x_0 ++; + v = x_0; + __retres = v + x_0; + return __retres; +} + + -- GitLab