|View Issue Details|
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0002153||Frama-C||Plug-in > wp||public||2015-08-31 17:30||2015-09-03 11:55|
|Product Version||Frama-C Sodium|
|Target Version||Fixed in Version|
|Summary||0002153: bound variable names in Coq file depend on unrelated function later in C source code|
|Description||Running "frama-c -pp-annot -wp -wp-split -kernel-msg-key pp -wp-model Typed+ref -wp-driver ../BitTest.driver -cpp-command 'gcc -C -E' -wp-timeout 2 -wp-coq-timeout 5 -wp-prover cvc4 -wp-prover coq 0.c -wp-out 0.wp" on the attached file "0.c", and the corresponding command on "1.c", generate Coq proof obligation files "0.wp/typed_ref_BitTest/Bitstream_WriteThenRead_assert_left.coq" and "1.wp/typed_ref_BitTest/Bitstream_WriteThenRead_assert_left.coq" that differ in bound variable names.|
However, "0.c" initially just includes "1.c" and the defines a function "Bitstream_ReadThenWrite" that is unrelated to the code in "1.c"; for this reason, it shouldn't influence the proof obligation of "Bitstream_WriteThenRead_assert_left". The influence apparently depends on the name of the trailing extra-function in "0.c": if it is named "Bitstream_XeadThenWrite", then the problem disappears. Frama-C handles functions in alphabetical order, as can be seen by its stdout messages.
|Tags||No tags attached.|
(In file "0.c", the trailing extra-function is currently called "Bitstream_VeadThenWrite" rather than "Bitstream_ReadThenWrite". I had experimented with alphabetical order, and forgotten to restore the original name. I can't change the Description field or the uploaded file here, in order to correct my inconsistency.)
Not all of the command line options are really needed. However, using the full command line as given above, the naming difference is maximized, viz.:
< let m := t.[ (shiftfield_F_BStr_bitpos a) <- (i_1)%Z ] in
> let m := t.[ (shiftfield_F_BStr_bitpos a) <- (i)%Z ] in
< ((is_sint32 i%Z)) ->
> ((is_sint32 i_1%Z)) ->
< ((P_Impl i%Z i_2%Z)).
> ((P_Impl i_2%Z i_1%Z)).
Yes, this is fundemental problem in current implementation of WP that we can not change easily.
As far as I understand, this makes a problem for replaying Coq scripts. Correct ?
|Yes, it breaks our coq proofs.|
|I admit I have no clue about your implementation details; however, I don't understand why you can't just reset your name-generation mechanism for bound variables in proof-goals every time you start generating a new goal, or at least every time you start handling a new C function. I'd expect each of both measures to resolve the issue; or am I wrong?|
|2015-08-31 17:30||Jochen||New Issue|
|2015-08-31 17:30||Jochen||Status||new => assigned|
|2015-08-31 17:30||Jochen||Assigned To||=> correnson|
|2015-08-31 17:30||Jochen||File Added: 0.c|
|2015-08-31 17:30||Jochen||File Added: 1.c|
|2015-08-31 17:32||Jochen||File Added: BitTest.driver|
|2015-08-31 17:42||Jochen||Note Added: 0006012|
|2015-09-01 12:01||correnson||Note Added: 0006013|
|2015-09-01 12:01||correnson||Status||assigned => acknowledged|
|2015-09-01 12:03||correnson||Relationship added||related to 0002100|
|2015-09-01 12:26||jens||Note Added: 0006014|
|2015-09-03 11:55||Jochen||Note Added: 0006018|