I'd like to know if it's possible to do some kind of forward conditioned slicing with Frama-C and I'm playing with some examples to understand how one could achieve this.
I've got this simple example which seems to result in an imprecise slice and I can't understand why. Here is the function I'd like to slice :
int f(int a){
int x;
if(a == 0)
x = 0;
else if(a != 0)
x = 1;
return x;
}
If I use this specification :
/*@ requires a == 0;
@ ensures old(a) == a;
@ ensures
esult == 0;
*/
then Frama-C returns the following slice (which is precise), using "f -slice-return" criterion and f as entry point :
/*@ ensures
esult ≡ 0; */
int f(void){
int x;
x = 0;
return x;
}
But when using this specification :
/*@ requires a != 0;
@ ensures old(a) == a;
@ ensures
esult == 1;
*/
then all instructions (& annotations) remain (when I was waiting for this slice to be returned :
/*@ ensures
esult ≡ 1; */
int f(void){
int x;
x = 1;
return x;
}
)
In the last case, is the slice imprecise? In this case, what could be the cause?
Regards,
Romain
Edit : I wrote "else if(a != 0) ..." but the problem remains with "else ..."
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…