Skip to content

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

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information