Skip to content
Snippets Groups Projects
Commit 0d76acb2 authored by Allan Blanchard's avatar Allan Blanchard
Browse files

[wp] Fix a bug with int chunks ranks + add a test

parent f948e96e
No related branches found
No related tags found
1 merge request!3Fixed a semantic error concerning ISO C99 Uninitialized Value Undefined Behaviour in Eva main manual
......@@ -130,15 +130,22 @@ struct
let self = "typed"
let int_rank = function
| CBool -> 0
| k -> Ctypes.i_bytes k * (if Ctypes.signed k then 2 else 1)
| UInt8 -> 1
| SInt8 -> 2
| UInt16 -> 3
| SInt16 -> 4
| UInt32 -> 5
| SInt32 -> 6
| UInt64 -> 7
| SInt64 -> 8
let rank = function
| M_char -> -1
| M_int i -> int_rank i
| M_f32 -> 17
| M_f64 -> 18
| M_pointer -> 19
| T_alloc -> 20
| M_f32 -> 9
| M_f64 -> 10
| M_pointer -> 11
| T_alloc -> 12
let hash = rank
let name = function
| M_int _ -> "Mint"
......
/* run.config
OPT: -wp-rte -wp-prop="-NO_CHECK,-rte"
*/
/* run.config_qualif
OPT: -wp-rte -wp-prop="-NO_CHECK,-rte"
*/
const char x[10] ;
/*@
requires \valid(&i8[0..9]) && \valid(&u8[0..9]) && \valid(&i16[0..9]) && \valid(&u16[0..9])
&& \valid(&i32[0..9]) && \valid(&u32[0..9]) && \valid(&i64[0..9]) && \valid(&u64[0..9]);
ensures \forall integer k ;
0 <= k < 10 ==>
x[k]+8 ==
i8[k]+7 == u8[k]+6 ==
i16[k]+5 == u16[k]+4 ==
i32[k]+3 == u32[k]+2 ==
i64[k]+1 == u64[k];
*/
void function(signed char i8[10],
unsigned char u8[10],
signed short i16[10],
unsigned short u16[10],
signed int i32[10],
unsigned int u32[10],
signed long long int i64[10],
unsigned long long int u64[10])
{
/*@
loop invariant NO_CHECK: 0 <= i <= 10;
loop invariant \forall integer k ; 0 <= k < i ==> i8[k] == 1 ;
loop invariant \forall integer k ; 0 <= k < i ==> u8[k] == 2 ;
loop invariant \forall integer k ; 0 <= k < i ==> i16[k] == 3 ;
loop invariant \forall integer k ; 0 <= k < i ==> u16[k] == 4 ;
loop invariant \forall integer k ; 0 <= k < i ==> i32[k] == 5 ;
loop invariant \forall integer k ; 0 <= k < i ==> u32[k] == 6 ;
loop invariant \forall integer k ; 0 <= k < i ==> i64[k] == 7 ;
loop invariant \forall integer k ; 0 <= k < i ==> u64[k] == 8 ;
loop assigns NO_CHECK: i, i8[0..9], u8[0..9], i16[0..9], u16[0..9], i32[0..9], u32[0..9], i64[0..9], u64[0..9] ;
loop variant NO_CHECK: 10-i;
*/
for(int i = 0; i < 10; ++i){
i8[i] = 1 ;
u8[i] = 2 ;
i16[i] = 3 ;
u16[i] = 4 ;
i32[i] = 5 ;
u32[i] = 6 ;
i64[i] = 7 ;
u64[i] = 8 ;
}
}
This diff is collapsed.
# frama-c -wp -wp-rte [...]
[kernel] Parsing tests/wp_acsl/chunk_typing.i (no preprocessing)
[wp] Running WP plugin...
[wp] Loading driver 'share/wp.driver'
[rte] annotating function function
[wp] 17 goals scheduled
[wp] [Alt-Ergo] Goal typed_function_ensures : Valid
[wp] [Alt-Ergo] Goal typed_function_loop_invariant_preserved : Valid
[wp] [Qed] Goal typed_function_loop_invariant_established : Valid
[wp] [Alt-Ergo] Goal typed_function_loop_invariant_2_preserved : Valid
[wp] [Qed] Goal typed_function_loop_invariant_2_established : Valid
[wp] [Alt-Ergo] Goal typed_function_loop_invariant_3_preserved : Valid
[wp] [Qed] Goal typed_function_loop_invariant_3_established : Valid
[wp] [Alt-Ergo] Goal typed_function_loop_invariant_4_preserved : Valid
[wp] [Qed] Goal typed_function_loop_invariant_4_established : Valid
[wp] [Alt-Ergo] Goal typed_function_loop_invariant_5_preserved : Valid
[wp] [Qed] Goal typed_function_loop_invariant_5_established : Valid
[wp] [Alt-Ergo] Goal typed_function_loop_invariant_6_preserved : Valid
[wp] [Qed] Goal typed_function_loop_invariant_6_established : Valid
[wp] [Alt-Ergo] Goal typed_function_loop_invariant_7_preserved : Valid
[wp] [Qed] Goal typed_function_loop_invariant_7_established : Valid
[wp] [Alt-Ergo] Goal typed_function_loop_invariant_8_preserved : Valid
[wp] [Qed] Goal typed_function_loop_invariant_8_established : Valid
[wp] Proved goals: 17 / 17
Qed: 8
Alt-Ergo: 9
------------------------------------------------------------
Functions WP Alt-Ergo Total Success
function 8 9 17 100%
------------------------------------------------------------
[wp] Warning: Memory model hypotheses for function 'function':
/*@
behavior typed:
requires \separated(x+(..),
\union(i8+(..),u8+(..),i16+(..),u16+(..),i32+(..),u32+(..),
i64+(..),u64+(..)));
*/
void function(signed char * /*[10]*/ i8, unsigned char * /*[10]*/ u8,
short * /*[10]*/ i16, unsigned short * /*[10]*/ u16,
int * /*[10]*/ i32, unsigned int * /*[10]*/ u32,
long long * /*[10]*/ i64, unsigned long long * /*[10]*/ u64);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment