unprovable obligation generated for "ensures" in presence of exceptions
ID0002046: This issue was created automatically from Mantis Issue 2046. Further discussion may take place here.
Id | Project | Category | View | Due Date | Updated |
---|---|---|---|---|---|
ID0002046 | Frama-Clang | Plug-in > clang | public | 2015-01-08 | 2015-02-14 |
Reporter | Jochen | Assigned To | virgile | Resolution | open |
Priority | normal | Severity | minor | Reproducibility | always |
Platform | frama-c-Neon-20140301+dev-STANCE | OS | - | OS Version | xubuntu-cfe13.10 |
Product Version | - | Target Version | - | Fixed in Version | - |
Description :
Running "frama-c -wp 429.cpp" on the attached program, the goal "typed__Z3bari_post_part1" cannot be proven by Alt-Ergo, i.e. it can't be proven that the postcondition of "foo" implies that of "bar" if the former doesn't throw an exception.
The goal in the file "_Z3bari_post_part1_Alt-Ergo.mlw" reads:
585 goal _Z3bari_post_part1: 586 forall i : int. 587 forall f : S___fc_exn_struct. 588 let x = (f.F___fc_exn_struct_exn_uncaught) : int in 589 (1 <> x) -> 590 is_sint32(i) -> 591 is_sint32(f.F___fc_exn_struct_exn_kind) -> 592 is_sint32(x) -> 593 ((0 = x) -> (42 <= i)) -> 594 (24 <= i)
If line 589 is changed to "(0 = x) ->", Alt-Ergo can prove it without problems; likewise if line 593 is changed to "((1 <> x) -> (42 <= i)) ->".