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)) ->". ## Attachments - [429.cpp](/uploads/8924b97702a6b0ba13c4daf1f56285ca/429.cpp)
issue