In the example provided by the official manual of Aorai plugin https://frama-c.com/download/frama-c-aorai-manual.pdf the example.ya file is the following
%accept: S1, S2, S3, S4, S5, S6, S7;
S1 : { CALL(main) } -> S2
;
S2 : { opa().r>=0 } -> S3
;
S3 : { opa().return<=5000 } -> S4
;
S4 : { !RETURN(opa) } -> S5
;
S5 : { RETURN(opb) } -> S6
;
S6 : { RETURN(main) } -> S7
;
S7 : -> S7
;
My question is why do we have to specify at the state S4 that {!RETURN(opa)}
why don't we replace it by { CALL(opb) }
?
The main function corresponding to this automaton is
int main() {
if (rr<5000) rr=opa(rr);
opb();
goto L6;
opc();
L6:
return 1;
}